版权声明:本文为博主原创文章,未经博主允许不得转载。博客地址:http://blog.csdn.net/huqigang,内容如有错误,欢迎留言指出,谢谢! https://cloud.tencent.com/developer/article/1436578
由于kubernetes的CVE-2018-1002105重大漏洞,需要对Openshift集群进行版本升级。 当前运行的Openshift集群版本为v3.6,目标为升级到版本v3.11。
这里只记录升级过程中碰到的坑,不记录升级细节。
不能跨版本升级,升级路线为:
代码语言:javascript复制v3.6—>v3.7—>v3.9—>v3.10—>v3.11
由于我是离线环境,所以在升级过程中都需要到对应版本的openshift-ansible/roles/openshift_repos/templates下进行yum换源。
v3.6升级v3.7
ansible版本问题
主要参考下图:
v3.6版本我用的是ansible-2.3.3,这里更新到ansible-2.6.6(之后的升级过程一直用的是这个版本,不推荐>=2.7版本的ansible,可能会导致升级出错)。
设置网络参数
需要和/etc/origin/master/master-config.yaml文件中的相应参数对应。示例如下:
代码语言:javascript复制openshift_portal_net=172.30.0.0/16
osm_cluster_network_cidr=10.128.0.0/14
osm_host_subnet_length=9
v3.7升级v3.9
升级过程顺利,没遇到坑
v3.9集群证书重新生成
之前尝试v3.10升级v3.11,因为最早安装openshift的时候,没对证书到期时间进行设置,导致部分证书即将在一年内到期,集群升级失败,所以在正式升级的时候需要重新生成一下集群证书。
生成证书的过程:
重新生成OKD CA证书—>重新生成ETCD CA证书—>根据已有的CA证书重新生成所有证书
v3.9版本证书重新生成需要在/etc/ansible/hosts文件中指定节点的以下参数
代码语言:javascript复制openshift_hostname
openshift_public_hostname
openshift_ip
openshift_public_ip
openshift_master_cluster_hostname
openshift_master_cluster_public_hostname
同时设置证书的有效时间
代码语言:javascript复制openshift_hosted_registry_cert_expire_days=3650
openshift_ca_cert_expire_days=3650
openshift_node_cert_expire_days=3650
openshift_master_cert_expire_days=3650
etcd_ca_default_days=3650
由于在之前的升级过程中,我配置了
代码语言:javascript复制ansible_service_broker_install=false
template_service_broker_install=false
openshift_enable_service_catalog=false
导致了部分证书生成错误,这里我手动在ansible-playbook脚本中禁用了service_broker相关的证书生成。
碰到了类似于以下内容的错误:
代码语言:javascript复制File "/usr/lib64/python2.7/_strptime.py", line 325, in _strptimern (data_string, format))rn**ValueError: time data 'May 3 14:19:31 2020 GMT' does not match format '%b %d %H:%M:%S %Y %Z'rn", "msg": "MODULE FAILURE"**, "rc": 1}
github issue链接 https://github.com/openshift/openshift-ansible/issues/8267
解决办法链接 https://github.com/openshift/openshift-ansible/commit/0cbb390e010877446ab62bf44be36c44706d3408
证书更新之后可以通过脚本openshift-ansible/playbooks/openshift-checks/certificate_expiry/easy-mode.yaml验证。
v3.9升级v3.10
openshift_hostname参数处理
在OKD版本v3.10中,openshift_hostname参数已被删除。如果之前/etc/ansible/hosts文件中设置过openshift_hostname,需要使用openshift_kubelet_name_override参数替换。
创建默认的Configmaps
openshift_node_labels的值将会被忽略。
nodes下需要为每个节点设置openshift_node_group_name。
需要先运行openshift-ansible/playbooks/openshift-master/openshift_node_group.yml来创建默认的Configmaps
恢复默认的SCC
之前在使用openshift的时候,修改过默认的SCC,这里需要把系统自带的SCC恢复默认设置。
通过oc adm policy --config=/etc/origin/master/admin.kubeconfig reconcile-sccs --additive-only=true
可以查看修改过的地方。
node节点和etcd节点为同一个节点时,该节点默认不升级
从openshift-ansibleplaybookscommonopenshift-clusterupgradesinitialize_nodes_to_upgrade.yml代码中可以看出,假如没有设置openshift_upgrade_nodes_label,etcd所在的节点默认不在升级范围内。
解决办法:注释上图中when: item not in dedicated_etcds
,然后重新运行升级脚本。
v3.10升级v3.11
需要和上文一样,修改openshift-ansibleplaybookscommonopenshift-clusterupgradesinitialize_nodes_to_upgrade.yml文件。
CVE-2018-1002105漏洞修复
验证升级
所有节点信息如下:
所有pod正确运行。
升级成功。