K8S 部署总结

K8S 部署

节点角色

主机名

IP 地址

gateway

dns

CPU

内存

Master

控制节点

master

192.168.1.11

192.168.1.254

114.114.114.114

4 核

4GB

node节点

node1

192.168.1.12

192.168.1.254

114.114.114.114

4 核

4GB

node节点

node2

192.168.1.13

192.168.1.254

114.114.114.114

4 核

4GB

修改 hosts文件

添加主机名与IP对应关系(记得设置主机名)

[root@master ~]# vim /etc/hosts #输入下面的内容

192.168.1.11 master

192.168.1.12 node1

192.168.1.13 node2

[root@master ~]# scp /etc/hosts 192.168.1.12:/etc/hosts

[root@master ~]# scp /etc/hosts 192.168.1.13:/etc/hosts

关闭swap分区

Kubernetes集群配置要求关闭swap分区

[root@master ~]# swapoff -a #临时生效

[root@master ~]# vim /etc/fstab #永久生效,将swap行注释或删除

也可以按下面的操作永久关闭swap

[root@master ~]# yes | cp /etc/fstab /etc/fstab_bak

[root@master ~]# cat /etc/fstab_bak |grep -v swap > /etc/fstab

[root@node1 ~]# swapoff -a

[root@node1 ~]# yes | cp /etc/fstab /etc/fstab_bak

[root@node1 ~]# cat /etc/fstab_bak |grep -v swap > /etc/fstab

[root@node2 ~]# swapoff -a

[root@node2 ~]# yes | cp /etc/fstab /etc/fstab_bak

[root@node2 ~]# cat /etc/fstab_bak |grep -v swap > /etc/fstab

关闭swap后,可以通过free -m查看是否关闭swap

关闭防火墙

[root@master ~]# systemctl stop firewalld

[root@master ~]# systemctl disable firewalld

[root@node1 ~]# systemctl stop firewalld

[root@node1 ~]# systemctl disable firewalld

[root@node2 ~]# systemctl stop firewalld

[root@node2 ~]# systemctl disable firewalld

关闭selinux

[root@master ~]# setenforce 0

[root@master ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

[root@node1 ~]# setenforce 0

[root@node1 ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

[root@node2 ~]# setenforce 0

[root@node2 ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

将桥接的IPv4流量传递到iptables的链

[root@master ~]# cat <<EOF > /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

[root@master ~]# modprobe br_netfilter //加载br_netfilter模块

[root@master ~]# vim /etc/rc.local //添加如下内容

modprobe br_netfilter

[root@master ~]# chmod +x /etc/rc.d/rc.local

[root@master ~]# sysctl --system 或者[root@master ~]# sysctl -p /etc/sysctl.conf

[root@node1 ~]#cat <<EOF > /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

[root@node1 ~]# modprobe br_netfilter

[root@node1 ~]# vim /etc/rc.local //添加如下内容

modprobe br_netfilter

[root@node1 ~]# chmod +x /etc/rc.d/rc.local

[root@node1 ~]# sysctl --system

[root@node2 ~]#cat <<EOF > /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

[root@node2 ~]# modprobe br_netfilter

[root@node2 ~]# vim /etc/rc.local //添加如下内容

modprobe br_netfilter

[root@node2 ~]# chmod +x /etc/rc.d/rc.local

[root@node2 ~]# sysctl --system

同步系统时间

[root@master ~]# yum install -y ntpdate

[root@master ~]# ntpdate ntp1.aliyun.com

[root@node1 ~]# yum install -y ntpdate

[root@node1 ~]# ntpdate ntp1.aliyun.com

[root@node2 ~]# yum install -y ntpdate

[root@node2 ~]# ntpdate ntp1.aliyun.com

注:建议是设置cron计划任务定期同步校对系统时间。

[root@master ~]# crontab -l

*/30 * * * * ntpdate ntp1.aliyun.com

配置免密认证

[root@master ~]# ssh-keygen #生成密钥对

[root@master ~]# ssh-copy-id root@192.168.1.12 #将公钥导入到主机1.12

[root@master ~]# ssh-copy-id root@192.168.1.13 #将公钥导入到主机1.13

k8s集群master节点安装

配置k8s源

上传我制作好的k8s源

[root@master ~]# ls

anaconda-ks.cfg k8s-package.tar.gz

[root@master ~]# tar zxvf k8s-package.tar.gz

[root@master ~]# vim /etc/yum.repos.d/k8s-package.repo

[k8s-package]

name=k8s-package

baseurl=file:///root/k8s-package

enabled=1

gpgcheck=0

配置本地系统镜像 yum 源:

[root@master ~]# mount /dev/sr0 /mnt/

[root@master ~]# vim /etc/yum.repos.d/centos7.repo

[centos7]

name=CentOS7

baseurl=file:///mnt

enable=1

gpgcheck=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

删除外网源

[root@master ~]# mv /etc/yum.repos.d/CentOS-* /opt/ #删除外网源

本实验使用方法一进行搭建

方法 2:配置网络源(跳过)

k8s集群节点都要安装kubeadm,kubelet,kubectl

官方的k8s包仓库为https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86-64,这个站点国内目前打不开,建议使用国内具有k8s包的站点,例如使用阿里云站点,https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

配置k8s源:

[root@master ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

enabled=1

gpgcheck=1

repo_gpgcheck=1

gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

配置centos7官方yum源:

[root@master ~]#wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

注:阿里云镜像站点

https://developer.aliyun.com/mirror或https://mirrors.aliyun.com

复制 k8s yum 源相关文件到其他两台机器上:

[root@master ~]# scp -r /root/k8s-package 192.168.1.12:/root/

[root@master ~]# scp /etc/yum.repos.d/k8s-package.repo 192.168.1.12:/etc/yum.repos.d/

[root@master ~]# scp /etc/yum.repos.d/centos7.repo 192.168.1.12:/etc/yum.repos.d/

[root@master ~]# scp -r /root/k8s-package 192.168.1.13:/root/

[root@master ~]# scp /etc/yum.repos.d/k8s-package.repo 192.168.1.13:/etc/yum.repos.d/

[root@master ~]# scp /etc/yum.repos.d/centos7.repo 192.168.1.13:/etc/yum.repos.d/

登录 node1:

[root@node1 ~]# mv /etc/yum.repos.d/CentOS-* /opt/

[root@node1 ~]# mount /dev/sr0 /mnt/

登录 node2:

[root@node2 ~]# mv /etc/yum.repos.d/CentOS-* /opt/

[root@node2 ~]# mount /dev/sr0 /mnt/

安装docker-ce

[root@master ~]# yum remove docker \

docker-common \

docker-selinux \

docker-engine #卸载旧版docker

[root@master ~]# yum install -y docker-ce #安装docker

[root@master ~]# systemctl start docker #启动doker

[root@master ~]# systemctl enable docker #设置docker开机启动

[root@master ~]# docker version //查看docker版本

设置Cgroup驱动程序为systemd
安装docker文件驱动默认由systemd改成cgroupfs, 而我们安装的docker需要使用的文件驱动是systemd, 造成不一致, 会导致镜像无法启动

cat > /etc/docker/daemon.json <<EOF

{

"exec-opts": ["native.cgroupdriver=systemd"],

"log-driver": "json-file",

"log-opts": {

"max-size": "100m"

},

"storage-driver": "overlay2"

}

EOF

配置docker镜像下载加速

[root@master ~]# vim /etc/docker/daemon.json #添加阿里云镜像加速地址,注意后面的逗号,不能少。

{

"registry-mirrors": ["https://w0ckwo1v.mirror.aliyuncs.com"],

"exec-opts": ["native.cgroupdriver=systemd"],

"log-driver": "json-file",

"log-opts": {

"max-size": "100m"

},

"storage-driver": "overlay2"

}

编辑systemctl的Docker启动文件和配置文件

Docker从1.13版本开始调整了默认的防火墙规则,禁用了iptables filter表中FOWARD链,这样会引起Kubernetes集群中跨Node的Pod无法通信,因此docker安装完成后,还需要手动修改iptables规则。

[root@master ~]# sed -i "13i ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT" /usr/lib/systemd/system/docker.service

[root@master ~]#systemctl daemon-reload

[root@master ~]# systemctl restart docker #重启docker

Master节点安装 k8s 组件

[root@master ~]# yum -y install kubeadm kubelet kubectl

启动kubelet并添加开机启动

[root@master ~]# systemctl start kubelet

[root@master ~]# systemctl enable kubelet.service

初始化集群:

[root@master ~]# kubeadm init --apiserver-advertise-address=192.168.1.11 --kubernetes-version=v1.14.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

注释:

--pod-network-cidr=10.244.0.0/16 #指明pod网络可以使用的IP地址段。

--service-cidr=10.96.0.0/12 #为service的虚拟IP地址另外指定IP地址段,缺省值: "10.96.0.0/12"

o start using your cluster, you need to run the following as a regular user:

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.

Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:

https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.1.11:6443 --token 8bec0z.8powgy6mjmt8t50z \

--discovery-token-ca-cert-hash sha256:7a8e6450db80d436ec3904909065cd73acbec78078ddcce2dd190d5ebde057a

初始化集群报错

上图报错的原因是kubeadm init 命令默认拉取镜像地址k8s.gcr.io,国内无法直接访问。

解决方法1:我们可以从别的镜像地址拉取镜像,可以指定阿里云镜像仓库地址。(有网的情况下)

[root@master ~]# kubeadm init --apiserver-advertise-address=192.168.1.11 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.14.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

注:--image-repository registry.aliyuncs.com/google_containers指定拉取镜像地址为阿里云镜像仓库

解决方法2:将下载好的镜像导出,然后再导入镜像,重新执行初始化命令。(无网的情况)

[root@master ~]# kubeadm init --apiserver-advertise-address=192.168.1.11 --kubernetes-version=v1.14.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

导入下载好的镜像

安装k8s 1.14.1版本,上传我给你们的镜像就可以,别的版本需要手动下载修改tag标签。

[root@master ~]# ls

k8s-dns-sidecar-amd64.tar kube-controller-manager.tar pause.tar

coredns.tar k8s-package kube-dnsmasq-amd64.tar

etcd.tar k8s-package.tar.gz kube-proxy.tar

flannel.tar kube-apiserver.tar kube-scheduler.tar

[root@master ~]# find /root -name "*.tar" -exec docker load -i {} \; #自动导入

执行初始化集群

[root@master ~]# kubeadm init --apiserver-advertise-address=192.168.1.11 --kubernetes-version=v1.14.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

启动集群

[root@master ~]# mkdir -p $HOME/.kube

[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

[root@master ~]# chown $(id -u):$(id -g) $HOME/.kube/config

安装flannel网络

无网的情况下:

上传kube-flannel.yml配置文件到/root目录下

[root@master ~]# kubectl apply -f /root/kube-flannel.yml

在有网络的情况下:

[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

确保能够访问到quay.io这个registery。执行完上述命令后,会拉取flannel的镜像。

可用docker image ls查看flannel镜像是否成功拉取,如quay.io/coreos/flannel :v0.11.0-amd64。

查看组件健康状态

[root@master ~]# kubectl get cs

查看节点信息

[root@master ~]# kubectl get nodes

获取当前系统上所有在运行的pod的状态,

指定名称空间为kube-system

[root@master ~]# kubectl get pods -n kube-system

获取当前系统的名称空间

[root@master ~]# kubectl get ns

node1节点操作

开启路由转发

[root@node1 ~]# echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

[root@node1 ~]# echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables

[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward //临时生效

[root@node1 ~]# vim /etc/sysctl.conf //永久生效,添加下面的内容

net.ipv4.ip_forward = 1

[root@node1 ~]# sysctl -p

安装docker

[root@ node1 ~]# yum install -y docker-ce #安装docker-ce

[root@ node1 ~]# systemctl start docker #启动doker

[root@ node1 ~]# systemctl enable docker #设置docker开机启动

设置Cgroup驱动程序为systemd

[root@ node1 ~]# cat > /etc/docker/daemon.json <<EOF

{

"exec-opts": ["native.cgroupdriver=systemd"],

"log-driver": "json-file",

"log-opts": {

"max-size": "100m"

},

"storage-driver": "overlay2"

}

EOF

导入所需要的镜像

copy镜像到cong12,cong13

[root@master ~]# find /root/ -name "*.tar" -exec scp {} root@192.168.1.12:/root \;

[root@master ~]# find /root/ -name "*.tar" -exec scp {} root@192.168.1.13:/root \;

导入镜像:

[root@node1 ~]# find /root/ -name "*.tar" -exec docker load -i {} \;

编辑systemctl的Docker启动文件和配置文件

[root@ node1 ~]# sed -i "13i ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT" /usr/lib/systemd/system/docker.service

[root@node1 ~]#systemctl daemon-reload

[root@node1 ~]# systemctl restart docker #重启docker

安装软件包

[root@node1 ~]# yum -y install kubeadm kubelet kubectl

设置开机启动

[root@node1 ~]# systemctl enable kubelet.service

注意,kubelet此时不启动,因为缺配置文件,启动也会报错,所以不启动

加入master节点

注:加入节点如果忘记kubeadm join,可以用下列命令查询。

kubeadm token create --print-join-command

在node1和node2节点上,要执行下面的命令,加入master节点。

[root@node1 ~]# kubeadm join 192.168.1.11:6443 --token gvpcd9.yw8yup7yjoyp7wtb \

--discovery-token-ca-cert-hash sha256:79e1c8511426711c7d71733b4220e0ecb2149bb47d4da75d5c1abe4bdb29ff9b

重新生成token

默认情况下 Token 过期是时间是24小时,如果 Token 过期以后,可以输入以下命令,生成新的 Token:

[root@master ~]# kubeadm token create

gf7ext.9as1wuiq2680rgv1

——discovery-token-ca-cert-hash 的查看方法,在 Master 运行以下命令查看

[root@master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

c026eebdb8852ba20636f15a628fe902ddc2c42cd3f2f28d62c315fd321edc5b

使用kubeadm 命令删除节点

给node节点添加污点

[root@master ~]# kubectl drain <node name> --delete-local-data --force --ignore-daemonsets

删除node节点
[root@master ~]# kubectl delete node <node name>
重置kubeadm

[root@master ~]# kubeadm reset

[root@node1 ~]# kubeadm reset

[root@node2 ~]# kubeadm reset

若需要重新加入 ,则再次执行 kubeadm init or kubeadm join

posted @ 2023-07-21 08:22  ღ᭄遇见你²⁰²²  阅读(79)  评论(0)    收藏  举报