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新特性中值得我们关注的地方: