OCP4升级方便不?
方便,飞一样的感觉。
会升级失败不。
注意两个点,就不会从天上掉下来。
注意点1:升级OCP之前,需要查看升级路径,比如,想升级到OCP 4.5.3的版本,先查一下升级路径,也就是说,从哪个版本的OCP可以升级到OCP 4.5.3,千万别跳着来。
我们查看OCP 4.5.3的升级路径:
$ ansible localhost -m lineinfile -a 'path=$HOME/.bashrc regexp="^export PRODUCT_REPO" line="export PRODUCT_REPO=openshift-release-dev"'
$ ansible localhost -m lineinfile -a 'path=$HOME/.bashrc regexp="^export $ RELEASE_NAME" line="export RELEASE_NAME=ocp-release"'
$ ansible localhost -m lineinfile -a 'path=$HOME/.bashrc regexp="^export ARCHITECTURE" line="export ARCHITECTURE=x86_64"'
$source $HOME/.bashrc
$ oc adm release info -a ${LOCAL_SECRET_JSON} "quay.io/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE}-${ARCHITECTURE}" | head -n 18
从输出结果我们可以看到,从4.4.10, 4.4.11, 4.4.12, 4.4.13, 4.4.14, 4.4.15, 4.5.1, 4.5.2这几个OCP版本,都能一步升级到4.5.3。
问题来了,如果我现在的版本是4.4.8,不在升级到4.5.3的路径里,怎么改办?
我们查看4.5.3的升级路径中,离4.4.8最近的是4.4.10,我们利用命令行,查看能升级到4.4.10的OCP版本,以此类推,就可以了。
$ansible localhost -m lineinfile -a 'path=$HOME/.bashrc regexp="^export OCP_RELEASE" line="export OCP_RELEASE=4.4.10"'
source $HOME/.bashrc
[@bastion ~]$ oc adm release info -a ${LOCAL_SECRET_JSON} "quay.io/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE}-${ARCHITECTURE}" | head -n 18
我们看到从4.4.8可以直接升级到4.4.10,然后再从4.4.10升级到4.5.3。一共需要升级两次!
升级是否成功的判断标准,不仅仅是是oc get co看co是否都到新版本,oc get clusterversion升级进度是否完成,还需要看mcp的状态是否都升级成功:
如下图所示:UPDATED应为True、UPDATING应为False、DEGRADED应为False
如果升级完,MCP装填不对,那就埋下了一颗雷,需要排雷。
注意点2:
大多数OCP的升级失败,都是因为MCP的状态不对。
MCP为啥状态不对呢?
大多数是和MCO有关:
1.未通过MCO修改RHCOS的配置,造成MCP验证配置时,与RHCOS本地配置比对,一致性校验无法通过。
2.通过MCO下发配置,但没成功。
因此:
一定不要手工修改RHCOS的配置;
MCO配置下发失败,要把问题找出来,还原配置。
配置不能更新会引发mcp degrade。这时候OCP升级是不会成功的。
着急升级怎么办?
我们可以可以强制验MCP证成功。但需要注意的是,强制验证成功只会将问题推迟到下一次升级,因此需要通过更改MC来解决此问题。
具体做法:在降级的MCP对应的具体OCP节点上,执行如下命令:
[root@openshift-worker-2 ~]# touch /run/machine-config-daemon-force
重启节点,让配置更新完成,mcp状态才会变成正常的(如果touch完毕后,重启节点MCP问题未解决,可以需要多来几次)。
MCP变成正常后,可以进行升级,升级完毕后,把文件删除:
[root@openshift-worker-2 ~]# rm -f /run/machine-config-daemon-force
如果想查mcp降级的原因,可以查看mco的日志,通常会提示哪些文件不一致: