前言

二进制安装的kubernetes1.15.3小版本升级至1.5.12(降低小版本操作也是一致)
大版本更新需要升级后的版本参数配置有所了解,修改好对应的参数问题一般影响不大,对于不同版本的Kubernetes,许多资源对象的API的版本可能会变更。可以通过下面的命令获取当前的API信息


官方文档下载址:https://github.com/kubernetes/kubernetes/releases

1. 准备

1.1 查看当前版本

  1. [root@hdss7-21 ~]# kubectl get nodes
  2. NAME STATUS ROLES AGE VERSION
  3. hdss7-21.host.com Ready master,node 8d v1.15.3
  4. hdss7-22.host.com Ready master,node 8d v1.15.3
  5. [root@hdss7-21 /]# ll /opt/
  6. lrwxrwxrwx 1 root root 17 11 14 19:16 kubernetes -> kubernetes-1.15.3
  7. drwxr-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=