基础环境介绍

节点名

IP

系统

配置

master

192.168.235.10

Centos7 2009

4CPU 2G内存 30G硬盘

node1

192.168.235.11

Centos7 2009

4CPU 2G内存 30G硬盘

node2

192.168.235.12

Centos7 2009

4CPU 2G内存 30G硬盘

配置环境

安装包

升级前版本

升级后版本

docker-ce

18.09.1

20.10.12

docker-ce-cli

18.09.1

20.10.12

kubeadmin

1.18.20

1.23.1

kubectl

1.18.20

1.23.1

kubelet

1.18.20

1.23.1

一、初始化环境

三台同步操作

1、安装阿里系统源和kubernetes源

#备份源文件

[root@master ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

#下载生产新源文件 [root@master ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
 

#创建阿里的kubernetes源

 [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

#清理缓存

 [root@master ~]# yum clean all

2、安装NTP并设置时间同步,同时顺带安装vim和wget

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

#同步到阿里云时间服务器

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

3、关闭防火墙和SELinux

#关闭防火墙和防火墙的开机自启

[root@master ~]# systemctl stop firewalld && systemctl disable firewalld

#关闭SELinux [root@master ~]# vim /etc/selinux/config SELINUX=disabled

[root@master ~]# setenforce 0

4、设置hosts文件

[root@master ~]# echo "192.168.235.10 master 192.168.235.11 node1 192.168.235.12 node2" >> /etc/hosts

5、修改k8s.conf文件

[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 ~]# sysctl --system

6、安装docker

#安装依赖环境

[root@master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

#添加docker阿里源

[root@master ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@master ~]# sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

[root@master ~]# yum makecache fast

[root@master ~]# yum -y install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io [root@master ~]# systemctl start docker && systemctl enable docker

7、更换docker镜像下载源

[root@master ~]# echo '{"registry-mirrors":["https://registry.docker-cn.com"]}' > /etc/docker/daemon.json

8、关闭swap分区

[root@master ~]# vim /etc/fstab #/dev/mapper/centos-swap swap swap defaults 0 0 [root@master ~]# swapoff -a

确认swap分区为0

9、安装kube工具并为kubelet添加开机启动

不要开启kubelet!不要开启kubelet!不要开启kubelet!

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

[root@master ~]# systemctl enable kubelet

二、Master节点部署

1、初始化master节点

kubeadm init \

#设置api的主机,这里是master节点

--apiserver-advertise-address=192.168.235.10 \

#设置下载镜像的源,这里是阿里的源

--image-repository registry.aliyuncs.com/google_containers \

#设置下载的kubernetes版本

--kubernetes-version v1.18.20 \

#设置集群内部使用的地址段,不要访问外网

--service-cidr=10.96.0.0/12 \

#设置容器使用的地址段,不要与其他网络地址冲突

--pod-network-cidr=10.244.0.0/16

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

#如果初始化失败,可以使用 kubeadm reset重置,然后删除$HOME/.kube/config中的文件即可重新初始化

2、开始使用你的集群,你需要以普通用户的身份运行以下命令:  

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

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

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

3、查看master节点信息

[root@master ~]# kubectl get node 

#查看pod [root@master ~]# kubectl get pods 

#查看kube系统默认运行的容器

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

4、安装Pod网络插件

如果https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml无法正常连接,可以直接用浏览器浏览然后下载另存为kube-flannel.yml,传到服务器,请务必保持文本中内容的格式。

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

查看coredns是否启动

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

三、加入节点

1、将node节点加入集群,此步骤在各个node节点中操做一遍,此处的token是master节点初始化时自动生成的(即第二大步骤,第1步生成),token不要复制本文的,每个人的都不同

kubeadm join 192.168.235.10:6443 --token 4tma0s.2rzqfq118xerboc2 \ --discovery-token-ca-cert-hash sha256:b9750ec3d5d365b7e7b98d24791ca3001323c4d5abbacd0f79d4a9a9562c786c

2、回到主节点查看集群是否成功加入和准备完毕,如果未准备完毕,等待即可

[root@master ~]# kubectl get nodes

NAME          STATUS   ROLES                          AGE   VERSION
k8smaster01   Ready    control-plane,master   16h   v1.18.20
k8snode01     Ready    <none>                         16h   v1.18.20
k8snode02     Ready    <none>                         16h   v1.18.20

四、安装dashboard面板(master节点上操作)

1、下载资源配置清单

如果https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml无法正常连接,可以直接用浏览器浏览然后下载另存为recommended.yaml,传到服务器,请务必保持文本中内容的格式。

[root@master ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml

2、修改部分配置

[root@master ~]# vim recommended.yaml

#第一处(注意大小写和空格)

 #第二处 

3、下载镜像

[root@master ~]# docker pull kubernetesui/dashboard:v2.0.0-beta8 

4、根据配置资源清单创建dashboard镜像

[root@master ~]# kubectl apply -f recommended.yaml 

5、查看dashboard的pod和service状态

#等待所有pod就绪

[root@master ~]# kubectl get pods,svc -n kubernetes-dashboard -o wide 

6、生成token

#创建dashboard用户dashboard-admin

[root@master ~]# kubectl create serviceaccount dashboard-admin -n kube-system 

#授权集群管理权限给dashboard-admin账户(即:为dashboard-admin账户选择角色和授权)

[root@master ~]# kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin 

#查看dashboard-admin的token

[root@master ~]# kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}') 

7、登录Dashboard面板

https://192.168.235.10:30001

登录web界面,建议使用火狐浏览器,添加例外后就能正常打开,谷歌和edge会拒绝访问,即便添加到安全信任也被拒绝

 

五、升级K8S到最新版本

生产环境请慎重考虑,测试环境如果时虚拟机请先创建快照再操作

1、master节点使用如下步骤升级

不可以直接使用yum update升级到最新安装包,会造成API通讯异常,可以kubeadm upgrade plan命令通过查看,同时版本信息中也会有告警

[root@master1 ~]# kubectl version

WARNING: version difference between client (1.23) and server (1.17) exceeds the supported minor version skew of +/-1

翻译过来就是:客户端(1.23)和服务器(1.17)的版本差异超过了支持的版本倾斜+/-1个小版本,即1.XX

如果已经使用update命令升级了kube三套件,可以使用yum downgrade kubeadm-1.XX.XX,降低到指定版本,最好是初始化版本下个版本的最终版,本文中是1.8.20查阅后发现下一个版本最终版是1.19.5版

#查看版本升级计划

kubeadm upgrade plan

#安装对应版本的kubeadm

yum update -y kubeadm-1.19.5

#升级版本,升级过程中会有询问确认是否升级,输入y即可

kubeadm upgrade apply v1.19.5

#继续升级下一个版本的Latest version,因为跨越了大版本,所以没有办法通过kubeadm upgrade plan命令查看,直接安装如下版本的kubeadm即可,不能跨越2个小版本(即1后面的数据相差不能大于等于2)升级!不能跨越2个小版本升级!不能跨越2个小版本升级!

yum update -y kubeadm-1.20.14

kubeadm upgrade apply v1.20.14

#1.21的最终版是1.21.8

yum install -y kubeadm-1.21.8

kubeadm upgrade apply v1.21.8,如此循环直到升级到需要的版本

#每个大版本的最终版本可以直接访问如下链接进行查询

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

2、升级2个node节点

[root@master ~]# kubeadm upgrade node config --kubelet-version 1.23.1

3、查看升级后的各节点信息

[root@master ~]# kubectl get node -o wide 

#查看版本信息,告警已经消失

[root@master ~]# kubectl version 

4、使用命令删除旧的容器三个节点都操作

使用kubeadm upgrade plan一般不会将容器停止,而是直接删除并重新创建。

[root@master ~]# docker container rm $(docker ps -a |grep Exited |awk -b '{print $1}')

5、重新登录Dashboard面板,不需要重新创建token,Ctrl+F5强制刷新页面输入原来的token即可

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐