二、K8s Cluster详细安装步骤
K8s实验环境:一个manager,2个worker node的centos7,保证互相能够通信:一、准备步骤:步骤1.关闭三台设备selinux和设置防火墙selinux需要将修改/etc/selinux/config文件,将SELINUX设置为disable;# This file controls the state of SELinux on the system.# SELINUX= c
K8s实验环境:
一个manager,2个worker node的centos7,保证互相能够通信:
一、准备步骤:
步骤1.关闭三台设备selinux和设置防火墙
selinux需要将修改/etc/selinux/config文件,将SELINUX设置为disable;
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
防火墙放行所有数据包:
[root@vms201 ~]# firewall-cmd --set-default-zone=trusted
Warning: ZONE_ALREADY_SET: trusted
success
步骤2.修改hosts文件,保证三台设备能够通过域名访问
vms201上:vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.201 vms201.rhce.cc vms201
192.168.0.202 vms202.rhce.cc vms202
192.168.0.203 vms203.rhce.cc vms203
同步给vms202和vms203:
scp /etc/hosts vms202:/etc/
scp /etc/hosts vms203:/etc/
步骤3:三台设备上关闭SWAP
swapoff -a ; sed -i '/swap/d' /etc/fstab
步骤4:三台设备配置yum源
wget ftp://ftp.rhce.cc/k8s/* -P /etc/yum.repos.d/
二、安装Docker,作为kubernetes的runtime:
步骤1:在三台设备上安装docker-ce版本,并启动
yum install docker-ce -y
systemctl enable docker --now
步骤2:设置镜像加速器,使用阿里云的即可
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
EOF
systemctl restart docker
三、K8S安装:
步骤1:三台设备上设置iptables相关属性
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
步骤2:三台设备上安装K8s,并启动服务
yum install -y kubelet-1.21.0-0 kubeadm-1.21.0-0 kubectl-1.21.0-0 --disableexcludes=kubernetes
systemctl restart kubelet ; systemctl enable kubelet
K8S的版本命名,例如,版本号为x.y.z-0,其中x为大版本号,y为小版本号,z为补丁号。版本前面一般会加一个v,表示version。
通过如下命令可以查看有哪些版本的k8s
yum list --showduplicates kubeadm --disableexcludes=kubernetes
步骤3:在master上初始化集群
在master上的核心组件,例如api-server、scheduler、kubelet、etcd、scheduler等都是以容器的方式运行,由于默认的国外镜像站点可能无法访问,所以这里修改为阿里云镜像下载,同时需要指定版本和pod的网段地址:
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.21.0 --pod-network-cidr=10.244.0.0/16
下载完成后后使用docker images查看下载的镜像。在下载过程中可能会出现报错信息提示镜像:
docker pull registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0
没有下载下来,这是由于阿里云命名错误 。
所以我们需要自己下载导入并同步到另外两台设备上去,并加载:
scp coredns-1.21.tar vms202:~
scp coredns-1.21.tar vms203:~
docker load -i coredns-1.21.tar
导入镜像完成后重新初始化k8s:
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.21.0 --pod-network-cidr=10.244.0.0/16
步骤4:在master上创建k8s认证文件
上一步初始化完成后会有提示信息,依次复制提信息中的三条命令即可:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
步骤5:两台worker noeds加入集群
在master上:
kubeadm token create --print-join-command
将显示的内容复制到两台work nodes即可。在master上查看nodes:
[root@vms201 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
vms201.rhce.cc NotReady control-plane,master x v1.21.0
vms202.rhce.cc NotReady <none> x v1.21.0
vms203.rhce.cc NotReady <none> x v1.21.0
可以看打vms202和vms203都加入到了集群中;但是STATUS是NotReady,原因是各个Pod之间无法通信,需要安装CNI网络插件。这里安装calico:
curl https://docs.projectcalico.org/manifests/calico-etcd.yaml -o calico.yaml
然后查看calico.yaml需要哪些镜像:
[root@vms201 ~]# grep image calico.yaml
image: docker.io/calico/cni:v3.19.1
image: docker.io/calico/pod2daemon-flexvol:v3.19.1
image: docker.io/calico/node:v3.19.1
image: docker.io/calico/kube-controllers:v3.19.1
然后再master上将所有所需镜像pull下来,并打包成tar文件拷贝到2个work nodes上,并在三台设备上导入回镜像:
docker save calico/cni calico/kube-controllers calico/node calico/pod2daemon-flexvol > calico-3.19-img.tar
scp calico-3.19-img.tar vms202:~
scp calico-3.19-img.tar vms203:~
docker load -i calico-3.19-img.tar
在三台设备上使用docker images查看加载是否成功。然后在master上修改calico.yaml文件,并安装:
vim calico.yaml
搜索192.168.0.0,修改为初始化集群时pod的10.244.0.0/24即可:
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16"
修改保存后在master设备上使用如下命令安装calico:
kubectl apply -f calico.yaml
安装完成后查看重新查看noeds状态:
[root@vms201 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
vms201.rhce.cc Ready control-plane,master 2d8h v1.21.0
vms202.rhce.cc Ready <none> 2d8h v1.21.0
vms203.rhce.cc Ready <none> 2d8h v1.21.0
可以看到STATUS为Ready。
步骤6:设置tab键补全k8s命令的功能
前提: bash-completion.noarch 必须要安装才行。
我们目前无法使用tab键补全命令,所以需要进行配置。在master上:
vim /etc/profile
加入一行配置:
# /etc/profile
source <(kubectl completion bash)
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
保存配置后更新配置
source /etc/profile
完成后即可使用tab键补全k8s相关命令。
四、重装K8s集群相关操作
步骤1:在master上删除nodes
kubectl drain vms202.rhce.cc --ignore-daemonsets
kubectl drain vms203.rhce.cc --ignore-daemonsets
kubectl delete nodes vms202.rhce.cc
kubectl delete nodes vms203.rhce.cc
kubectl drain vms201.rhce.cc --ignore-daemonsets
kubectl delete nodes vms201.rhce.cc
完成后可以到集群已经没有了:
[root@vms201 ~]# kubectl get nodes
No resources found
步骤2:在三台设备上清空设置
kubeadm reset
步骤3:在master上重新初始化集群
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.21.0 --pod-network-cidr=10.244.0.0/16
步骤4:在master上创建k8s认证文件
上一步初始化完成后会有提示信息,依次复制提信息中的三条命令即可:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
注意提示是否覆盖时选择y。
步骤5:两台work noeds加入集群
在master上:
kubeadm token create --print-join-command
将显示的内容复制到两台work nodes即可。然后在master上查看nodes:
[root@vms201 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
vms201.rhce.cc Ready control-plane,master 5m36s v1.21.0
vms202.rhce.cc Ready <none> 91s v1.21.0
vms203.rhce.cc Ready <none> 87s v1.21.0
可以看懂已经重新创建集群。但是这里有一个问题就是STATUS是Ready,这是因为我们之前装过了calico的原因,这个数据已经写入到了etcd数据中了,但是重装K8s后calico也需要重新安装:
kubectl apply -f calico.yaml
注意:如果master没有重置,只重置了worker,是不需要安装calico的。
五、部署多master的场景
当集群中仅存在一个master节点时,如果其出现了故障,会导致K8s的控制平面完全失效。所以为了保证K8s集群的高可靠性,我们可以设置多个master,当其中部分master出现故障时,其他master依然能够管理整个集群。
正常情况下,我们可以使用一个负载均衡器将请求转发给集群中的master,如果有一天其中的一个master出现故障后,负载均衡器仅需要将请求发送给依旧运行正常的master即可。
环境中有2个master,1个worker node。管理流量访问负载均衡器haproxy,地址为192.168.0.101,然后流量被均匀负载到两个master上。两个master之间的数据由etcd来同步。如果想要更高的可靠性,可以设置两个以上的loadbalance、和worker,这里仅是实验演示master的高可用性。
loadbalance安装步骤:
yum inastll haproxy -y
编辑配置文件,在文件末尾设置关联的master:
vim /etc/haproxy/haproxy.cfg
两个服务器的权重相同:
listen k8s-lb *:6443
mode tcp
balance roundrobin
server s1 192.168.0.200:6443 weight 1
server s2 192.168.0.201:6443 weight 1
启动服务并查看状态:
systemctl enable haproxy --now
[root@vms101 ~]# systemctl enable haproxy --now
Created symlink from /etc/systemd/system/multi-user.target.wants/haproxy.service to /usr/lib/systemd/system/haproxy.service.
[root@vms101 ~]# systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
Active: active (running) since 一 2021-07-19 03:14:36 CST; 24s ago
Main PID: 1681 (haproxy-systemd)
CGroup: /system.slice/haproxy.service
├─1681 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/h...
├─1682 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
└─1683 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
7月 19 03:14:36 vms206.rhce.cc systemd[1]: Started HAProxy Load Balancer.
7月 19 03:14:36 vms206.rhce.cc systemd[1]: Starting HAProxy Load Balancer...
7月 19 03:14:36 vms206.rhce.cc haproxy-systemd-wrapper[1681]: haproxy-systemd-wrapper: e...
7月 19 03:14:36 vms206.rhce.cc haproxy-systemd-wrapper[1681]: [WARNING] 199/031436 (1682...
7月 19 03:14:36 vms206.rhce.cc haproxy-systemd-wrapper[1681]: [WARNING] 199/031436 (1682...
Hint: Some lines were ellipsized, use -l to show in full.
etcd安装请参考:
https://blog.csdn.net/tushanpeipei/article/details/118409836?spm=1001.2014.3001.5501
部署多master集群时需要注意的点:
大体和部署单master时一致,不同的是可以选择使用yaml文件在第一个master上来初始化集群:
kubeadm init --config=kubeadm-config.yaml
kubeadm-config.yaml文件从kubeadm config view获取,修改控制平面选项controlPlaneEndpoint,指向了haproxy的地址:
apiServer:
extraArgs:
authorization-mode: Node,RBAC
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
controlPlaneEndpoint: "192.168.0.101:6443"
clusterName: kubernetes
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.21.0
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
scheduler: {}
完成后会和单节点相同,提示将其余的worker node和master加入集群的命令。如果是master身份加入集群,需要在以worker node加入的命令后写上–control-plane。
然后需要将在第一个master上的/etc/kubernetes/pki下的所有证书文件拷贝到其他master的相同目录下去。
更好的部署master高可用性的方式:sealos
参考文档https://www.sealyun.com/
整理资料来源:
《老段CKA课程》
更多推荐
所有评论(0)