在实际生产环境中,部署好的集群稳定就行了,但是,如果需要使用到新的功能或当前版本出现了严重的漏洞,都建议做升级,本教程是将node节点从v1.15.10版本平滑升级到v1.15.12版本,如果升级到相对应的版本后,发现不稳定的情况,也可以通过相同的方法进行降级,不管是升级还是降级,都需要一台升级/降级好后再对下一台进行操作,不建议一起进行

1.查看原集群的Node节点的版本号

在master上(mfyxw30.mfyxw.com或mfyxw40.mfyxw.com)任意一台主机执行命令

[root@mfyxw30 ~]# kubectl get nodes

2.将要升级的版本上传到node节点上并解压

在mfyxw30.mfyxw.com主机上执行

rz命令(上传)和sz命令(下载)都需要安装一个lrzsz的rpm包

[root@mfyxw30 ~]# rz -y
[root@mfyxw30 ~]# mkdir -p /opt/v1512
[root@mfyxw30 ~]# tar xf kubernetes-server-linux-amd64-v1.15.12.tar.gz -C /opt/v1512
[root@mfyxw30 ~]# mv /opt/v1512/kubernetes/ /opt/kubernetes-v1.15.12
[root@mfyxw30 ~]# rm -fr /opt/v1512/
[root@mfyxw30 ~]# ls -l /opt/

3.清理kubernetes-v1.15.12目录中的 *.tar 和 *._tag文件

在mfyxw30.mfyxw.com主机上分行

[root@mfyxw30 ~]# cd /opt/kubernetes-v1.15.12/
[root@mfyxw30 kubernetes-v1.15.12]# rm -fr *.tar.gz
[root@mfyxw30 kubernetes-v1.15.12]# cd server/bin/
[root@mfyxw30 bin]# rm -fr *.tar
[root@mfyxw30 bin]# rm -fr *.*_tag

4.在kubernetes-v1.15.12的bin目录下创建conf目录和cert目录

在mfyxw30.mfyxw.com主机执行

[root@mfyxw30 ~]# mkdir -p /opt/kubernetes-v1.15.12/server/bin/{conf,cert}

5.将旧版本的k8s的证书文件,配置文件,sh文件都复制到新版本中

在mfyxw30.mfyxw.com主机上执行

[root@mfyxw30 ~]# cd /opt/kubernetes-v1.15.10/server/bin
[root@mfyxw30 bin]# cp -r conf/* /opt/kubernetes-v1.15.12/server/bin/conf/
[root@mfyxw30 bin]# cp -r cert/* /opt/kubernetes-v1.15.12/server/bin/cert/
[root@mfyxw30 bin]# cp -r /opt/kubernetes-v1.15.10/server/bin/*.sh /opt/kubernetes-v1.15.12/server/bin/
[root@mfyxw30 bin]# cp -r /opt/kubernetes-v1.15.10/server/conf /opt/kubernetes-v1.15.12/server/
[root@mfyxw30 bin]# ls /opt/kubernetes-v1.15.12/server/bin/conf/
[root@mfyxw30 bin]# ls /opt/kubernetes-v1.15.12/server/bin/cert/
[root@mfyxw30 bin]# ls /opt/kubernetes-v1.15.12/server/bin
[root@mfyxw30 bin]# ls /opt/kubernetes-v1.15.12/server/conf/

准备工作已经完成,现在下面就要准备从v1.15.10平滑升级到v1.15.12,前提是要选择流量低的时候进行,每个公司的流量高低都不尽相同,请根据实际情况来决定,在升级/降级的时候,需要发布一则消息出去,告知其它人。

6.查看下pod节点的情况

在mfyxw30.mfyxw.com主机上执行

[root@mfyxw30 ~]# kubectl get pod -n kube-system -o wide

从查询得的pod可以看到,在mfyxw30.mfyxw.com主机上运行的Pod比较少,就先升级/降级此node节点

7.将四层和七层代理进行注释(删除某台node节点就注释某个对应的IP地址)

分别在mfyxw10.mfyxw.com和mfyxw20.mfyxw.com上执行,以mfyxw10主机为例

[root@mfyxw10 ~]# vi /etc/nginx/nginx.conf

[root@mfyxw10 ~]# cat > /etc/nginx/conf.d/od.com.conf << EOF
upstream default_backend_traefik {
#server 192.168.80.30:81 max_fails=3 fail_timeout=10s;
server 192.168.80.40:81 max_fails=3 fail_timeout=10s;
}
server {
server_name *.od.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;
}
}
EOF

重新启动nginx

[root@mfyxw10 ~]# nginx -t
[root@mfyxw10 ~]# nginx -s reload

8.将node节点从集群中删除

在master节点mfyxw40.mfyxw.com主机上执行

[root@mfyxw40 ~]# kubectl get nodes
[root@mfyxw40 ~]# kubectl delete node mfyxw30.mfyxw.com
[root@mfyxw40 ~]# kubectl get nodes

9.将kubernetes链接指向新版本的kubernetes-v1.15.12

在mfyxw30.mfyxw.com主机上执行

[root@mfyxw30 ~]# cd /opt/
[root@mfyxw30 opt]# ll
[root@mfyxw30 opt]# rm -fr kubernetes
[root@mfyxw30 opt]# ln -sv kubernetes-v1.15.12 kubernetes
[root@mfyxw30 opt]# ll

10.将k8s集群重新启动

在mfyxw30.mfyxw.com主机上执行

[root@mfyxw30 ~]# systemctl stop supervisord
[root@mfyxw30 ~]# netstat -tanlp | grep "kube"
[root@mfyxw30 ~]# kill -9 58235 #每台机器查询出来的PID不同,请根据实际情况来
[root@mfyxw30 ~]# kill -9 58236 #每台机器查询出来的PID不同,请根据实际情况来
[root@mfyxw30 ~]# netstat -tanlp | grep "kube"
[root@mfyxw30 ~]# systemctl start supervisord
[root@mfyxw30 ~]# supervisorctl status

11.查询集群的node节点(mfyxw30)是否已经升级到最新版

在mfyxw30.mfyxw.com主机上执行

[root@mfyxw30 ~]# kubectl get nodes

12.对node节点打标签

在mfyxw30.mfyxw.com主机执行

[root@mfyxw30 ~]# kubectl label node mfyxw30.mfyxw.com node-role.kubernetes.io/master=
[root@mfyxw30 ~]# kubectl label node mfyxw30.mfyxw.com node-role.kubernetes.io/node=
[root@mfyxw30 ~]# kubectl get nodes

13.将前面在四层和七层代理注释的内容把注释去掉并重启nginx

在mfyxw10.mfyxw.com和mfyxw20.mfyxw.com主机上分别执行

[root@mfyxw10 ~]# cat > /etc/nginx/conf.d/od.com.conf << EOF
upstream default_backend_traefik {
server 192.168.80.30:81 max_fails=3 fail_timeout=10s;
server 192.168.80.40:81 max_fails=3 fail_timeout=10s;
}
server {
server_name *.od.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;
}
}
EOF

至此,node节点mfyxw30.mfyxw.com已经平滑升级完成,另外的node节点也采用类似的方法来升级/降级

最后来查询一下所有的node节点的版本号是否一致

在master节点上(mfyxw30.mfyxw.com或mfyxw40.mfyxw.com)任意一台执行即可

[root@mfyxw10 ~]# kubectl get nodes

Kubernets二进制安装(19)之集群平滑升级的更多相关文章

  1. K8s之二进制安装高可用集群

    1.环境准备 #二进制部署安装文档# https://github.com/easzlab/kubeasz/blob/master/docs/setup/00-planning_and_overall ...

  2. 基于二进制安装Cloudera Manager集群

    一.环境准备 参考链接:https://www.cnblogs.com/zhangzhide/p/11108472.html 二.安装jdk(三台主机都要做) 下载jdk安装包并解压:tar xvf ...

  3. 二进制安装部署kubernetes集群---超详细教程

    本文收录在容器技术学习系列文章总目录 前言:本篇博客是博主踩过无数坑,反复查阅资料,一步步搭建完成后整理的个人心得,分享给大家~~~ 本文所需的安装包,都上传在我的网盘中,需要的可以打赏博主一杯咖啡钱 ...

  4. kubernetes实战(十六):k8s高可用集群平滑升级 v1.11.x 到v1.12.x

    1.基本概念 升级之后所有的containers会重启,因为hash值会变. 不可跨版本升级. 2.升级Master节点 当前版本 [root@k8s-master01 ~]# kubeadm ver ...

  5. kubernetes系列03—kubeadm安装部署K8S集群

    本文收录在容器技术学习系列文章总目录 1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm ...

  6. kubernetes(K8S)快速安装与配置集群搭建图文教程

    kubernetes(K8S)快速安装与配置集群搭建图文教程 作者: admin 分类: K8S 发布时间: 2018-09-16 12:20 Kubernetes是什么? 首先,它是一个全新的基于容 ...

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

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

  8. 用 edgeadm 一键安装边缘 K8s 集群和原生 K8s 集群

    背景 目前,很多边缘计算容器开源项目在使用上均存在一个默认的前提:用户需要提前准备一个标准的或者特定工具搭建的 Kubernetes 集群,然后再通过特定工具或者其他方式在集群中部署相应组件来体验边缘 ...

  9. 二进制方式搭建Kubernetes集群

    环境准备: 演练暂时用单节点一台master和一台node节点来进行部署搭建(kubernetes 1.19版本) 角色 IP 组件 master 10.129.246.114 kube-apiser ...

随机推荐

  1. SAP client锁定

    今天发现一个函数可以锁定SAP CLIENT . SCCR_LOCK_CLIENT 参数是client号码. 还可以通过事物SU10批量锁定用户登陆client

  2. linux自定义位置安装tomcat8.5

    1 下载tomcat安装文件 下载地址:https://tomcat.apache.org/download-80.cgi  2 解压文件 tar -zxvf apache-tomcat-8.5.56 ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(89)-国际化,本地化,多语言应用

    开篇 早年写过一篇多语言的应用 :   本地化(多语言)   讲述了如何创建多语言的资源文件,并利用资源文件来获得页面和请求的语言属性 本次补充这篇文章,的原因是在实际项目中,有多种需要多语言的情况 ...

  4. 使用Azure Runbook 发送消息到Azure Storage Queue

    客户需要定时发送信息到Azure Storage Queue,所以尝试使用Azure Runbook实现这个需求. 首先新增一个Azure Automation Account的资源. 因为要使用Az ...

  5. 一致性哈希算法C#实现

    一致性hash实现,以下实现没有考虑多线程情况,也就是没有加锁,需要的可以自行加上.因为换行的问题,阅读不太方便,可以拷贝到本地再读. 1 /// <summary> 2 /// 一致性哈 ...

  6. (八)整合 Dubbo框架 ,实现RPC服务远程调用

    整合 Dubbo框架 ,实现RPC服务远程调用 1.Dubbo框架简介 1.1 框架依赖 1.2 核心角色说明 2.SpringBoot整合Dubbo 2.1 核心依赖 2.2 项目结构说明 2.3 ...

  7. Spark Dataset DataFrame空值null,NaN判断和处理

    Spark Dataset DataFrame空值null,NaN判断和处理 import org.apache.spark.sql.SparkSession import org.apache.sp ...

  8. EIGRP和OSPF__邻居发现

    散知识点 1.当配置通配符时,它们的取值总是块尺寸减去1:/28的块尺寸为16,因此当我们添加网络声明时,使用了此子网号和一个在需配置的八位位组中添加值为15的通配符. 邻居发现 1.在EIGRP路由 ...

  9. 安装kettle

    保证安装了jdk 在window 下载解压 解压到任意目录下 运行startZK.bat 在Linux安装 1.将kettle上传到Linux服务器的/opt/server目录下(如果该目录不存在则创 ...

  10. Flink-v1.12官方网站翻译-P018-Event Time

    事件时间 在本节中,您将学习如何编写时间感知的Flink程序.请看一下及时流处理,了解及时流处理背后的概念. 关于如何在Flink程序中使用时间的信息请参考windowing和ProcessFunct ...