在您开始之前
当前,更新包可能会触发子集或 此框架管理的所有组件的更新,这取决于 这些新的组件或相关组件是否是新版本的一部分。
更新这些组件意味着 Kubernetes 集群可能会经历某些 停机,或者在最坏的情况下,停止正常运行。同时, 尽管我们致力于让用户的体验尽可能稳健和顺畅, 但事实上,并没有什么防故障软件。
在更新包版本之前,请谨慎操作并始终备份您的数据。
未来,我们将整合灾难恢复功能, 这样,您就可以轻松恢复到前一个功能状态。
更新包 vs 更新包选项
当新包可用时,您可以选择更新至 新版本。如果您一段时间内未更新包,可能是 不允许更新到最新的包版本。如果是这种 情况,您将获得如何继续的信息。请注意,DC/OS 开源 版本需要额外的 步骤 来更新包版本。
然而,您可能只需要更新包选项,例如, 为了更改分配给一种 Kubernetes 组件的资源。 请记住,包选项更新也可能意味着 Kubernetes 集群会经历某些停机,或者在最坏的情况下,停止 正常运行。
在更新包选项之前,请谨慎操作并始终备份您的数据。
更新
要更新包,可以使用 dcos kubernetes update
子命令。
$ dcos kubernetes update -h
usage: dcos kubernetes [<flags>] update [<flags>]
Flags:
-h, --help Show context-sensitive help.
-v, --verbose Enable extra logging of requests/responses
--name="kubernetes" Name of the service instance to query
--options=OPTIONS Path to a JSON file containing the target package options
--package-version=PACKAGE-VERSION
The target package version
--yes Do not ask for confirmation before starting the update process
--timeout=1200s Maximum time to wait for the update process to complete
重要信息: 如果您拥有多个 Kubernetes 节点的集群,我们
建议将 --timeout
值调整为更大的值。但是,我们不能
提前计算该值应为多少,因为考虑到涉及的变量,
例如,可用的 DC/OS 集群资源、CPU 和互联网速度
等等
更新包版本
在开始更新进程之前,必须将 CLI 更新到新版本:
$ dcos package install kubernetes --cli --package-version=<NEW_VERSION>
DC/OS 企业版
以下是您开始包版本更新的方式:
$ dcos kubernetes update --package-version=<NEW_VERSION>
About to start an update from version <CURRENT_VERSION> to <NEW_VERSION>
Updating these components means the Kubernetes cluster may experience some
downtime or, in the worst-case scenario, cease to function properly.
Before updating proceed cautiously and always backup your data.
This operation is long-running and has to run to completion.
Are you sure you want to continue? [yes/no] yes
2018/03/01 15:40:14 starting update process...
2018/03/01 15:40:15 waiting for update to finish...
2018/03/01 15:41:56 update complete!
DC/OS 开源版本
与企业版本相比,DC/OS 开源包升级需要一些额外的 步骤,以实现相同的结果。
首先,将当前包配置导入名为 config.json
的 JSON 文件:
$ dcos kubernetes describe > config.json
要以非破坏性方式进行升级,首先删除 DC/OS Kubernetes 调度器,通过运行:
$ dcos marathon app remove /kubernetes
然后安装包的新版本:
$ dcos package install kubernetes --package-version=<NEW_VERSION> --options=config.json
更新包选项
此包揭示了某些选项,高级用户可根据自己的需要
使用这些选项来更新 Kubernetes 集群。例如,您可能想要
增加 kube-apiserver
计数或用于 kube-proxy
的资源。
举个例子,我们将描述如何实现后者。
假设您已使用默认选项安装包,那么 您所要做的只是使用以下内容 创建 JSON 文件:
{
"kube_proxy": {
"cpus": 0.5,
"mem": 1024
}
}
假设文件被保存为 new_options.json
,运行:
$ dcos kubernetes update --options=new_options.json
以下为预期输出。请注意,更改以
文本 (CHANGED)
进行突出显示:
The following differences were detected between service configurations (CHANGED, CURRENT):
== {
== "kube_proxy": {
- "cpus": 0.1,
+ "cpus": 0.5,
- "mem": 512,
+ "mem": 1024,
== }
== }
The components of the cluster will be updated according to the changes in the
options file [new_options.json].
Updating these components means the Kubernetes cluster may experience some
downtime or, in the worst-case scenario, cease to function properly.
Before updating proceed cautiously and always backup your data.
This operation is long-running and has to run to completion.
Are you sure you want to continue? [yes/no] yes
2018/03/01 15:40:14 starting update process...
2018/03/01 15:40:15 waiting for update to finish...
2018/03/01 15:41:56 update complete!
值得注意的包选项
某些包选项有着特殊意义,他们 必须只在 包安装后更新 一次,并且仅朝向特定目标 值。这些包选项是
kubernetes.cloud_provider
:必须只有在 选项的初始值是""
以及目标值为"aws"
时进行更新。kubernetes.high_availability
:必须只有在 选项的初始值是false
以及目标值为true
时进行更新。
此外,一些包选项 不得 在包被第一次安装后有 任何 更改。这些包选项是:
etcd.data_disk
etcd.disk_type
etcd.wal_disk
kubernetes.network_provider
kubernetes.service_cidr
service.name
kubernetes.authorization_mode
请确保您理解并尊重这些规则。否则,您可能会 使您的集群不可用且面临丢失数据的风险。
1.2.0-1.10.5
之前版本中的包选项
更新 如果用户运行 1.2.0-1.10.5
之前的 DC/OS Kubernetes 版本,
则强烈建议更新至此版本。如果无法
或者不希望进行更新,则强烈建议用户在更新其集群选项
(例如,在更新分配给 Kubernetes 节点的 RAM 数量之前)之前,
执行一些手动步骤,以避免可能导致
更新操作期间集群停机的行为。这些手动步骤包括:
重新启动框架调度器,确保其从
重新启动中正常恢复,并检测 deploy
计划已达到 COMPLETE
状态。为此,可遵循以下步骤:
-
强制框架调度器重新启动:
$ dcos marathon app kill /<SERVICE_NAME>
<SERVICE_NAME>
必须替换为服务名称(如kubernetes
). -
确保框架调度器成功恢复,并且
deploy
计划已完成:$ dcos kubernetes --name=<SERVICE_NAME> plan show deploy deploy (serial strategy) (COMPLETE) (...)
<SERVICE_NAME>
必须替换为服务名称(如kubernetes
)。此命令可能需要几分钟才能开始 产生成功结果。