本页将展示如何进行 Kubernetes 集群升级。
本页假定你有一个 juju 部署的集群。
Warning:在进行升级之前,你应当备份所有的数据。 不要忘记对集群内的工作负载进行数据备份! 参见备份文档。
集群透明地升级到最新的 Kubernetes 补丁版本。 需要澄清的是,用 1.9/stable 通道部署的集群将会透明地、自动更新到 Kubernetes 1.9.X 最新版。 升级的过程对集群的运行没有影响,也不需要集群维护人员的干预。 每一个补丁版本都由 Canonical Kubernetes 发布小组审核评估。 一旦补丁版本通过了内部测试,认为可以安全用于集群升级, 将会被打包成 snap 格式,发布到稳定版通道上。
Kubernetes charms 遵循的是 Kubernetes 发行版本。 请咨询了解 support 计划在升级频率方面的相关信息。 重要的运维考虑以及行为上的改变都会记录在发布通知里。
备份 etcd 需要导出和快照操作,参见备份文档了解如何创建快照。 在做完快照后,用下面的命令升级 etcd 服务:
juju upgrade-charm etcd
命令将会负责 etcd 的次版本升级。 在 juju 解决方案的 wiki 里 可以了解如何将 etcd 从 2.x 升级到 3.x。
Kubernetes Charms 通常是同时更新、发布。 Ubuntu 集群的核心部分是 kubeapi-load-balancer 组件。 错误或遗失修改可能会导致 API 可用性和访问控制方面的问题。 为了保证 API 服务在集群升级期间还能为主节点和工作节点服务,也需要对它们进行升级。
升级命令:
juju upgrade-charm kubeapi-load-balancer
Kubernetes Charms 使用 snap 通道来驱动负荷。
这些通道定义的格式为 X.Y/channel
,其中,X.Y
是 Kubernetes 主.次
发行版(例如,1.9)
而 channel
的取值范围如下:
通道名 | 描述 |
---|---|
stable | Kubernetes 的最新稳定发行版 |
candidate | Kubernetes 的发行候选版 |
beta | Kubernetes 次发行版的最新 alpha 或 beta 版 |
edge | Kubernetes 次发行版的每日构建版 |
如果发行版还不可用,就会使用下一个最高通道的版本。
例如,1.9/beta 会根据发行版的可用性加载 /candidate
或 /stable
版本。
Kubernetes 的开发版本会根据每个次版本,发布到 edge 通道上。
但不会保证 edge snap 能够和当前的 charms 一起工作。
首先需要对主节点进行升级:
juju upgrade-charm kubernetes-master
Note:永远在工作节点升级之前,升级主节点。
在部署完最新的 charm 之后,可以通过下面的命令行来选择通道:
juju config kubernetes-master channel=1.x/stable
其中,x
是 Kubernetes 的次版本号。例如,1.9/stable
。
参阅前面对通道的定义。
将 kubernetes-master 配置到合适的通道上后,
再在每个主节点上运行下面的升级命令:
juju run-action kubernetes-master/0 upgrade
juju run-action kubernetes-master/1 upgrade
...
现有所支持的升级工作节点的方法有两种,蓝/绿部署 和就地升级。提供两种方法可以带来运维上的灵活性,而这两种方法也都被支持和测试。 相比于就地升级,蓝/绿部署需要更多的硬件资源,但也更为安全可靠。
假定一个部署里面所有的工作节点都叫 kubernetes-alpha。
部署新的工作节点:
juju deploy kubernetes-alpha
暂停旧的工作节点,然后迁移工作负载:
juju run-action kubernetes-alpha/# pause
验证所迁移的工作负载:
kubectl get pod -o wide
销毁就有的工作节点:
juju remove-application kubernetes-alpha
juju upgrade-charm kubernetes-worker
juju config kubernetes-worker channel=1.x/stable
其中,x
是 Kubernetes 的次版本号。例如,1.9/stable
。
参阅前面对通道的定义。将 kubernetes-worker 配置到合适的通道上后,
再在每个工作节点上运行下面的升级命令:
juju run-action kubernetes-worker/0 upgrade
juju run-action kubernetes-worker/1 upgrade
...
kubectl version
将会返回新的版本号。
建议重新运行集群验证确认集群升级成功完成。
可以在任何时候升级 flannel,它的升级可以和 Kubernetes 升级分开进行。 需要注意的是,在升级过程中,网络会受到影响。 可以通过下面的命令行发起升级:
juju upgrade-charm flannel
可以在任何时候升级 easyrsa,它的升级可以和 Kubernetes 升级分开进行。 升级 easyrsa 会有停机时间,因为不是运行服务:
juju upgrade-charm easyrsa
此页是否对您有帮助?
Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on Stack Overflow. Open an issue in the GitHub repo if you want to report a problem or suggest an improvement.