1、软件包下载

去github上下载较新的Kubernetes软件包https://github.com/











2、升级说明

  • 升级包括master节点升级和node节点的升级,本章升级至v1.15.12;
  • Master节点的服务包括:apiserver、controller-manager、kube-scheduler;
  • Node节点的服务包括:kubelet和kube-proxy;
  • 由于apiserver被nginx代理,所以在升级的时候需要操作操作nginx注释升级节点,避免带来无法访问的情况;
  • 我们的master节点和node都是在同一个集群服务器上,所以一起进行操作;

3、确定节点升级顺序

查看节点信息

  1. [root@hdss7-21 ~]# kubectl get node
  2. NAME STATUS ROLES AGE VERSION
  3. hdss7-21.host.com Ready <none> 14d v1.14.10
  4. hdss7-22.host.com Ready <none> 14d v1.14.10

查看pod分布状态,尽量选择较少pod的节点先进行迁移

  1. [root@hdss7-21 ~]# kubectl get pod -o wide -n kube-system
  2. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  3. coredns-64f49f5655-smzzz 1/1 Running 6 8d 172.7.21.4 hdss7-21.host.com <none> <none>
  4. kubernetes-dashboard-99ff79fcd-khl8z 1/1 Running 2 4d 172.7.22.4 hdss7-22.host.com <none> <none>
  5. traefik-ingress-2svq6 1/1 Running 3 5d 172.7.21.5 hdss7-21.host.com <none> <none>
  6. traefik-ingress-rcd28 1/1 Running 3 5d 172.7.22.3 hdss7-22.host.com <none> <none>

由于分布差不多,我们选择先升级10.4.7.21服务器上的节点

4、修改代理nginx配置

在10.4.7.21和22上都操作,以21为例

注释apiserver升级节点的服务器

  1. [root@hdss7-11 ~]# vim /etc/nginx/nginx.conf
  2. upstream kube-apiserver {
  3. # server 10.4.7.21:6443 max_fails=3 fail_timeout=30s;
  4. server 10.4.7.22:6443 max_fails=3 fail_timeout=30s;
  5. }
  6. [root@hdss7-11 ~]# nginx -t
  7. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
  8. nginx: configuration file /etc/nginx/nginx.conf test is successful
  9. [root@hdss7-11 ~]# nginx -s reload

5、删除第一个节点

将节点调成不可调度状态

  1. [root@hdss7-21 ~]# kubectl cordon hdss7-21.host.com
  2. node/hdss7-21.host.com cordoned

当节点设置成不可调度状态之后,新启动的 pod 不会调度到此节点上,但是该节点上正在运行的 Pod 将不会被影响。

驱逐节点上的pod

  1. [root@hdss7-21 ~]# kubectl drain hdss7-21.host.com --delete-local-data --ignore-daemonsets --force
  2. node/hdss7-21.host.com already cordoned
  3. WARNING: ignoring DaemonSet-managed Pods: default/nginx-ds-2rj9d, kube-system/traefik-ingress-2svq6
  4. evicting pod "coredns-64f49f5655-smzzz"
  5. evicting pod "nginx-dp-86678bb55c-tklvc"
  6. pod/nginx-dp-86678bb55c-tklvc evicted
  7. pod/coredns-64f49f5655-smzzz evicted
  8. node/hdss7-21.host.com evicted

注释:

--delete-local-data 即使pod使用了emptyDir也删除 --ignore-daemonsets 忽略deamonset控制器的pod,如果不忽略,daemonset控制器控制的pod被删除后可能马上又在此节点上启动起来,会成为死循环; --force 不加force参数只会删除该NODE上由ReplicationController, ReplicaSet, DaemonSet,StatefulSet or Job创建的Pod,加了后还会删除'裸奔的pod'(没有绑定到任何replication controller)

再次查看pod分布

  1. [root@hdss7-21 ~]# kubectl get pod -o wide -n kube-system
  2. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  3. coredns-64f49f5655-n2pl7 1/1 Running 0 39s 172.7.22.7 hdss7-22.host.com <none> <none>
  4. kubernetes-dashboard-99ff79fcd-khl8z 1/1 Running 2 4d 172.7.22.4 hdss7-22.host.com <none> <none>
  5. traefik-ingress-2svq6 1/1 Running 3 5d 172.7.21.5 hdss7-21.host.com <none> <none>
  6. traefik-ingress-rcd28 1/1 Running 3 5d 172.7.22.3 hdss7-22.host.com <none> <none>

除了daemonset的pod已被移动到10.4.7.22接节点上

测试重新启动的coredns是否生效

  1. [root@hdss7-21 ~]# dig -t A nginx-dp.default.svc.cluster.local @192.168.0.2 +short
  2. 192.168.191.8

删除节点

  1. [root@hdss7-21 ~]# kubectl delete node hdss7-21.host.com
  2. node "hdss7-21.host.com" deleted

6、升级第一个节点

配置新版本

  1. [root@hdss7-21 ~]# cd /opt/src/
  2. [root@hdss7-21 src]# tar -zxvf kubernetes-server-linux-amd64-v1.15.12.tar.gz
  3. [root@hdss7-21 src]# mv kubernetes /opt/kubernetes-v1.15.12
  4. [root@hdss7-21 src]# cd /opt/kubernetes-v1.15.12/
  5. [root@hdss7-21 kubernetes-v1.15.12]# rm -f kubernetes-src.tar.gz
  6. [root@hdss7-21 kubernetes-v1.15.12]# cd server/bin/
  7. [root@hdss7-21 bin]# rm -f *.tar *_tag
  8. [root@hdss7-21 bin]# ll
  9. 总用量 677292
  10. -rwxr-xr-x 1 root root 50581504 6 16 21:10 apiextensions-apiserver
  11. -rwxr-xr-x 1 root root 44638208 6 16 21:10 kubeadm
  12. -rwxr-xr-x 1 root root 48525312 6 16 21:10 kube-aggregator
  13. -rwxr-xr-x 1 root root 122097664 6 16 21:10 kube-apiserver
  14. -rwxr-xr-x 1 root root 116301824 6 16 21:10 kube-controller-manager
  15. -rwxr-xr-x 1 root root 46419968 6 16 21:10 kubectl
  16. -rwxr-xr-x 1 root root 54980712 6 16 21:10 kubectl-convert
  17. -rwxr-xr-x 1 root root 118151728 6 16 21:10 kubelet
  18. -rwxr-xr-x 1 root root 43139072 6 16 21:10 kube-proxy
  19. -rwxr-xr-x 1 root root 47112192 6 16 21:10 kube-scheduler
  20. -rwxr-xr-x 1 root root 1593344 6 16 21:10 mounter
  21. [root@hdss7-21 bin]# mkdir certs
  22. [root@hdss7-21 bin]# mkdir /opt/kubernetes-v1.15.12/conf

拷贝证书

  1. [root@hdss7-21 bin]# cp /opt/kubernetes/server/bin/certs/* certs/
  2. [root@hdss7-21 bin]# ls certs/
  3. apiserver-key.pem ca-key.pem client-key.pem kubelet-key.pem kube-proxy-client-key.pem
  4. apiserver.pem ca.pem client.pem kubelet.pem kube-proxy-client.pem

拷贝服务启动脚本

  1. [root@hdss7-21 bin]# cp /opt/kubernetes/server/bin/*.sh .
  2. [root@hdss7-21 bin]# ls
  3. apiextensions-apiserver kube-apiserver kubectl kube-proxy mounter
  4. certs kube-apiserver-startup.sh kubectl-convert kube-proxy-startup.sh
  5. kubeadm kube-controller-manager kubelet kube-scheduler
  6. kube-aggregator kube-controller-manager-startup.sh kubelet-startup.sh kube-scheduler-startup.sh

拷贝配置文件

  1. [root@hdss7-21 bin]# cp /opt/kubernetes/conf/* /opt/kubernetes-v1.15.12/conf/
  2. [root@hdss7-21 bin]# ls /opt/kubernetes-v1.15.12/conf/
  3. audit.yaml k8s-node.yaml kubelet.kubeconfig kube-proxy.kubeconfig nginx-ds.yaml

重新创建软连接

  1. [root@hdss7-21 bin]# cd /opt/
  2. [root@hdss7-21 opt]# ll
  3. 总用量 24
  4. drwx--x--x 4 root root 4096 7 2 21:50 containerd
  5. lrwxrwxrwx 1 root root 16 6 8 20:36 etcd -> /opt/etcd-v3.3.1
  6. drwxr-xr-x 5 etcd etcd 4096 7 9 21:25 etcd-v3.3.1
  7. lrwxrwxrwx 1 root root 20 7 17 19:40 flannel -> /opt/flannel-v0.11.0
  8. drwxr-xr-x 3 root root 4096 7 28 20:05 flannel-v0.11.0
  9. lrwxrwxrwx 1 root root 23 7 10 20:17 kubernetes -> /opt/kubernetes-v1.14.10
  10. drwxr-xr-x 5 root root 4096 7 10 20:36 kubernetes-v1.14.10
  11. drwxr-xr-x 6 root root 4096 7 28 22:18 kubernetes-v1.15.12
  12. drwxr-xr-x 2 root root 4096 7 28 22:10 src
  13. [root@hdss7-21 opt]# rm -rf kubernetes
  14. [root@hdss7-21 opt]# ln -s /opt/kubernetes-v1.15.12 /opt/kubernetes
  15. [root@hdss7-21 opt]# ll
  16. 总用量 24
  17. drwx--x--x 4 root root 4096 7 2 21:50 containerd
  18. lrwxrwxrwx 1 root root 16 6 8 20:36 etcd -> /opt/etcd-v3.3.1
  19. drwxr-xr-x 5 etcd etcd 4096 7 9 21:25 etcd-v3.3.1
  20. lrwxrwxrwx 1 root root 20 7 17 19:40 flannel -> /opt/flannel-v0.11.0
  21. drwxr-xr-x 3 root root 4096 7 28 20:05 flannel-v0.11.0
  22. lrwxrwxrwx 1 root root 23 7 28 22:20 kubernetes -> /opt/kubernetes-v1.15.12
  23. drwxr-xr-x 5 root root 4096 7 10 20:36 kubernetes-v1.14.10
  24. drwxr-xr-x 6 root root 4096 7 28 22:18 kubernetes-v1.15.12
  25. drwxr-xr-x 2 root root 4096 7 28 22:10 src

7、重启节点服务

  1. [root@hdss7-21 opt]# supervisorctl status
  2. etcd-server-7-21 RUNNING pid 6296, uptime 0:16:14
  3. flanneld-7-21 RUNNING pid 7042, uptime 0:13:14
  4. kube-apiserver-7-21 RUNNING pid 7165, uptime 0:12:24
  5. kube-controller-manager-7-21 RUNNING pid 4675, uptime 0:19:03
  6. kube-kubelet-7-21 RUNNING pid 7184, uptime 0:12:16
  7. kube-proxy-7-21 RUNNING pid 4678, uptime 0:19:03
  8. kube-scheduler-7-21 RUNNING pid 4673, uptime 0:19:03

重启node节点服务

  1. [root@hdss7-21 opt]# supervisorctl restart kube-kubelet-7-21
  2. [root@hdss7-21 opt]# supervisorctl restart kube-proxy-7-21

查看版本

  1. [root@hdss7-21 opt]# kubectl get node
  2. NAME STATUS ROLES AGE VERSION
  3. hdss7-21.host.com Ready <none> 4d22h v1.15.12
  4. hdss7-22.host.com Ready <none> 19d v1.14.10

重启master节点服务

  1. [root@hdss7-21 opt]# supervisorctl restart kube-apiserver-7-21
  2. [root@hdss7-21 opt]# supervisorctl restart kube-controller-manager-7-21
  3. [root@hdss7-21 opt]# supervisorctl restart kube-scheduler-7-21

注意重启过程中可以查看日志,确保启动无问题。

8、修改代理nginx配置

修改11和12配置

  1. [root@hdss7-11 ~]# vim /etc/nginx/nginx.conf
  2. upstream kube-apiserver {
  3. server 10.4.7.21:6443 max_fails=3 fail_timeout=30s;
  4. # server 10.4.7.22:6443 max_fails=3 fail_timeout=30s;
  5. }
  6. [root@hdss7-11 ~]# nginx -t
  7. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
  8. nginx: configuration file /etc/nginx/nginx.conf test is successful
  9. [root@hdss7-11 ~]# nginx -s reload

9、升级第二个节点

按照同样的方法对其余节点进行升级

在10.4.7.22上操作

最后检查服务启动状态和node节点版本

  1. [root@hdss7-22 ~]# supervisorctl status
  2. etcd-server-7-22 RUNNING pid 1235, uptime 1:10:58
  3. flanneld-7-22 RUNNING pid 1203, uptime 1:10:59
  4. kube-apiserver-7-22 RUNNING pid 25776, uptime 0:01:39
  5. kube-controller-manager-7-22 RUNNING pid 26009, uptime 0:01:09
  6. kube-kubelet-7-22 RUNNING pid 23925, uptime 0:06:08
  7. kube-proxy-7-22 RUNNING pid 24142, uptime 0:05:38
  8. kube-scheduler-7-22 RUNNING pid 26190, uptime 0:00:38
  9. [root@hdss7-22 ~]# kubectl get node
  10. NAME STATUS ROLES AGE VERSION
  11. hdss7-21.host.com Ready <none> 4d22h v1.15.12
  12. hdss7-22.host.com Ready <none> 6m12s v1.15.12

10、修改nginx代理

将配置文件改为原来状态

  1. [root@hdss7-11 ~]# vim /etc/nginx/nginx.conf
  2. upstream kube-apiserver {
  3. server 10.4.7.21:6443 max_fails=3 fail_timeout=30s;
  4. server 10.4.7.22:6443 max_fails=3 fail_timeout=30s;
  5. }
  6. [root@hdss7-11 ~]# nginx -t
  7. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
  8. nginx: configuration file /etc/nginx/nginx.conf test is successful
  9. [root@hdss7-11 ~]# nginx -s reload

11、测试操作平台



12、重新分配pod节点

查看pod信息得知目前大部分的pod在10.4.7.21上,这不符合性能最优状态,我们可以在dashbard面板上删除一个pod,通过scheduler的计算,会在另外一个(22上)负载较少的node节点上重新启动这个pod

如下,删除coredns的pod

正在重启状态

启动后的状态

第十四章 二进制部署k8s集群的平滑升级的更多相关文章

  1. 二进制方法-部署k8s集群部署1.18版本

    二进制方法-部署k8s集群部署1.18版本 1. 前置知识点 1.1 生产环境可部署kubernetes集群的两种方式 目前生产部署Kubernetes集群主要有两种方式 kuberadm Kubea ...

  2. 二进制部署 Kubernetes 集群

    二进制部署 Kubernetes 集群   提供的几种Kubernetes部署方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernet ...

  3. CentOS6安装各种大数据软件 第四章:Hadoop分布式集群配置

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  4. Ansible自动化部署K8S集群

    Ansible自动化部署K8S集群 1.1 Ansible介绍 Ansible是一种IT自动化工具.它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部署,滚动更新.Ansible适用于管理企 ...

  5. 使用kubeadm部署k8s集群[v1.18.0]

    使用kubeadm部署k8s集群 环境 IP地址 主机名 节点 10.0.0.63 k8s-master1 master1 10.0.0.63 k8s-master2 master2 10.0.0.6 ...

  6. 二进制部署K8S-2集群部署

    二进制部署K8S-2集群部署 感谢老男孩教育王导的公开视频,文档整理自https://www.yuque.com/duduniao/k8s. 因为在后期运行容器需要有大量的物理硬件资源使用的环境是用的 ...

  7. 【02】Kubernets:使用 kubeadm 部署 K8S 集群

    写在前面的话 通过上一节,知道了 K8S 有 Master / Node 组成,但是具体怎么个组成法,就是这一节具体谈的内容.概念性的东西我们会尽量以实验的形式将其复现. 部署 K8S 集群 互联网常 ...

  8. 部署K8S集群

    1.Kubernetes 1.1.概念 kubernetes(通常称为k8s)用于自动部署.扩展和管理容器化应用程序的开源系统.它旨在提供“跨主机集群的自动部署.扩展以及运行应用程序容器的平台”.支持 ...

  9. 菜鸟系列k8s——快速部署k8s集群

    快速部署k8s集群 1. 安装Rancher Rancher是业界唯一完全开源的企业级容器管理平台,为企业用户提供在生产环境中落地使用容器所需的一切功能与组件. Rancher2.0基于Kuberne ...

随机推荐

  1. 关于全栈项目【臻美Chat】https访问 遇到的问题【技术栈:Nodejs】

    首先我上线时可以http访问也可以https访问,那么配置如下:nginx.conf user root;worker_processes auto;error_log /var/log/nginx/ ...

  2. vue.js中英文api

    全局配置 Vue.config is an object containing Vue's global configurations. You can modify its properties l ...

  3. 谷歌浏览器控制台 f12怎么设置成中文/英文 切换方法,一定要看到最后!!!

    1.打开谷歌浏览器 2.右键选择检查或 f12 打开控制台 3.点击控制台右边的设置 4.中切英 选择偏好设置->语言=>English 5.英切中 6.选择中文 7.重启 8.切换中文成 ...

  4. 【RocketMQ】消息的存储

    Broker对消息的处理 BrokerController初始化的过程中,调用registerProcessor方法注册了处理器,在注册处理器的代码中可以看到创建了处理消息发送的处理器对象SendMe ...

  5. MC34063降压电路

    MC34063芯片由温度自动补偿功能的基准电压发生器.比较器.占空比可控振荡器. 触发器和大电流输出开关电路等组成,具有功能齐全.价格低廉.体积小.效率高.仅需少量外部元器件等优点,其主要特性如表所示 ...

  6. java--方法/debug

    一.方法的定义 1.什么是方法 方法是将具体独立功能的代码块组织称为一个整体,使其具有特殊功能的代码集 注意: 方法必须先创建后使用,该过程为方法定义: 方法创建后并不是直接运行的,需要手动十一后执行 ...

  7. C++20 以 Bazel & Clang 开始

    C++20 如何以 Bazel & Clang 进行构建呢? 本文将介绍: Bazel 构建系统的安装 LLVM 编译系统的安装 Clang is an "LLVM native&q ...

  8. 密码学系列之:使用openssl检测网站是否支持ocsp

    目录 简介 支持OCSP stapling的网站 获取服务器的证书 获取OCSP responder地址 发送OCSP请求 一个更加简单的方法 总结 简介 OCSP在线证书状态协议是为了替换CRL而提 ...

  9. 记录一下第一次在CodeForces供题的事(未完待续)

    3月11日 因为想出题而开始打比赛上分 (Rating 1727) (期间最低掉到 1669) 6月4日凌晨 上分,有了权限 (Rating 2141) 6月4-6日 出了七道题 6月8-12日 又出 ...

  10. Idea 编译jsp生成的class文件路径

    找到work\Catalina\localhost\ 然后访问响应的JSP地址才会动态生成到这个路径下面,不访问不会生成,在org\apache\jsp 下面