1. 引言
1.1. 目的
本k8s部署手册,介绍多台服务之间部署k8s部署集群需要的环境以及需要注意的问题。
1.2. 背景
方便多服务器的应用管理。
1.3. 读者对象
运维
2. 环境
2.1. 需要部署安装docker(此处略)
后端开发人员需要从禅道查看自己的任务计划,从需求工程师那获取需求文档,从数据开发工程师获取数据设计模型后进行后端开发设计,模块开发完成以后进行自测,测试完毕形成swagger接口文档交付给前端和测试人员。
2.2. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
2.3. 关闭selinux
setenforce 0
2.4. 关闭swap
swapoff -a
永久禁用swap可以直接修改/etc/fstab文件,注释掉swap项。swapoff -a 只是临时禁用,下次关机重启又恢复原样;
2.5. 设置etc/hosts
vim /etc/hosts
127.0.0.1 localhost
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.180.xxx k8s-01
192.168.180.xxx k8s-02
192.168.180.xxx k8s-03
3. 安装kubernetes(master节点和node节点一样)
3.1. 配置yum源(采用的是国内的镜像源)
/etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes Repository
baseurl=kubernetes-yum-repos-kubernetes-el7-x86_64安装包下载_开源镜像站-阿里云
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
3.2. 更新yum软件源缓存
yum makecache fast
3.3. 安装kubelet、kubeadm和kubectl
每个节点都要安装
需要指定kube版本,官方提示1.24版本之后,容器运行时不支持docker,因此我们要安装1.23.5版本
使用yum安装时,需要指定版本号
#yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
yum install -y kubelet-1.23.5 kubeadm-1.23.5 kubectl-1.23.5
3.4. 启动kubelet服务
kubeadm将使用kubelet服务以容器的方式部署和启动Kubernetes的主要服务,所以需要先启动kubelet服务(这里会失败, journalctl -xeu kubelet命令看失败原因, 只有当执行了kubeadm init后才会启动成功)
systemctl enable kubelet & systemctl start kubelet
4. 运行kubeadm init安装master节点
4.1. Master节点kubernetes初始化
#kubeadm init --config=init-config.yaml #采用此方式还需要改advertiseAddress等信息否则会出现以下安装失败,etcd网络问题,故采用以下方式
#kubeadm init --apiserver-advertise-address=192.168.181.15 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.23.1 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16
kubeadm init \
--kubernetes-version=1.23.5 \
--apiserver-advertise-address=192.168.181.197 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
注:
1、--apiserver-advertise-address 需要修改为主节点ip
2、--kubernetes-version 版本号与各节点保持一致
3、失败(Init失败原因备注)
5. 子节点安装node
5.1. node节点所在的机器也要按照前置环境的步骤走一遍
5.2. 安装像master那样增加kubernetes的yum源
5.3. 安装kubelet和kubeadm
yum install kubelet kubeadm --disableexcludes=kubernetes
5.4. 运行以下命令,并设置开机启动
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
5.5. 执行join命令
kubeadm join 192.168.181.xx:6443 --token nw5a3y.kwkercgyp0g5he20 \
--discovery-token-ca-cert-hash sha256:43a737dd067e8caf6718f7ff6a788e833befba89aa44d41c46a5e4c2c6111114
执行这一步失败的话,跟master节点一样排查
5.6. 子节点安装成功
5.7. 安装网络插件 (节点状态改成ready)
# 安装Calico CNI插件
kubectl apply -f "https://docs.projectcalico.org/manifests/calico.yaml"
# 安装weave插件
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
#安装flannel插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
目前我们使用的是flannel插件
5.8. 、验证安装是否成功
5.9. Master节点要删除节点的话执行以下命令
kubectl delete nodes k8s-node1
5.10. 查看pods状态
kubectl get pods --all-namespaces
kubectl get pods
5.11. 查看K8S集群状态
kubectl get cs
6. Init失败原因备注
6.1. Kubeadm init命令执行时出现 bash: kubeadm :commod not found时
卸载组件以及删除相关镜像
yum erase -y kubelet kubectl kubeadm kubernetes-cni
docker rmi -f 镜像名称
卸载完重新安装
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
6.2. Kubeadm int 时需要保持 kubelet 驱动与需要启动保持一致
初始化失败通过下面的命令查询失败原因(如果失败大概率是docker和kubelet驱动不一致)
systemctl status kubelet
journalctl -xeu kubelet
驱动有两种cgroupfs和systemd(官方推荐的)
Kubelet和docker的驱动保持一致就可以
Docker驱动修改
vim /etc/docker/daemon.json
"exec-opts": ["native.cgroupdriver=systemd"]
重启docker
systemctl daemon-reload && systemctl restart docker
检查驱动是否已经修改
docker info|grep "Cgroup Driver"
Kubelet驱动修改
cat > /var/lib/kubelet/config.yaml <<EOF
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
EOF
初始化成功
6.3. 执行kubectl错误The connection to the server localhost:8080 was refused
kubectl命令需要使用kubernetes-admin来运行,而node上并没有admin.conf文件。将master上的admin.conf文件拷贝到node,然后执行一下命令
[root@cm-server ~]# cd /etc/kubernetes/
[root@cm-server kubernetes]# ls
bootstrap-kubelet.conf kubelet.conf manifests pki
[root@cm-server kubernetes]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
[root@cm-server kubernetes]# source ~/.bash_profile
再次执行kubectl get pod命令就可以使用了