前言
二进制安装的kubernetes1.15.3小版本升级至1.5.12(降低小版本操作也是一致)
大版本更新需要升级后的版本参数配置有所了解,修改好对应的参数问题一般影响不大,对于不同版本的Kubernetes,许多资源对象的API的版本可能会变更。可以通过下面的命令获取当前的API信息
官方文档下载址:https://github.com/kubernetes/kubernetes/releases
1. 准备
1.1 查看当前版本
[root@hdss7-21 ~]# kubectl get nodesNAME STATUS ROLES AGE VERSIONhdss7-21.host.com Ready master,node 8d v1.15.3hdss7-22.host.com Ready master,node 8d v1.15.3[root@hdss7-21 /]# ll /opt/lrwxrwxrwx 1 root root 17 11月 14 19:16 kubernetes -> kubernetes-1.15.3drwxr-xr-x 5 root root 62 11月 14 19:18 kubernetes-1.15.3
1.2. 解压新版本kubernetes
请注意,kubernets在低版本中解压后的文件夹是kubernetes, 解压的目录会覆盖原来的,谨慎操作,请在其他目录解压
-- 建立临时文件夹
[root@hdss7-21 /]# mkdir /opt/123/
-- 解压至临时文件夹
[root@hdss7-21 /]# tar -vxf /opt/src/kubernetes-server-linux-amd64-1.15.12.tag.gz -C /opt/123
-- 变更
[root@hdss7-21 /]# mv /opt/123/kubernetes/ /opt/kubernetes-1.15.12/
[root@hdss7-21 /]# rm -fr /opt/123
-- 查看
[root@hdss7-21 /]# ll /opt/
lrwxrwxrwx 1 root root 17 11月 14 19:16 kubernetes -> kubernetes-1.15.3
drwxr-xr-x 4 root root 79 8月 19 2019 kubernetes-1.15.12
drwxr-xr-x 5 root root 62 11月 23 17:07 kubernetes-1.15.3
-- 删除压缩包里面源代码和docker镜像文件和_tag文件
[root@hdss7-21 /]# rm -f /opt/kubernetes-1.15.12/kubernetes-src.tar.gz
[root@hdss7-21 /]# rm -f /opt/kubernetes-1.15.12/server/bin/*.tar
[root@hdss7-21 /]# rm -f /opt/kubernetes-1.15.12/server/bin/*_tag
[root@hdss7-21 /]# cd /opt/kubernetes-1.15.12/server/bin/
[root@hdss7-21 bin]# mkdir certs /opt/kubernetes-1.15.12/conf
-- 复制证书
[root@hdss7-21 bin]# cp /opt/kubernetes/server/bin/certs/* certs/
[root@hdss7-21 bin]# ll certs/
总用量 40
-rw------- 1 root root 1679 11月 23 17:40 apiserver-key.pem
-rw-r--r-- 1 root root 1639 11月 23 17:40 apiserver.pem
-rw------- 1 root root 1679 11月 23 17:40 ca-key.pem
-rw-r--r-- 1 root root 1346 11月 23 17:40 ca.pem
-rw------- 1 root root 1679 11月 23 17:40 client-key.pem
-rw-r--r-- 1 root root 1367 11月 23 17:40 client.pem
-rw------- 1 root root 1675 11月 23 17:40 kubelet-key.pem
-rw-r--r-- 1 root root 1468 11月 23 17:40 kubelet.pem
-rw------- 1 root root 1675 11月 23 17:40 kube-proxy-client-key.pem
-rw-r--r-- 1 root root 1379 11月 23 17:40 kube-proxy-client.pem
-- 复制配置文件
[root@hdss7-21 bin]# cp /opt/kubernetes/conf/* /opt/kubernetes-1.15.12/conf/
[root@hdss7-21 bin]# ll /opt/kubernetes-1.15.12/conf/
总用量 20
-rw-r--r-- 1 root root 2223 11月 23 17:42 audit.yaml
-rw------- 1 root root 6203 11月 23 17:42 kubelet.kubeconfig
-rw------- 1 root root 6219 11月 23 17:42 kube-proxy.kubeconfig
-- 复制启动脚本
[root@hdss7-21 bin]# cp /opt/kubernetes/server/bin/*.sh .
[root@hdss7-21 bin]# ll *.sh
-rwxr--r-- 1 root root 1236 11月 23 17:43 kube-apiserver-startup.sh
-rwxr--r-- 1 root root 452 11月 23 17:43 kube-controller-manager-startup.sh
-rwxr--r-- 1 root root 817 11月 23 17:43 kubelet-startup.sh
-rwxr--r-- 1 root root 295 11月 23 17:43 kube-proxy-startup.sh
-rwxr--r-- 1 root root 252 11月 23 17:43 kube-scheduler-startup.sh
2. 关停hdss7-21的kubernetes流量和服务
2.1 注释nginx相关配置
-- 注释nginx相关条目
[root@hdss7-11 ~]# vim /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
stream {
log_format proxy '$time_local|$remote_addr|$upstream_addr|$protocol|$status|'
'$session_time|$upstream_connect_time|$bytes_sent|$bytes_received|'
'$upstream_bytes_sent|$upstream_bytes_received' ;
upstream kube-apiserver {
# server 10.4.7.21:6443 max_fails=3 fail_timeout=30s;
server 10.4.7.22:6443 max_fails=3 fail_timeout=30s;
}
server {
listen 7443;
proxy_connect_timeout 2s;
proxy_timeout 900s;
proxy_pass kube-apiserver;
access_log /var/log/nginx/proxy.log proxy;
}
}
http {
upstream default_backend_traefik {
# 所有的nodes都放到upstream中
# server 10.4.7.21:81 max_fails=3 fail_timeout=10s;
server 10.4.7.22:81 max_fails=3 fail_timeout=10s;
}
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
server_name *.odl.com;
location / {
proxy_pass http://default_backend_traefik;
proxy_set_header Host $http_host;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
}
}
}
-- 重新加载nginx
[root@hdss7-11 ~]# systemctl reload nginx
2.2. 删除hdss7-21节点
-- 查看节点
[root@hdss7-21 /]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
hdss7-21.host.com Ready master,node 8d v1.15.3
hdss7-22.host.com Ready master,node 8d v1.15.3
-- 查看kube-system命名空间下的pods资源宿主机地址
[root@hdss7-21 /]# kubectl get pods -n kube-system -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
coredns-7674f74c44-q849s 1/1 Running 8 5d7h 172.7.22.9 hdss7-22.host.com <none> <none>
kubernetes-dashboard-d7f5c75bd-fzmrm 1/1 Running 4 8d 172.7.21.5 hdss7-21.host.com <none> <none>
traefik-ingress-w5xlr 1/1 Running 3 6d2h 172.7.21.8 hdss7-21.host.com <none> <none>
traefik-ingress-x44wp 1/1 Running 9 6d2h 172.7.22.7 hdss7-22.host.com <none>
-- 删除hdss7-21节点,等待一段时间后查看pods详情,可看出原在hdss7-21的pods都转移至hdss7-22中
[root@hdss7-21 /]# kubectl delete nodes hdss7-21.host.com
node "hdss7-21.host.com" deleted
[root@hdss7-21 /]# kubectl get pods -n kube-system -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
coredns-7674f74c44-q849s 1/1 Running 8 5d7h 172.7.22.9 hdss7-22.host.com <none> <none>
kubernetes-dashboard-d7f5c75bd-zhmt6 1/1 Running 0 14s 172.7.22.15 hdss7-22.host.com <none> <none>
traefik-ingress-x44wp 1/1 Running 9 6d3h 172.7.22.7 hdss7-22.host.com <none> <none>
3. 升级kubernetes
[root@hdss7-21 bin]# cd /opt/
-- 删除软链接
[root@hdss7-21 opt]# rm -f kubernetes
-- 建立新的软链接
[root@hdss7-21 opt]# ln -s kubernetes-1.15.12 kubernetes
-- supervisorctl重启服务,如在生产环境,请一个一个重启(只包含上面启动脚本的服务)
[root@hdss7-21 opt]# supervisorctl restart all
[root@hdss7-21 opt]# supervisorctl status
etcd-server-7-21 RUNNING pid 11920, uptime 0:01:32
flanneld-7-21 RUNNING pid 10574, uptime 0:02:32
kube-apiserver-7-21 RUNNING pid 12321, uptime 0:00:34
kube-controller-manager-7-21 RUNNING pid 12322, uptime 0:00:34
kube-kubelet-7-21 RUNNING pid 10573, uptime 0:02:32
kube-proxy-7-21 RUNNING pid 10580, uptime 0:02:32
kube-scheduler-7-21 RUNNING pid 12320, uptime 0:00:34
[root@hdss7-21 opt]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
hdss7-21.host.com Ready master,node 6h36m v1.15.12
hdss7-22.host.com Ready <none> 3h55m v1.15.12
-- 按情况添加角色
[root@hdss7-21 opt]# kubectl label node hdss7-22.host.com node-role.kubernetes.io/master=
[root@hdss7-21 opt]# kubectl label node hdss7-22.host.com node-role.kubernetes.io/node=
