Kubernetes 从1.11到1.12升级记录
2019-01-23
Kubernetes 1.13已经发布。我们线上的版本升级都是按照比官方低一个版本的节奏。 因此可以开始考虑将团队线上环境的Kubernetes集群从1.11升级到1.12了。 本文记录了在测试环境中的演练过程。
1.准备 #
当前Kubernetes 1.12的小版本是1.12.5。 在升级之前一定要多读几遍官方的升级须知Kubernetes 1.12 - Action Required Before Upgrading。
其中针对我们对Kubernetes的使用情况,有几个需要我们注意的地方:
Kubernetes 1.12废弃了对etcd v2版本后端的支持,将会在Kubernetes 1.13移除
Priority admission plugin现在被默认启用,Kubernetes 1.12默认启用的准入插件如下:
NamespaceLifecycle, LimitRanger, ServiceAccount, Priority, DefaultTolerationSeconds, DefaultStorageClass, PersistentVolumeClaimResize, MutatingAdmissionWebhook, ValidatingAdmissionWebhook, ResourceQuota
。 目前我们通过--enable-admission-plugins
只额外指定了NodeRestriction
这一个准入插件kubelet中移除了公开外部可访问的 cAdvisor web UI,kubelet不再支持
--cadvisor-port
参数kube-controller-manager currently needs a writable –cert-dir (default is /var/run/kubernetes) for generating self-signed certificates, when no –tls-cert-file or –tls-private-key-file are provided.
The CoreDNS service can now be monitored by Prometheus
Kubernetes 1.12所需的外部依赖和一些组件的版本:
- etcd 3.2.24
- 以下docker版本在Kubernetes 1.12上进行过验证:1.11.1, 1.12.1, 1.13.1, 17.03, 17.06, 17.09, 18.06.
- CNI 0.6.0和Kubernetes 1.10依赖的版本相同
- CSI 0.3.0和Kubernetes 1.11依赖的版本相同
- dashboard 1.10.1
- coredns 1.2.6
- flannel 0.10.0
- kube-state-metrics 1.5.0
- metrics-server 0.3.1
2.使用ansible升级Kubernetes #
2.1 master节点 #
我们的集群有3个master节点,在使用ansible升级master节点(kube-apiserver
, kube-scheduler
, kube-controller-manager
)时,通过修改ansible role的inventory文件,只先升级第一个master节点,当测试没有问题后再升级剩余两个master节点。master节点的升级十分顺利,对ansible role的修改也不大。
2.2 node节点 #
同样也是先选择一个node节点升级做测试,如果这个节点上有业务Pod正在运行,可以先将这个节点排干(drain),将业务容器转移到其他的node节点上。 测试环境中的升级十分顺利,各个核心组件成功升级到了1.12.5。
3.其他组件 #
- 升级dashboard到1.10.1。这个升级还是有必要的,关于Kubernetes Dashboard漏洞CVE-2018-18264
- 升级helm和tiller到2.12.2
- 升级ingress nginx controller到0.22.0
- 升级kube-state-metrics到1.5.0
- 升级coredns到1.2.6
4.Kubernetes 1.12新特性 #
Kubernetes 1.12新特性中值得我们关注的地方: