陈奇网络工作室

kubernetes集群版本升级攻略

云计算

库伯内特斯版本兼容性

在升级之前你需要了解各版本间的关系:

库伯内特斯版本命名方式表示为XYZ,其中X表示主要版本,Y表示次要版本,Z表示补丁版本。

比如1.16.0

K8s所有组件kube-控制器,kube-调度程序,库伯勒的版本号不得高于kube-apiserver的版本号。

这些组件的版本号可低于kube-apiserver的一个次要版本,比如库贝-阿皮维尔是1.16.0,其它组件的版本可以为1.16.x和1.15.x。

在一个哈集群中,多个kube-apiserver间的版本号最多只能相差一个次版本号,比如1.16和1.15。

最好所有组件与kube-apiserver版本号完全一致。

因此升级库伯内特斯集群时,最先升级的核心组件就是kube-apiserver。

且只能向上升级为一个次要版本。

库贝特尔版本最多只能比kube-apiserver高或低一个次版本号。

宏观升级流程

升级主控制平面节点。

升级其他控制平面节点。

升级结节节点。

微观升级步骤

先升级kubeadm版本

升级第一个主控制平面节点掌握组件。

升级第一个主控制平面节点上的库伯莱及库贝克特尔。

升级其它控制平面节点。

升级结节节点

验证集群。

升级注意事项

确定升级前的的kubeadm集群版本。

kubeadm升级不会影响到工作负载,仅涉及k8s内部的组件,但是备份etcd数据库是最佳实践。

升级后,所有容器都会重启动,因为容器的混杂值已更改。

由于版本的兼容性,只能从一个次要版本升级到另外一个次要版本,不能跳跃升级。

集群控制平面应使用静态豆荚和etcd pod或外部etcd。

kubeadm升级集群升级命令详解

通过查询命令行帮助:

$ kubeadm升级-h

使用此命令将集群平稳地升级到较新的版本。

用法:

kubeadm升级[标志]

kubeadm升级[命令]

`

可用命令:

将库伯内特斯集群升级到指定的版本。

差速器显示了应用于现有静态豆荚清单的差异。另请参阅:kubeadm升级应用-模拟运行

群集中某个节点的节点升级命令。目前只支持升级配置,不支持库伯莱本身。

计划检查可升级到哪些版本,并验证您当前的群集是否可升级。要跳过因特网检查,请传入可选的[版本]参数。

命令解析:

应用:升级库伯内特斯集群到指定版本。

差异:即将运行的静态豆荚文件清单与当前正运行的静态豆荚清单文件的差异。

节点:升级集群中的节点,当前(1.16版)仅支持升级库伯莱的配置文件(/var/lib/kubelet/config.yaml),而非库伯莱本身。

计划:检测当前集群是否可升级,并支持升级到哪些版本。

其中结节子命令又支持如下子命令和选项:

$ kubeadm升级节点-h

群集中某个节点的升级命令。目前只支持升级配置,不支持库伯莱本身。

用法:

kubeadm升级节点[标志]

kubeadm升级节点[命令]

可用命令:

配置从集群配置图库伯莱配置1下载库伯莱配置. X,其中X是库伯莱的次要版本。

实验控制平面升级部署在此节点上的控制平面实例。重要。在另一个控制平面实例上执行“kubeadm升级应用"后,应执行此命令

标志:

救命啊节点的帮助

全局标志:

-日志文件字符串如果非空,则使用此日志文件

- rootfs字符串[实验性]到\\\ '真实\\\ '主机根文件系统的路径。

-跳过标题如果为没错,则避免在日志消息中使用标头前缀

-伏-伏日志级别详细程度的级别号

命令解析:

配置:从集群配置图中下载库伯莱的配置文件kubelet-config-1.x,其中x是库伯莱的次要版本。

实验控制平面;升级部署在此节点的控制平面各组件,通常在第一个控制平面实例上执行kubeadm升级应用'后,应执行此命令。

操作环境说明:

操作系统:Ubuntu16.04

k8s:一个主人,一个结节

库伯内特斯之从1.13.x升级到1.14.x

由于当前环境中的集群是由kubeadm创建的,其版本为1.13.1,所以本次实验将其升级至1.14.0。

执行升级流程

升级第一个控制平面节点

首先,在第一个控制平面节点也就是主控制平面上操作:

1.确定升级前集群版本:

root@k8s-master:~# kubectl版本

客户端版本:版本Info{Major:1,Minor:13,GitVersion:v1.13.1,git commit:EEC 55 b 9 ba 98609 a 46 fee 712359 c 7 b 5b 365 BDD 920,GitTreeState:clean,BuildDate:2018-12-13T10:39:04Z,GoVersion:go1.11.2,编译器:gc,平台:linux/amd64}

服务器版本:版本Info{Major:1,Minor:13,GitVersion:v1.13.1,git commit:EEC 55 b 9 ba 98609 a 46 fee 712359 c 7 b 5b 365 BDD 920,GitTreeState:clean,BuildDate:2018-12-13T10:31:33Z,GoVersion:go1.11.2,编译器:gc,平台:linux/amd64}

2.查找可升级的版本:

恰当的更新

apt-缓存策略kubeadm

#在列表中查找最新的1.14版本

#它应该类似于1.14.x-00,其中x是最新的补丁

1.14.0-00 500

500 http://公寓。库伯内特。io kubernetes-xenial/主amd64套件

3.先升级kubeadm到1.14.0

#用最新的修补程序版本替换1.14.x-00中的x

apt-mark un hold kube ADM kube let \ \ \ \

容易得到更新apt-get install-y kube ADM=1。14 .0-00 \ \ \

apt-标记保持kubeadm

如上升级kubeadm到1.14版本,Ubuntu系统有可能会自动升级库伯莱到当前最新版本的1.16.0,所以此时就把库伯莱也升级下:

apt-get install-y kube ADM=1。14 .0-00 kube let=1。14 .0-00

如果确实发生这种情况,导致了kubeadm和库伯莱版本不一致,最终致使后面的升级集群操作失败,此时可以删除kubeadm、kubelet

删除:

容易得到删除kubelet kubeadm

再次安装预期版本:

apt-get install-y kube ADM=1。14 .0-00 kube let=1。14 .0-00

确定kubeadm已升级到预期版本:

root@k8s-master:~# kubeadm版本

kubeadm版本:版本Info{Major:1,Minor:14,GitVersion:v1.14.0,git commit:641856 db 18352033 a 0d 96 DBC 99153 fa 3b 27298 e 5,GitTreeState:clean,BuildDate:2019-03-25T15:51:21Z,GoVersion:go1.12.1编译器:gc,平台:linux/amd64}

root@k8s-master:~#

4.运行升级计划命令:检测集群是否可以升级,及获取到的升级的版本。

kubeadm升级计划

输出如下:

root@k8s-master:~# kubeadm升级计划

[飞行前]运行飞行前检查。

[升级]确保集群正常运行:

[升级/配置]确保配置正确:

[升级/配置]从集群读取配置.

[升级/配置]仅供参考:您可以使用\ \ \ ' ku bectl-n kube-system get cm kube ADM-config-oy AML \ \ \ '查看此配置文件

[升级]获取要升级到的可用版本

[升级/版本]集群版本:v1.13.1

[升级/版本] kubeadm版本:v1.14.0

太棒了,你是最新的!尽情享受吧!

告诉你集群可以升级。

5.升级控制平面各组件,包含etcd。

root@k8s-master:~# kubeadm升级应用v1.14.0

[飞行前]运行飞行前检查。

[升级]确保集群正常运行:

[升级/配置]确保配置正确:

[升级/配置]从集群读取配置.

[升级/配置]仅供参考:您可以使用\ \ \ ' ku bectl-n kube-system get cm kube ADM-config-oy AML \ \ \ '查看此配置文件

[升级/版本]您已选择将集群版本更改为1.14.0版

[升级/版本]集群版本:v1.13.1

[升级/版本] kubeadm版本:v1.14.0

//输出y确认之后,开始进行升级。

[升级/确认]您确定要继续升级吗?[是/否]:是

[升级/预提取]将预提取组件的映像[kube-API服务器kube-控制器-管理器kube-调度器etcd]

[升级/预提取]预提取组件etcd的映像。

[升级/预提取]预提取组件kube-apiserver的映像。

[升级/预提取]预提取组件kube-控制器-管理器的映像。

[升级/预提取]预提取组件kube-调度程序的映像。

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-调度程序的0个窗格

[apiclient]找到标签选择器k8s-app=upgrade-prepull-etcd的0个窗格

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-控制器-管理器的一个窗格

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-API服务器的一个窗格

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-调度程序的一个窗格

[apiclient]为标签选择器k8s-app=upgrade-prepull-etcd找到一个豆荚

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-API服务器的0个窗格

[apiclient]找到标签选择器k8s-app=upgrade-prepull-etcd的0个窗格

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-控制器-管理器的0个窗格

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-调度程序的0个窗格

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-调度程序的一个窗格

[apiclient]为标签选择器k8s-app=upgrade-prepull-etcd找到一个豆荚

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-控制器-管理器的一个窗格

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-API服务器的一个窗格

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-控制器-管理器的0个窗格

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-API服务器的0个窗格

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-API服务器的一个窗格

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-控制器-管理器的一个窗格

[apiclient]找到标签选择器k8s-app=upgrade-prepull-etcd的0个窗格

[apiclient]为标签选择器k8s-app=upgrade-prepull-etcd找到一个豆荚

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-调度程序的0个窗格

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-API服务器的0个窗格

[apiclient]找到标签选择器k8s-app=upgrade-prepull-etcd的0个窗格

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-控制器-管理器的0个窗格

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-API服务器的一个窗格

[apiclient]为标签选择器k8s-app=upgrade-prepull-etcd找到一个豆荚

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-调度程序的一个窗格

[apiclient]找到标签选择器k8s-app=升级-预拉-kube-控制器-管理器的一个窗格

[升级/预提取etcd组件的预提取映像。

[升级/预提取]组件kube-调度程序的预提取映像。

[升级/预提取]组件kube-apiserver的预提取映像。

[升级/预提取]组件kube-控制器-管理器的预提取映像。

[升级/预拉入]已成功预拉入所有控制面板组件的映像

[升级/应用]将您的静态豆荚托管控制面板升级到版本1.14.0.

静态pod:kube-API server-k8s-master hash:b 5 fdfbe 9 ab 5d 3c 91000d 2734 DD 669 ca

静态pod:kube-controller-manager-k8s-master hash:31 a4 d 945 c 251 e 62 AC 94 e 215494184514

静态pod:kube-scheduler-k8s-master hash:Fe fab 66 BC 5a 8a 35 B1 f 328 ff 4 f 74 a 8477

[升级/etcd]升级到etcd的坦克激光瞄准镜(Tank Laser-Sight的缩写)

[升级/staticpods]将新的静态豆荚清单写入/etc/kubernetes/tmp/kube ADM-已升级-清单696355120

[升级/staticpods]将新清单移动到/etc/kubernetes/manifest/kube-API服务器。YAML,并将旧清单备份到/etc/kubernetes/tmp/kube ADM-backup-manifests-2019-10-03-20-30-46/kube-API服务器。YAML

[升级/staticpods]等待库伯莱重新启动组件

[升级/staticpods]这可能需要一分钟或更长时间,具体取决于组件/版本差异(超时5分钟)

静态pod:kube-API server-k8s-master hash:b 5 fdfbe 9 ab 5d 3c 91000d 2734 DD 669 ca

静态pod:kube-API server-k8s-master hash:b 5 fdfbe 9 ab 5d 3c 91000d 2734 DD 669 ca

静态pod:kube-API server-k8s-master hash:b 5 fdfbe 9 ab 5d 3c 91000d 2734 DD 669 ca

静态pod:kube-API server-k8s-master hash:b 5 fdfbe 9 ab 5d 3c 91000d 2734 DD 669 ca

静态pod:kube-API server-k8s-master hash:b 5 fdfbe 9 ab 5d 3c 91000d 2734 DD 669 ca

静态pod:kube-API server-k8s-master hash:b 5 fdfbe 9 ab 5d 3c 91000d 2734 DD 669 ca

静态pod:kube-API server-k8s-master hash:b 5 fdfbe 9 ab 5d 3c 91000d 2734 DD 669 ca

静态pod:kube-API server-k8s-master hash:b 5 fdfbe 9 ab 5d 3c 91000d 2734 DD 669 ca

静态pod:kube-API server-k8s-master hash:b 5 fdfbe 9 ab 5d 3c 91000d 2734 DD 669 ca

静态pod:kube-API server-k8s-master hash:b 5 fdfbe 9 ab 5d 3c 91000d 2734 DD 669 ca

静态pod:kube-API server-k8s-master hash:b 5 fdfbe 9 ab 5d 3c 91000d 2734 DD 669 ca

静态pod:kube-API server-k8s-master hash:bb 799 A8 d 323 c 1577 BF 9 e 10 ede 7914 b 30

[apiclient]找到标签选择器组件=kube-apiserver的一个窗格

[apiclient]找到标签选择器组件=kube-apiserver的0个窗格

[apiclient]找到标签选择器组件=kube-apiserver的一个窗格

[升级/staticpods]组件kube-apiserver升级成功!

[升级/staticpods]将新清单移动到/etc/kubernetes/manifest/kube-controller-manager。YAML,并将旧清单备份到/etc/kubernetes/tmp/kube ADM-backup-manifest-2019-10-03-20-30-46/kube-controller-manager。YAML

[升级/staticpods]等待库伯莱重新启动组件

[升级/staticpods]这可能需要一分钟或更长时间,具体取决于组件/版本差异(超时5分钟)

静态pod:kube-controller-manager-k8s-master hash:31 a4 d 945 c 251 e 62 AC 94 e 215494184514

静态pod:kube-controller-manager-k8s-master hash:54146492 ed 90 BFA 147 f 56609 eee 8005 a

[apiclient]找到标签选择器组件=kube-控制者-管理者的一个窗格

[升级/staticpods]组件kube-控制器-管理器升级成功!

[升级/staticpods]将新清单移动到/etc/kubernetes/manifest/kube-scheduler。YAML,并将旧清单备份到/etc/kubernetes/tmp/kube ADM-backup-manifests-2019-10-03-20-30-46/kube-scheduler。YAML

[升级/staticpods]等待库伯莱重新启动组件

[升级/staticpods]这可能需要一分钟或更长时间,具体取决于组件/版本差异(超时5分钟)

静态pod:kube-scheduler-k8s-master hash:Fe fab 66 BC 5a 8a 35 B1 f 328 ff 4 f 74 a 8477

静态pod:kube-scheduler-k8s-master hash:58272442 e 226 c 838 b 193 bbba 4c 44091 e

[apiclient]找到标签选择器组件=kube-调度程序的一个窗格

[升级/staticpods]组件kube-调度程序升级成功!

[上传-配置]将配置映射kubeadm-config中使用的配置存储在kube系统名称空间中

[库伯莱]使用集群中库伯莱的配置在名称空间kube系统中创建配置映射库伯莱配置1.14

[库伯莱-开始]从kube系统名称空间中的kubelet-config-1.14配置图下载库伯莱的配置

[库伯莱-开始]将库伯莱配置写入文件/var/lib/kubelet/config.yaml

[引导令牌]已配置RBAC规则,允许节点引导令牌发布CSR,以便节点获得长期证书凭据

[引导令牌]配置的RBAC规则允许csrapprover控制器自动批准来自节点引导令牌的企业社会责任

[引导令牌]已配置RBAC规则,以允许群集中所有节点客户端证书的证书轮换

[证书]正在生成apiserver证书和密钥

apiserver服务证书是为十进位计数制名称【k8s-大师kubernetes kubernetes。默认kubernetes。默认。SVC kubernetes。默认。SVC。集群。本地]和IPs签名的

[插件]应用基本插件:CoreDNS

[插件]应用基本插件:kube-proxy

【升级/成功】成功!您的集群已升级到1.14.0版。请尽情享受!

[升级/kubelet]现在您的控制面板已经升级,如果您还没有升级库伯莱,请继续升级。

root@k8s-master:~#

在最后两行中,可以看到,集群升级成功。

kubeadm升级应用执行了如下操作:

检测集群是否可以升级:

应用程序接口服务是否可用、

所有的结节节点是不是处于准备好了,

控制平面是否健康。

强制实施版本的歪曲政策。

确保控制平面镜像可用且拉取到机器上。

通过更新/etc/kubernetes/manifest下清单文件来升级控制平面组件,如果升级失败,则将清单文件还原。

应用新的kube-dns和库贝代理配置清单文件,及创建相关的RBAC规则。

为应用程序接口服务器创建新的证书和钥匙,并把旧的备份一份(如果它们将在180天后过期)。

到v1.16版本为止,kubeadm升级应用必须在主控制平面节点上执行。

6.运行完之后,验证集群版本:

root@k8s-master:~# kubectl版本

客户端版本:版本Info{Major:1,Minor:13,GitVersion:v1.13.1,git commit:EEC 55 b 9 ba 98609 a 46 fee 712359 c 7 b 5b 365 BDD 920,GitTreeState:clean,BuildDate:2018-12-13T10:39:04Z,GoVersion:go1.11.2,编译器:gc,平台:linux/amd64}

服务器版本:版本Info{Major:1,Minor:14,GitVersion:v1.14.0,git commit:641856 db 18352033 a 0d 96 DBC 99153 fa 3b 27298 e 5,GitTreeState:clean,BuildDate:2019-03-25T15:45:25Z,GoVersion:go1.12.1编译器:gc,平台:linux/amd64}

可以看到,虽然库贝特尔版本是在1.13.1,而服务端的控制平面已经升级到了1.14.0

掌握组件已正常运行:

root@k8s-master:~# kubectl获取组件状态

名称状态消息错误

控制器-管理器运行状况良好

调度程序运行正常

etcd-0健康{健康:真}

到这里,第一台控制平面的掌握组件已升级完成,控制平面节点上通常还有库伯莱和库贝克特尔,所以这两个也要做升级。

7.升级长春新产业光电技术有限公司(长春新产业)插件。

这一步是可选的,查询长春新产业光电技术有限公司(长春新产业)插件是否可以升级。

8.升级该控制平面上的库伯莱和库贝特尔

现在可以升级库伯莱了,在升级过程中,不影响业务豆荚的运行。

8.1.升级库伯莱、库伯特尔

#用最新的修补程序版本替换1.14.x-00中的x

apt-mark unhold kube let ku bectl \ \ \ \

容易得到更新apt-get install-y kube let=1。14 .0-00 ku bectl=1。14 .0-00 \ \ \ \

apt-mark hold kubelet kubectl

8.2.重启库伯莱:

sudo系统公司重新启动库伯莱

9.查看库贝特尔版本,与预期一致。

root@k8s-master:~# kubectl版本

客户端版本:版本Info{Major:1,Minor:14,GitVersion:v1.14.0,git commit:641856 db 18352033 a 0d 96 DBC 99153 fa 3b 27298 e 5,GitTreeState:clean,BuildDate:2019-03-25T15:53:57Z,GoVersion:go1.12.1编译器:gc,平台:linux/amd64}

服务器版本:版本Info{Major:1,Minor:14,GitVersion:v1.14.0,git commit:641856 db 18352033 a 0d 96 DBC 99153 fa 3b 27298 e 5,GitTreeState:clean,BuildDate:2019-03-25T15:45:25Z,GoVersion:go1.12.1编译器:gc,平台:linux/amd64}

root@k8s-master:~#

第一台控制平面节点已完成升级。

升级其它控制平面节点

10.升级其它控制平面节点。

在其它控制平面上执行,与第一个控制平面节点相同,但使用:

sudo kubeadm升级节点实验控制台

代替:

sudo kubeadm升级应用

而sudo kubeadm升级计划没有必要再执行了。

kubeadm升级节点实验控制台执行如下操作:

从集群中获取kubeadm的群集配置。

备份kube-apiserver证书(可选)。

升级控制平面上的三个核心组件的静态豆荚清单文件。

升级结节

现在开始升级结节上的各组件:kubeadm,kubelet,kube-proxy。

在不影响集群访问的情况下,一个节点一个节点的执行。

1.将结节标记为维护状态。

现在结节还原来的1.13:

root @ k8s-master:~ # ku bectl获取节点

名称状态角色年龄版本

k8s-主机就绪主机292d v1.14.0

k8s-节点01就绪节点292d v1.13.1

升级结节之前先将结节标记为不可用,并逐出所有Pod:

kubectl drain $ NODE-ignore-daemonsets

2.升级kubeadm和库伯莱

现在在各结节上同样的安装库伯丹,库伯莱特,因为使用kubeadm升级库伯莱。

#用最新的修补程序版本替换1.14.x-00中的x

apt-mark un hold kube ADM kube let \ \ \ \

容易得到更新apt-get install-y kube ADM=1。14 .0-00 kube let=1。14 .0-00 \ \ \

apt-mark hold kubeadm kubelet

3.升级库伯莱的配置文件

$ kubeadm升级节点配置-库贝让.版本1.14.0

[库伯莱-开始]从kube系统名称空间中的kubelet-config-1.14配置图下载库伯莱的配置

[库伯莱-开始]将库伯莱配置写入文件/var/lib/kubelet/config.yaml

[升级]此节点的配置已成功更新!

[升级]现在您应该继续使用您的软件包管理器升级库伯莱软件包。

root@k8s-master:~#

4.重新启动库伯莱

$ sudo系统控制重新启动库伯莱

5.最后将节点标记为可调度来使其重新加入集群

kubectl uncordon $NODE

至此,该结节升级完毕,可以查看kube代理的版本已变为预期版本v1.14.0

验证集群版本

root @ k8s-master:~ # ku bectl获取节点

名称状态角色年龄版本

k8s-主机就绪主机292d v1.14.0

k8s-节点01就绪节点292d v1.14.0

该状态列应所有节点显示准备好了,并且版本号已更新。

到这里,所有升级流程已完美攻克。

从故障状态中恢复

如果kubeadm升级失败并且无法回滚(例如由于执行期间意外关闭),则可以再次运行kubeadm升级。此命令是幂等的,并确保实际状态最终是您声明的状态。

要从不良状态中恢复,您可以在不更改集群运行版本的情况下运行:

kubeadm升级-武力。

更多升级信息查看官方升级文档

库伯内特斯之从1.14.x升级到1.15.x

从1.14.0升级到1.15.0的升级流程也大致相同,只是升级命令稍有区别。

升级主控制平面节点

升级流程与从1.13升级至1.14.0 相同。

1.查询可升级版本,安装kubeadm到预期版本v1.15.0

apt-缓存策略kubeadm

apt-mark unhold kubeadm kubelet

apt-get install-y kube ADM=1。15 .0-00

kubeadm已达预期版本:

root@k8s-master:~# kubeadm版本

kubeadm版本:版本Info{Major:1,Minor:15,GitVersion:v1.15.0,git commit:e 8462 b5 b5 DC 2584 fdcd 18 e 6 bcfe 9 Fe 1 e 4d 970 a 529,GitTreeState:clean,BuildDate:2019-06-19T16:37:41Z,GoVersion:go1.12.5,编译器:gc,平台:linux/amd64}

2.执行升级计划

由于v1.15版本中,证书到期会自动续费,kubeadm在控制平面升级期间更新所有证书,即v1.15发布的kubeadm升级,会自动续订它在该节点上管理的证书。如果不想自动更新证书,可以加上参数:证书续订=假。

升级计划:

kubeadm升级计划

可以看到如下输出:

root@k8s-master:~# kubeadm升级计划

[升级/配置]确保配置正确:

[升级/配置]从集群读取配置.

[升级/配置]仅供参考:您可以使用\ \ \ ' ku bectl-n kube-system get cm kube ADM-config-oy AML \ \ \ '查看此配置文件

[飞行前]飞行前运行

checks. [upgrade] Making sure the cluster is healthy: [upgrade] Fetching available versions to upgrade to [upgrade/versions] Cluster version: v1.14.0 [upgrade/versions] kubeadm version: v1.15.0 I1005 20:45:04.474363 38108 version.go:248] remote version is much newer: v1.16.1; falling back to: stable-1.15 [upgrade/versions] Latest stable version: v1.15.4 [upgrade/versions] Latest version in the v1.14 series: v1.14.7 Components that must be upgraded manually after you have upgraded the control plane with \\\'kubeadm upgrade apply\\\': COMPONENT CURRENT AVAILABLE Kubelet 1 x v1.14.0 v1.14.7 1 x v1.15.0 v1.14.7 Upgrade to the latest version in the v1.14 series: COMPONENT CURRENT AVAILABLE API Server v1.14.0 v1.14.7 Controller Manager v1.14.0 v1.14.7 Scheduler v1.14.0 v1.14.7 Kube Proxy v1.14.0 v1.14.7 CoreDNS 1.3.1 1.3.1 Etcd 3.3.10 3.3.10 You can now apply the upgrade by executing the following command: kubeadm upgrade apply v1.14.7 _____________________________________________________________________ Components that must be upgraded manually after you have upgraded the control plane with \\\'kubeadm upgrade apply\\\': COMPONENT CURRENT AVAILABLE Kubelet 1 x v1.14.0 v1.15.4 1 x v1.15.0 v1.15.4 Upgrade to the latest stable version: COMPONENT CURRENT AVAILABLE API Server v1.14.0 v1.15.4 Controller Manager v1.14.0 v1.15.4 Scheduler v1.14.0 v1.15.4 Kube Proxy v1.14.0 v1.15.4 CoreDNS 1.3.1 1.3.1 Etcd 3.3.10 3.3.10 You can now apply the upgrade by executing the following command: kubeadm upgrade apply v1.15.4 Note: Before you can perform this upgrade, you have to update kubeadm to v1.15.4. _____________________________________________________________________

3. 升级控制平面

根据任务指引,升级控制平面:

kubeadm upgrade apply v1.15.0

由于kubeadm的版本是v1.15.0,所以集群版本也只能为v1.15.0。

输出如下信息:

root@k8s-master:~# kubeadm upgrade apply v1.15.0 [upgrade/config] Making sure the configuration is correct: [upgrade/config] Reading configuration from the cluster... [upgrade/config] FYI: You can look at this config file with \\\'kubectl -n kube-system get cm kubeadm-config -oyaml\\\' [preflight] Running pre-flight checks. [upgrade] Making sure the cluster is healthy: [upgrade/version] You have chosen to change the cluster version to v1.15.0 [upgrade/versions] Cluster version: v1.14.0 [upgrade/versions] kubeadm version: v1.15.0 [upgrade/confirm] Are you sure you want to proceed with the upgrade? [y/N]: y ... ##正在拉取镜像 [upgrade/prepull] Will prepull images for components [kube-apiserver kube-controller-manager kube-scheduler etcd] [upgrade/prepull] Prepulling image for component etcd. [upgrade/prepull] Prepulling image for component kube-controller-manager. [upgrade/prepull] Prepulling image for component kube-apiserver. [upgrade/prepull] Prepulling image for component kube-scheduler. ... ##已经拉取所有组件的镜像 [upgrade/prepull] Prepulled image for component etcd. [upgrade/prepull] Prepulled image for component kube-scheduler. [upgrade/prepull] Prepulled image for component kube-controller-manager. [upgrade/prepull] Prepulled image for component kube-apiserver. [upgrade/prepull] Successfully prepulled the images for all the control plane components ... ... ##如下自动续订了所有证书 [upgrade/etcd] Upgrading to TLS for etcd [upgrade/staticpods] Writing new Static Pod manifests to /etc/kubernetes/tmp/kubeadm-upgraded-manifests353124264 [upgrade/staticpods] Preparing for kube-apiserver upgrade [upgrade/staticpods] Renewing apiserver certificate [upgrade/staticpods] Renewing apiserver-kubelet-client certificate [upgrade/staticpods] Renewing front-proxy-client certificate [upgrade/staticpods] Renewing apiserver-etcd-client certificate ... [bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials [bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token [bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster [addons] Applied essential addon: CoreDNS [addons] Applied essential addon: kube-proxy [upgrade/successful] SUCCESS! Your cluster was upgraded to v1.15.0. Enjoy! [upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven\\\'t already done so.

4. 升级成功,验证。

可以看到,升级成功,此时,再次查询集群核心组件版本:

root@k8s-master:~# kubectl version Client Version: version.Info{Major:1, Minor:14, GitVersion:v1.14.0, GitCommit:641856db18352033a0d96dbc99153fa3b27298e5, GitTreeState:clean, BuildDate:2019-03-25T15:53:57Z, GoVersion:go1.12.1, Compiler:gc, Platform:linux/amd64} Server Version: version.Info{Major:1, Minor:15, GitVersion:v1.15.0, GitCommit:e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529, GitTreeState:clean, BuildDate:2019-06-19T16:32:14Z, GoVersion:go1.12.5, Compiler:gc, Platform:linux/amd64}

查该node版本:

NAME STATUS ROLES AGE VERSION k8s-master Ready master 295d v1.14.0 k8s-node01 Ready node 295d v1.14.0

5. 升级该控制平面上的kubelet和kubectl

控制平面核心组件已升级为v1.15.0,现在升级该节点上的kubelet及kubectl了,在升级过程中,不影响业务Pod的运行。

# replace x in 1.15.x-00 with the latest patch version apt-mark unhold kubelet kubectl && \\\\ apt-get update && apt-get install -y kubelet=1.15.0-00 kubectl=1.15.0-00 && \\\\ apt-mark hold kubelet kubectl

6. 重启kubelet:

sudo systemctl restart kubelet

7. 验证kubelet、kubectl版本,与预期一致。

root@k8s-master:~# kubectl version Client Version: version.Info{Major:1, Minor:15, GitVersion:v1.15.0, GitCommit:e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529, GitTreeState:clean, BuildDate:2019-06-19T16:40:16Z, GoVersion:go1.12.5, Compiler:gc, Platform:linux/amd64} Server Version: version.Info{Major:1, Minor:15, GitVersion:v1.15.0, GitCommit:e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529, GitTreeState:clean, BuildDate:2019-06-19T16:32:14Z, GoVersion:go1.12.5, Compiler:gc, Platform:linux/amd64}

查该node版本:

root@k8s-master:~# kubectl get node NAME STATUS ROLES AGE VERSION k8s-master Ready master 295d v1.15.0 k8s-node01 Ready node 295d v1.14.0

升级其它控制平面

升级其它控制平面上的三个组件的命令有所不同,使用:

1. 升级其它控制平面组件,但是使用如下命令:

$ sudo kubeadm upgrade node

2. 然后,再升级kubelet和kubectl。

# replace x in 1.15.x-00 with the latest patch version apt-mark unhold kubelet kubectl && \\\\ apt-get update && apt-get install -y kubelet=1.15.x-00 kubectl=1.15.x-00 && \\\\ apt-mark hold kubelet kubectl

3. 重启kubelet

$ sudo systemctl restart kubelet

升级Node

升级Node与前面一致,此处简写。

在所有Node上执行。

1. 升级kubeadm:

# replace x in 1.15.x-00 with the latest patch version apt-mark unhold kubeadm && \\\\ apt-get update && apt-get install -y kubeadm=1.15.x-00 && \\\\ apt-mark hold kubeadm

查询kubeadm版本:

root@k8s-node01:~# kubeadm version kubeadm version: &version.Info{Major:1, Minor:15, GitVersion:v1.15.0, GitCommit:e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529, GitTreeState:clean, BuildDate:2019-06-19T16:37:41Z, GoVersion:go1.12.5, Compiler:gc, Platform:linux/amd64}

2. 设置node为维护状态:

kubectl cordon $NODE

3. 更新kubelet配置文件

$ sudo kubeadm upgrade node upgrade] Reading configuration from the cluster... [upgrade] FYI: You can look at this config file with \\\'kubectl -n kube-system get cm kubeadm-config -oyaml\\\' [upgrade] Skipping phase. Not a control plane node[kubelet-start] Downloading configuration for the kubelet from the kubelet-config-1.15 ConfigMap in the kube-system namespace [kubelet-start] Writing kubelet configuration to file /var/lib/kubelet/config.yaml [upgrade] The configuration for this node was successfully updated! [upgrade] Now you should go ahead and upgrade the kubelet package using your package manager.

4. 升级kubelet组件和kubectl。

# replace x in 1.15.x-00 with the latest patch version apt-mark unhold kubelet kubectl && \\\\ apt-get update && apt-get install -y kubelet=1.15.x-00 kubectl=1.15.x-00 && \\\\ apt-mark hold kubelet kubectl

5. 重启kubelet

sudo systemctl restart kubelet

此时kube-proxy也会自动升级并重启。

6. 取消维护状态

kubectl uncordon $NODE

Node升级完成。

验证集群版本

root@k8s-master:~# kubectl get node NAME STATUS ROLES AGE VERSION k8s-master Ready master 295d v1.15.0 k8s-node01 NotReady node 295d v1.15.0

kubeadm upgrade node详解

在这次升级流程中,升级其它控制平面和升级Node 用的都是 kubeadm upgrade node。

kubeadm upgrade node 在其它控制平面节点执行时:

从集群中获取kubeadm的ClusterConfiguration。

备份kube-apiserver证书(可选)。

升级控制平面上的三个核心组件的静态Pod清单文件。

升级该控制平面上的kubelet配置。

kubeadm upgrade node 在Node节点上执行以下操作:

从集群中获取kubeadm的ClusterConfiguration。

升级该Node节点的kubelet配置。

kubernetes之从1.15.x升级到1.16.x

从1.15.x升级到1.16.x 与 前面的 从1.14.x升级到1.15.x,升级命令完全相同,此处就不再重复。

更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码官网:www.chenqinet.cn

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3