OpenShift的EUS区更新(从eus-4.8到eus-4.10)

简要介绍

OpenShift容器平台(OCP)4.8及以上的所有偶数次次要更新(例如:4.8、4.10、4.12)都将成为延长更新支持(EUS)的版本。

在OCP 4.8及之后的版本中,可以在ESU之间进行更新,例如从4.8更新到4.10。但是,确切来说,并非一次更新的处理,主节点会逐个版本升级,如4.8 -> 4.9 -> 4.10,并进行两次重新启动。
另一方面,工作节点只需一次更新,如4.8 -> 4.10,因此重新启动的次数减少,从而缩短了整个更新过程的时间。

尽管如此,实际上,在OCP 4.10 GA之后,好像一段时间内没有OCP的微版本可以通过EUS进行4.8->4.10的更新。
然而,大约在七月中旬左右,终于出现了可以进行EUS更新的路径,所以我将把这次实际进行EUS更新的步骤作为备忘录记录下来。

请提供相关链接。

EUS之间的更新

    • 4.9 Docs

OCP 4.9 Docs / クラスターの更新 / 5. EUS から EUS への更新を実行するための準備

4.10 Docs

OCP 4.10 Docs / クラスターの更新 / 4. EUS から EUS への更新を実行するための準備

為了將4.8提升到4.9,需要做準備以應對已刪除的API。

    • 4.9 Docs

OCP 4.9 Docs / クラスターの更新 / 4. OpenShift Container Platform 4.9 への更新の準備
OCP 4.9 Docs / クラスターの更新 / 4. OpenShift Container Platform 4.9 への更新の準備 / 4.2. 削除された API に関するクラスターの評価
KB 6329921 / Preparing to upgrade to OpenShift Container Platform 4.9
KB 6955985 / Navigating Kubernetes API deprecations and removals

Kubernetes Docs

Deprecated API Migration Guide / Removed APIs by release / v1.22

OCP和运营商版本的兼容性

    Red Hat OpenShift Container Platform のライフサイクルポリシー

验证建立

OCP构成: 只需要一个选项

在进行更新之前,OCP集群的配置与通过以下链接安装的OCP 4.8.45的配置相同。

Qiita / OpenShift 4.10 ベアメタルUPI (iPXE) インストール

OCP 4.8.45をベアメタルのUPIでインストールしています。
ベアメタルのUPIの構成ですが、node自体はVMwareの仮想マシンで作成しています。

基础设施节点

以下是创建基础设施节点的步骤。

Qiita / OpenShiftでMachine Config Pool (MCP) を使用してInfra nodeを作成する

モニタリングは、デフォルトのモニタリング(prometheusk8s、alertmanager)のみで、ユーザーワークロードモニタリングはここでは入れていません。
クラスターロギングは、Elasticsearch、Fluentd、Kibanaの構成です。

监控和记录的持久性容量

监视和记录PV按以下步骤创建。

    Qiita / Local Storage Operatorで、ロギング、モニタリングの永続ボリュームを作成する

操作员

为了采用上述结构,追加引入的运算符如下。

OperatorChannel更新承認ストラテジーOpenShift Elasticsearch Operatorstable-5.4手動Red Hat OpenShift Loggingstable-5.4手動Local Storage4.8手動

流程的步驟

将从OCP 4.8.45升级到OCP 4.10.20的EUS Bear Metal UPI的OCP升级流程如下所示。

确认更新路径

    (0)アップデートパスの確認

OCP的核心

    • (1) 4.8 -> 4.9に上げるための準備(削除されたAPI対応)

 

    • (2) EUS間アップデートの準備 (worker(infra)のMCPのPause)

 

    • (3) チャネルをeus-4.10に変更

 

    • (4) バージョンを4.8.45 -> 4.9.40に更新

 

    • (5) バージョンが4.9.40になる (*)masterのアップデートのみ(Masterの再起動1回目)

 

    • (6) バージョンを4.9.40 -> 4.10.20に更新

 

    • (7) バージョンが4.10.20になる (*)masterのアップデートのみ(masterの再起動2回目)

 

    • (8) worker(Infra)のMCPのPauseの解除 (*)worker(infra)のアップデート(Worker(Infra)の再起動1回)

 

    • (9) masterもworkerも4.10.20になる

 

    (10) CLI(oc)のアップデート

操作员

    • (1) 適宜必要なものをアップデート(例 Local Storage Operator (stable-4.8 -> stable-4.10)など)

 

    • (2) alertmanagerのreplicasが3->2になるのでPVC/PVを一つ削除など

 

    • (3) その他個別に導入していたものも対応

 

    ((*) Operatorやその他アプリは、OCPとの互換性によっては、OCPを4.10に上げる前にアップデートしておく必要があるものがある場合もありますので適宜判断ください。)

实际步骤

确认更新路径

确认更新路径

你可以在以下的链接中确认更新路径。

    • Red Hat OpenShift Container Platform Update Graph / Update Graph

 

    • Red Hat OpenShift Container Platform Update Graph / Update Path

 

    KB / OpenShift Container Platform (OCP) 4 upgrade paths
2022-08-04-20-57-09.png

点击此处的“生成”按钮后,您可以看到在eus-4.10通道中,存在按照“4.8.45 -> 4.9.40 -> 4.10.20”的更新路径。

2022-08-04-21-03-01.png

这次我将尝试在这个版本中进行EUS之间的更新。

OCP的基本实体

(1) 为了升级到4.9进行准备(删除了API的支持)

在 OCP 4.8 到 4.9 的升级中,Kubernetes 版本从 1.21 升级到 1.22。因此,v1beta1 API 已被大幅删除,并不推荐使用。
因此,在升级到 OCP 4.9 时,管理员需要评估需要进行API迁移的组件,并将受影响的组件迁移到适当的新API版本。

在完成这些操作后,管理员需要明确地进行确认处理。

    (admin-acksというconfigmapに”ack-4.8-kube-1.22-api-removals-in-4.9″:”true”}というフラグをつける)

如果不完成这个”管理员确认”处理,将无法更新到OCP 4.9。因此,在更新之后,可以减少可能出现的与API版本相关的问题风险。

2022-08-08-19-23-26.png

请提供参考链接

    • 4.8 -> 4.9に上げるための準備(削除されたAPI対応)

4.9 Docs

OCP 4.9 Docs / リリースノート / 1.5.2. 削除された機能 / 1.5. 非推奨および削除された機能 / 1.5.2.2. ベータ版 API が Kubernetes 1.22 から削除
OCP 4.9 Docs / クラスターの更新 / 4. OpenShift Container Platform 4.9 への更新の準備

kB

KB 6329921 / Preparing to upgrade to OpenShift Container Platform 4.9
KB 6955985 / Navigating Kubernetes API deprecations and removals

Kubernetes Docs

Deprecated API Migration Guide / Removed APIs by release / v1.22

我将按照 OCP 4.9 文档中提供的步骤进行操作,并在这里记录相应的笔记。

确认是否使用了即将被删除的API。

以具有cluster-admin角色的用户身份登录到集群中。

使用APIRequestCount来确定是否使用了被删除的API。

执行以下命令可在REMOVEDINRELEASE列中查看当前正在使用的即将被删除的API。

[root@bastion-01 ~]# oc get apirequestcounts
NAME                                                                           REMOVEDINRELEASE   REQUESTSINCURRENTHOUR   REQUESTSINLAST24H
alertmanagerconfigs.v1alpha1.monitoring.coreos.com                                                15                      346
()
ingresses.v1beta1.extensions                                                   1.22               12                      333
installplans.v1alpha1.operators.coreos.com                                                        201                     1522
ippools.v1alpha1.whereabouts.cni.cncf.io                                                          10                      242
jobs.v1.batch                                                                                     122                     2417
()

经过使用-o json过滤器的确认,可以提取并显示仅使用的API。本次确定了使用了ingresses.v1beta1.extensions。

[root@bastion-01 ~]# oc get apirequestcounts -o jsonpath='{range .items[?(@.status.removedInRelease!="")]}{.status.removedInRelease}{"\t"}{.metadata.name}{"\n"}{end}'
1.22	ingresses.v1beta1.extensions
[root@bastion-01 ~]#

确认当前哪个工作负载正在使用将要被删除的API。

使用APIRequestCount资源的-o jsonpath命令,可以提取username和userAgent的值,从而确定哪个工作负载正在使用洗出的ingresses.v1beta1.extensions API。现在执行以下命令来确认:

[root@bastion-01 ~]# oc get apirequestcounts ingresses.v1beta1.extensions -o jsonpath='{range .status.currentHour..byUser[*]}{..byVerb[*].verb}{","}{.username}{","}{.userAgent}{"\n"}{end}' \
>   | sort -k 2 -t, -u | column -t -s, -NVERBS,USERNAME,USERAGENT
VERBS       USERNAME                        USERAGENT
list watch  system:kube-controller-manager  cluster-policy-controller/v0.0.0
list watch  system:kube-controller-manager  kube-controller-manager/v1.21.11+6b3cbdd
[root@bastion-01 ~]#

通过检查上述输出的USERNAME和USERAGENT,根据OCP文档的记载,以下条目可以忽略。因此,我们确认这些条目将被删除的API,特别是不需要进行任何迁移处理。

不需要在意结果中出现的以下条目。

system:serviceaccount:kube-system:generic-garbage-collector用户可能会在结果中显示以查找要删除的资源。

system:kube-controller-manager和system:cluster-policy-controller用户可能会在结果中显示以遍历所有资源并应用不同的策略。

API的转移将被预计删除。

由于我们在本次更新中没有部署任何Operator或应用程序,因此几乎没有使用即将在Kubernetes v1.22中删除的API,我们无需进行任何迁移适配。

然而,如果用户部署了操作员或应用程序,可能需要使用相应的API来进行处理。

    • 対象となるAPI

OCP 4.9 Docs / リリースノート / 1.5.2. 削除された機能 / 1.5. 非推奨および削除された機能 / 1.5.2.2. ベータ版 API が Kubernetes 1.22 から削除
OCP 4.9 Docs / クラスターの更新 / 4. OpenShift Container Platform 4.9 への更新の準備 / 4.1. Kubernetes API の削除
KB 6329921 / Preparing to upgrade to OpenShift Container Platform 4.9

如果在上述的确认步骤中出现需要处理的API,那么需要根据以下的Kubernetes文档进行相应的处理。

    • Kubernetes Docs

Deprecated API Migration Guide / Removed APIs by release / v1.22

确认管理者

当管理员确认所有迁移已完成,并验证是否使用了即将被删除的API时,需要进行明确的确认处理。

我执行了以下命令并完成了评估,确认可以更新到OCP 4.9,我会标记一个标志。

    (admin-acksというconfigmapに”ack-4.8-kube-1.22-api-removals-in-4.9″:”true”}というフラグをつける)
[root@bastion-01 ~]# oc -n openshift-config patch cm admin-acks --patch '{"data":{"ack-4.8-kube-1.22-api-removals-in-4.9":"true"}}' --type=merge
configmap/admin-acks patched
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get cm -n  openshift-config admin-acks -o yaml
apiVersion: v1
data:
  ack-4.8-kube-1.22-api-removals-in-4.9: "true"
kind: ConfigMap
metadata:
  annotations:
    include.release.openshift.io/ibm-cloud-managed: "true"
    include.release.openshift.io/self-managed-high-availability: "true"
    include.release.openshift.io/single-node-developer: "true"
    release.openshift.io/create-only: "true"
  creationTimestamp: "2022-07-12T07:59:54Z"
  name: admin-acks
  namespace: openshift-config
  resourceVersion: "683740"
  uid: e1f88089-0a23-40dc-8daf-36704714ec71
[root@bastion-01 ~]#
2022-08-08-21-05-08.png

(2) 准备EUS区更新(停止工人基础设施MCP)

在ESU升级中,主节点将逐个升级为4.8-> 4.9-> 4.10,并运行两次重新启动。
与此同时,工作节点可以在一次升级中从4.8直接升级到4.10,将重新启动的次数减少到一次。

为了防止在主节点更新期间工作节点也进行更新,需要在工作节点的机器配置池(MCP)中执行更新暂停操作(Pause)。
在这个验证环境中,由于还创建了基础设施节点的MCP,所以不仅需要对工作节点进行更新暂停,还需要对基础设施节点进行更新暂停。

[root@bastion-01 ~]# oc get mcp
NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
infra    rendered-infra-bd24e2400e059460c308e626771bc373    True      False      False      3              3                   3                     0                      18h
master   rendered-master-f192fab4dbcb44579e7df8408dba89a7   True      False      False      3              3                   3                     0                      19h
worker   rendered-worker-bd24e2400e059460c308e626771bc373   True      False      False      2              2                   2                     0                      19h
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc patch mcp/worker --type merge --patch '{"spec":{"paused":true}}'
machineconfigpool.machineconfiguration.openshift.io/worker patched
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc patch mcp/infra --type merge --patch '{"spec":{"paused":true}}'
machineconfigpool.machineconfiguration.openshift.io/infra patched
[root@bastion-01 ~]#

确认工人节点和基础设施节点上的MCP已被暂停处理(Pause)。

[root@bastion-01 ~]# oc get mcp master -o json | jq -r .spec.paused
false
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get mcp worker -o json | jq -r .spec.paused
true
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get mcp infra -o json | jq -r .spec.paused
true
[root@bastion-01 ~]#

(3)将频道更改为eus-4.10。

这一次我们选择了通过OCP的图形用户界面进行更新,而不是使用CLI。

根据刚刚确认的更新路径,我们将在eus-4.10频道上进行以下顺序的更新:从4.8.45版本升级到4.9.40版本,再升级到4.10.20版本。

2022-08-09-11-48-02.png
2022-08-09-11-48-49.png
2022-08-09-11-49-48.png

(4) 将版本更新为4.8.45 -> 4.9.40。

2022-08-09-13-03-05.png

将开始进行4.9.40的更新。

[root@bastion-01 ~]# oc get clusterversion
NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
version   4.8.45    True        True          4m50s   Working towards 4.9.40: 71 of 738 done (9% complete)
[root@bastion-01 ~]#
2022-08-09-13-03-44.png
2022-08-09-13-06-29.png
[root@bastion-01 ~]# oc get clusterversion
NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
version   4.8.45    True        True          70m     Working towards 4.9.40: 619 of 738 done (83% complete), waiting on machine-config
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get mcp
NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
infra    rendered-infra-bd24e2400e059460c308e626771bc373    False     False      False      3              0                   0                     0                      21h
master   rendered-master-f192fab4dbcb44579e7df8408dba89a7   False     True       False      3              1                   1                     0                      22h
worker   rendered-worker-bd24e2400e059460c308e626771bc373   False     False      False      2              0                   0                     0                      22h
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get node
NAME        STATUS                     ROLES    AGE   VERSION
infra-01    Ready                      infra    22h   v1.21.11+6b3cbdd
infra-02    Ready                      infra    22h   v1.21.11+6b3cbdd
infra-03    Ready                      infra    22h   v1.21.11+6b3cbdd
master-01   Ready                      master   22h   v1.22.8+f34b40c
master-02   Ready,SchedulingDisabled   master   22h   v1.21.11+6b3cbdd
master-03   Ready                      master   22h   v1.21.11+6b3cbdd
worker-01   Ready                      worker   22h   v1.21.11+6b3cbdd
worker-02   Ready                      worker   22h   v1.21.11+6b3cbdd
[root@bastion-01 ~]#
2022-08-09-13-07-13.png

(5) 版本升级至4.9.40,仅限于主分支的更新(主分支重新启动1次)。

2022-08-09-13-09-59.png
[root@bastion-01 ~]# oc get clusterversion
NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
version   4.9.40    True        False         59s     Cluster version is 4.9.40
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get mcp
NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
infra    rendered-infra-bd24e2400e059460c308e626771bc373    False     False      False      3              0                   0                     0                      21h
master   rendered-master-22186c18cde8e5fdc8d6dd770b997e24   True      False      False      3              3                   3                     0                      22h
worker   rendered-worker-bd24e2400e059460c308e626771bc373   False     False      False      2              0                   0                     0                      22h
[root@bastion-01 ~]#

主节点的Kubernetes版本已升级至v1.22,但工作节点和基础设施节点的版本仍为v1.21。

[root@bastion-01 ~]# oc get node
NAME        STATUS   ROLES    AGE   VERSION
infra-01    Ready    infra    22h   v1.21.11+6b3cbdd
infra-02    Ready    infra    22h   v1.21.11+6b3cbdd
infra-03    Ready    infra    22h   v1.21.11+6b3cbdd
master-01   Ready    master   22h   v1.22.8+f34b40c
master-02   Ready    master   22h   v1.22.8+f34b40c
master-03   Ready    master   22h   v1.22.8+f34b40c
worker-01   Ready    worker   22h   v1.21.11+6b3cbdd
worker-02   Ready    worker   22h   v1.21.11+6b3cbdd
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get co
NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
authentication                             4.9.40    True        False         False      28m
baremetal                                  4.9.40    True        False         False      22h
cloud-controller-manager                   4.9.40    True        False         False      60m
cloud-credential                           4.9.40    True        False         False      22h
cluster-autoscaler                         4.9.40    True        False         False      22h
config-operator                            4.9.40    True        False         False      22h
console                                    4.9.40    True        False         False      31m
csi-snapshot-controller                    4.9.40    True        False         False      22h
dns                                        4.9.40    True        False         False      22h
etcd                                       4.9.40    True        False         False      22h
image-registry                             4.9.40    True        False         False      22h
ingress                                    4.9.40    True        False         False      3h27m
insights                                   4.9.40    True        False         False      22h
kube-apiserver                             4.9.40    True        False         False      22h
kube-controller-manager                    4.9.40    True        False         False      22h
kube-scheduler                             4.9.40    True        False         False      22h
kube-storage-version-migrator              4.9.40    True        False         False      22h
machine-api                                4.9.40    True        False         False      22h
machine-approver                           4.9.40    True        False         False      22h
machine-config                             4.9.40    True        False         False      78m
marketplace                                4.9.40    True        False         False      22h
monitoring                                 4.9.40    True        False         False      22h
network                                    4.9.40    True        False         False      22h
node-tuning                                4.9.40    True        False         False      49m
openshift-apiserver                        4.9.40    True        False         False      10h
openshift-controller-manager               4.9.40    True        False         False      22h
openshift-samples                          4.9.40    True        False         False      50m
operator-lifecycle-manager                 4.9.40    True        False         False      22h
operator-lifecycle-manager-catalog         4.9.40    True        False         False      22h
operator-lifecycle-manager-packageserver   4.9.40    True        False         False      22h
service-ca                                 4.9.40    True        False         False      22h
storage                                    4.9.40    True        False         False      22h
[root@bastion-01 ~]#

(6) 將版本從4.9.40更新至4.10.20。

根据更新路径的确认,我们确认了顺序为「4.8.45 -> 4.9.40 -> 4.10.20」,所以下一步将更新至4.10.20。

2022-08-09-14-37-48.png

4月10日将开始进行更新。

[root@bastion-01 ~]# oc get clusterversion
NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
version   4.9.40    True        True          66m     Working towards 4.10.20: 234 of 771 done (30% complete)
[root@bastion-01 ~]#
2022-08-09-14-39-09.png
2022-08-09-14-40-35.png
[root@bastion-01 ~]# oc get clusterversion
NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
version   4.9.40    True        True          61m     Working towards 4.10.20: 649 of 771 done (84% complete)
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get mcp
NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
infra    rendered-infra-bd24e2400e059460c308e626771bc373    False     False      False      3              0                   0                     0                      27h
master   rendered-master-22186c18cde8e5fdc8d6dd770b997e24   False     True       False      3              2                   2                     0                      28h
worker   rendered-worker-bd24e2400e059460c308e626771bc373   False     False      False      2              0                   0                     0                      28h
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get node
NAME        STATUS                     ROLES    AGE   VERSION
infra-01    Ready                      infra    28h   v1.21.11+6b3cbdd
infra-02    Ready                      infra    28h   v1.21.11+6b3cbdd
infra-03    Ready                      infra    28h   v1.21.11+6b3cbdd
master-01   Ready                      master   28h   v1.23.5+3afdacb
master-02   Ready                      master   28h   v1.23.5+3afdacb
master-03   Ready,SchedulingDisabled   master   28h   v1.22.8+f34b40c
worker-01   Ready                      worker   28h   v1.21.11+6b3cbdd
worker-02   Ready                      worker   28h   v1.21.11+6b3cbdd
[root@bastion-01 ~]#
2022-08-09-14-42-01.png

(7) 只需更新(*)master版本(第二次master重启),版本号变为4.10.20。

2022-08-09-14-43-28.png

这是通过命令行界面进行确认。

[root@bastion-01 ~]# oc get clusterversion
NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
version   4.10.20   True        False         33s     Cluster version is 4.10.20
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get mcp
NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
infra    rendered-infra-bd24e2400e059460c308e626771bc373    False     False      False      3              0                   0                     0                      27h
master   rendered-master-e5b532b6e0c8576f3ce2b2c986e299f7   True      False      False      3              3                   3                     0                      28h
worker   rendered-worker-bd24e2400e059460c308e626771bc373   False     False      False      2              0                   0                     0                      28h
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get co
NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
authentication                             4.10.20   True        False         False      3m31s
baremetal                                  4.10.20   True        False         False      28h
cloud-controller-manager                   4.10.20   True        False         False      6h45m
cloud-credential                           4.10.20   True        False         False      28h
cluster-autoscaler                         4.10.20   True        False         False      28h
config-operator                            4.10.20   True        False         False      28h
console                                    4.10.20   True        False         False      3m30s
csi-snapshot-controller                    4.10.20   True        False         False      43m
dns                                        4.10.20   True        False         False      28h
etcd                                       4.10.20   True        False         False      28h
image-registry                             4.10.20   True        False         False      28h
ingress                                    4.10.20   True        False         False      9h
insights                                   4.10.20   True        False         False      28h
kube-apiserver                             4.10.20   True        False         False      28h
kube-controller-manager                    4.10.20   True        False         False      28h
kube-scheduler                             4.10.20   True        False         False      28h
kube-storage-version-migrator              4.10.20   True        False         False      28h
machine-api                                4.10.20   True        False         False      28h
machine-approver                           4.10.20   True        False         False      28h
machine-config                             4.10.20   True        False         False      7h3m
marketplace                                4.10.20   True        False         False      28h
monitoring                                 4.10.20   True        False         False      28h
network                                    4.10.20   True        False         False      28h
node-tuning                                4.10.20   True        False         False      40m
openshift-apiserver                        4.10.20   True        False         False      15h
openshift-controller-manager               4.10.20   True        False         False      28h
openshift-samples                          4.10.20   True        False         False      42m
operator-lifecycle-manager                 4.10.20   True        False         False      28h
operator-lifecycle-manager-catalog         4.10.20   True        False         False      28h
operator-lifecycle-manager-packageserver   4.10.20   True        False         False      28h
service-ca                                 4.10.20   True        False         False      28h
storage                                    4.10.20   True        False         False      28h
[root@bastion-01 ~]#

Kubernetes版本的情况是,主节点(master)已经升级到v1.23,但工作节点(worker)和基础设施节点(infra)仍保持在v1.21。

[root@bastion-01 ~]# oc get node
NAME        STATUS   ROLES    AGE   VERSION
infra-01    Ready    infra    28h   v1.21.11+6b3cbdd
infra-02    Ready    infra    28h   v1.21.11+6b3cbdd
infra-03    Ready    infra    28h   v1.21.11+6b3cbdd
master-01   Ready    master   28h   v1.23.5+3afdacb
master-02   Ready    master   28h   v1.23.5+3afdacb
master-03   Ready    master   28h   v1.23.5+3afdacb
worker-01   Ready    worker   28h   v1.21.11+6b3cbdd
worker-02   Ready    worker   28h   v1.21.11+6b3cbdd
[root@bastion-01 ~]#

RHCOS版本同样是主节点升级到了4.10,但是工作节点和基础设施节点仍保持在4.8。

[root@bastion-01 ~]# ssh core@master-01 -- cat /etc/redhat-release
Red Hat Enterprise Linux CoreOS release 4.10
[root@bastion-01 ~]#
[root@bastion-01 ~]# ssh core@infra-01 -- cat /etc/redhat-release
Red Hat Enterprise Linux CoreOS release 4.8
[root@bastion-01 ~]#
[root@bastion-01 ~]# ssh core@worker-01 -- cat /etc/redhat-release
Red Hat Enterprise Linux CoreOS release 4.8
[root@bastion-01 ~]#

(8)解除worker(基础设施)MCP的暂停(*)更新worker(基础设施)(worker(基础设施)重新启动1次)

因为worker使用的Machine Config Pool(MCP)已经实施了更新暂停操作(Pause),所以我们现在将解除这个操作。
在这个验证环境中,我们还创建了infra节点的MCP,因此不仅需要对worker节点,还需要对infra节点进行更新暂停操作(Pause)的解除。

[root@bastion-01 ~]# oc patch mcp/infra --type merge --patch '{"spec":{"paused":false}}'
machineconfigpool.machineconfiguration.openshift.io/infra patched
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc patch mcp/worker --type merge --patch '{"spec":{"paused":false}}'
machineconfigpool.machineconfiguration.openshift.io/worker patched
[root@bastion-01 ~]#

确认工人节点和基础设施节点上的MCP暂停处理(Pause)已被解除。

[root@bastion-01 ~]# oc get mcp master -o json | jq -r .spec.paused
false
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get mcp worker -o json | jq -r .spec.paused
false
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get mcp infra -o json | jq -r .spec.paused
false
[root@bastion-01 ~]#

对于worker和基础架构节点,为了应用新的MCP主控程序,将开始重新启动worker和基础架构节点。

[root@bastion-01 ~]# oc get node
NAME        STATUS                     ROLES    AGE   VERSION
infra-01    Ready                      infra    28h   v1.21.11+6b3cbdd
infra-02    Ready,SchedulingDisabled   infra    28h   v1.21.11+6b3cbdd
infra-03    Ready                      infra    28h   v1.21.11+6b3cbdd
master-01   Ready                      master   28h   v1.23.5+3afdacb
master-02   Ready                      master   28h   v1.23.5+3afdacb
master-03   Ready                      master   28h   v1.23.5+3afdacb
worker-01   Ready,SchedulingDisabled   worker   28h   v1.21.11+6b3cbdd
worker-02   Ready                      worker   28h   v1.21.11+6b3cbdd
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get mcp
NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
infra    rendered-infra-bd24e2400e059460c308e626771bc373    False     True       False      3              0                   0                     0                      27h
master   rendered-master-e5b532b6e0c8576f3ce2b2c986e299f7   True      False      False      3              3                   3                     0                      28h
worker   rendered-worker-bd24e2400e059460c308e626771bc373   False     True       False      2              0                   0                     0                      28h
[root@bastion-01 ~]#
2022-08-09-15-13-51.png

(9) 师傅和工人都将在4月10日变成四十二。

2022-08-09-15-14-45.png

我将通过CLI验证升级已成功完成。

版本号 clusterversion 的版本是 4.10.20。

[root@bastion-01 ~]# oc get clusterversion
NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
version   4.10.20   True        False         23m     Cluster version is 4.10.20
[root@bastion-01 ~]#

MCP的所有节点都被更新为True。

[root@bastion-01 ~]# oc get mcp
NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
infra    rendered-infra-8c91444541360f1a72459e601c493e77    True      False      False      3              3                   3                     0                      27h
master   rendered-master-e5b532b6e0c8576f3ce2b2c986e299f7   True      False      False      3              3                   3                     0                      28h
worker   rendered-worker-8c91444541360f1a72459e601c493e77   True      False      False      2              2                   2                     0                      28h
[root@bastion-01 ~]#

所有的节点都已经准备就绪,而且Kubernetes的版本也升级到了v1.23。

[root@bastion-01 ~]# oc get node
NAME        STATUS   ROLES    AGE   VERSION
infra-01    Ready    infra    28h   v1.23.5+3afdacb
infra-02    Ready    infra    28h   v1.23.5+3afdacb
infra-03    Ready    infra    28h   v1.23.5+3afdacb
master-01   Ready    master   28h   v1.23.5+3afdacb
master-02   Ready    master   28h   v1.23.5+3afdacb
master-03   Ready    master   28h   v1.23.5+3afdacb
worker-01   Ready    worker   28h   v1.23.5+3afdacb
worker-02   Ready    worker   28h   v1.23.5+3afdacb
[root@bastion-01 ~]#

集群操作员的 VERSION 也全部更新为 4.10.20。

[root@bastion-01 ~]# oc get co
NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
authentication                             4.10.20   True        False         False      2m27s
baremetal                                  4.10.20   True        False         False      28h
cloud-controller-manager                   4.10.20   True        False         False      7h8m
cloud-credential                           4.10.20   True        False         False      28h
cluster-autoscaler                         4.10.20   True        False         False      28h
config-operator                            4.10.20   True        False         False      28h
console                                    4.10.20   True        False         False      6m54s
csi-snapshot-controller                    4.10.20   True        False         False      66m
dns                                        4.10.20   True        False         False      28h
etcd                                       4.10.20   True        False         False      28h
image-registry                             4.10.20   True        False         False      4m57s
ingress                                    4.10.20   True        False         False      9h
insights                                   4.10.20   True        False         False      28h
kube-apiserver                             4.10.20   True        False         False      28h
kube-controller-manager                    4.10.20   True        False         False      28h
kube-scheduler                             4.10.20   True        False         False      28h
kube-storage-version-migrator              4.10.20   True        False         False      11m
machine-api                                4.10.20   True        False         False      28h
machine-approver                           4.10.20   True        False         False      28h
machine-config                             4.10.20   True        False         False      7h26m
marketplace                                4.10.20   True        False         False      28h
monitoring                                 4.10.20   True        False         False      28h
network                                    4.10.20   True        False         False      28h
node-tuning                                4.10.20   True        False         False      63m
openshift-apiserver                        4.10.20   True        False         False      16h
openshift-controller-manager               4.10.20   True        False         False      28h
openshift-samples                          4.10.20   True        False         False      65m
operator-lifecycle-manager                 4.10.20   True        False         False      28h
operator-lifecycle-manager-catalog         4.10.20   True        False         False      28h
operator-lifecycle-manager-packageserver   4.10.20   True        False         False      28h
service-ca                                 4.10.20   True        False         False      28h
storage                                    4.10.20   True        False         False      28h
[root@bastion-01 ~]#

RHCOS的版本同样为master、infra、worker节点都是4.10。

[root@bastion-01 ~]# ssh core@master-01 -- cat /etc/redhat-release
Red Hat Enterprise Linux CoreOS release 4.10
[root@bastion-01 ~]#
[root@bastion-01 ~]# ssh core@infra-01 -- cat /etc/redhat-release
Red Hat Enterprise Linux CoreOS release 4.10
[root@bastion-01 ~]#
[root@bastion-01 ~]# ssh core@worker-01 -- cat /etc/redhat-release
Red Hat Enterprise Linux CoreOS release 4.10
[root@bastion-01 ~]#

(10) CLI(在 OC 上)的更新

CLI(oc)将升级到版本4.10.20。(省略步骤。)

操作员

一旦OCP的升级完成后,我们会相应地进行附加操作,例如运算符和应用程序的更新。在这里,我们已经完成了以下工作。

(1) 更新合适必要的事项

(示例:本地存储操作员(稳定版4.8转至稳定版4.10)等)

考虑更新的对象

这次引入的运营商如下。

在OCP 4.8版本中引入的运算符版本。

OperatorChannel更新承認ストラテジーOpenShift Elasticsearch Operatorstable-5.4手動Red Hat OpenShift Loggingstable-5.4手動Local Storage4.8手動

当确认Red Hat OpenShift Container Platform的生命周期策略时,发现Logging(OpenShift Elasticsearch Operator,OpenShift Logging)的5.4版本与OCP 4.8、4.9、4.10兼容,并且在OCP 4.8时已升级到5.4版本,所以在此次OCP 4.10更新后无需进行任何操作。

    (※)例えばOCP 4.6でロギング4.6を入れていた場合は、OCPをひとつづつバージョンアップしてOCP 4.9にする前に、一旦ロギングを5.4などにアップデートする必要があったりします。

关于本地存储运算符,Red Hat OpenShift容器平台的生命周期政策中没有提到与OCP的兼容性。

然而,尽管Local Storage Operator仍然保持在4.8版本,但我已经成功将OCP本身升级到了4.10版本,所以我也会将这里的Local Storage Operator一同升级至4.10版本。

如果在OCP 4.10更新后升级Operator,版本将如何?

OperatorChannel更新承認ストラテジーOpenShift Elasticsearch Operatorstable-5.4手動Red Hat OpenShift Loggingstable-5.4手動Local Storage4.10手動

(補足)Local Storage Operator自身的更新范围
当确认Operator的csv文件的olm.skipRange时,可以看到这个Operator的这个版本能够从哪个版本进行更新的信息。
(以下是将Local Storage Operator升级到4.10后的csv显示)
当将Local Storage Operator通道升级到4.10时,可以确定版本号为4.10.0-202206291026的Operator可以从4.3.0版本升级。
因此,可以直接将Local Storage Operator从4.8升级到4.10。
[root@bastion-01 ~]# oc get csv -n openshift-local-storage
NAME DISPLAY VERSION REPLACES PHASE
elasticsearch-operator.5.4.2 OpenShift Elasticsearch Operator 5.4.2 Succeeded
local-storage-operator.4.10.0-202206291026 Local Storage 4.10.0-202206291026 local-storage-operator.4.8.0-202206281335 Succeeded
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get csv -n openshift-local-storage local-storage-operator.4.10.0-202206291026 -o json | jq -r .metadata.annotations | grep olm.skipRange
“olm.skipRange”: “>=4.3.0 <4.10.0-202206291026”,
[root@bastion-01 ~]#

无论如何,要确认这个范围,可能需要在其他环境中先安装这个版本的Operator,否则很难确认。

本地存储运营商的更新。

将本地存储操作员的Channel从4.8更新到4.10。

更新前的确认

我们将确认更新之前的状态。

本地存储操作员的通道已经达到4.8。

[root@bastion-01 ~]# oc get sub -n openshift-local-storage
NAME                     PACKAGE                  SOURCE             CHANNEL
local-storage-operator   local-storage-operator   redhat-operators   4.8
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get csv -n openshift-local-storage
NAME                                        DISPLAY                            VERSION              REPLACES   PHASE
elasticsearch-operator.5.4.2                OpenShift Elasticsearch Operator   5.4.2                           Succeeded
local-storage-operator.4.8.0-202206281335   Local Storage                      4.8.0-202206281335              Succeeded
[root@bastion-01 ~]#

由于更新承认策略是手动进行的,所以如果有更新的installplan,它应该会处于等待批准状态。然而,在这个频道中,我们可以确认它已经是最新的版本。

[root@bastion-01 ~]# oc get installplan -n openshift-local-storage
NAME            CSV                                         APPROVAL    APPROVED
install-fq5qr   local-storage-operator.4.8.0-202206281335   Automatic   true
[root@bastion-01 ~]#

本地卷资源本身创建了3个,设置了nodeSelector以在infra-0 [1-3]上创建PV。

[root@bastion-01 ~]# oc get localvolume -n openshift-local-storage
NAME                           AGE
localvolume-alertmanagermain   17d
localvolume-elasticsearch      17d
localvolume-prometheusk8s      17d
[root@bastion-01 ~]#

根据这个,Daemonset中的Pod被创建到infra-0[1-3]。
(在4.6版本中,通过localvolume资源的nodeSelector,在每个node上创建了local-diskmakerm和local-provisioner的Pod对,负责磁盘的格式化和挂载/卸载处理。
从4.8版本开始,不再是基于每个localvolume资源,而是在通过多个localvolume的nodeSelector指定的node上只有一个名为diskmaker-manager的Pod,它负责为多个localvolume资源关联的PV提供磁盘的格式化和挂载/卸载处理。)

[root@bastion-01 ~]# oc get pod -n openshift-local-storage -o wide
NAME                                      READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE   READINESS GATES
diskmaker-manager-2tjdb                   1/1     Running   3          17d   10.128.2.2   infra-02    <none>           <none>
diskmaker-manager-vd8tl                   1/1     Running   3          17d   10.129.2.3   infra-03    <none>           <none>
diskmaker-manager-xflxv                   1/1     Running   3          17d   10.130.2.5   infra-01    <none>           <none>
local-storage-operator-69864bc756-7t9gd   1/1     Running   0          16d   10.131.2.8   worker-01   <none>           <none>
[root@bastion-01 ~]#

OCP 4.10升级后,alertmanager-main的Pod副本数变为了2个,但是PV和PVC仍然有3个。

[root@bastion-01 ~]# oc get pv
NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                                                           STORAGECLASS             REASON   AGE
image-registry-storage   100Gi      RWX            Retain           Bound       openshift-image-registry/image-registry-storage                 image-registry                    17d
local-pv-13e978f0        40Gi       RWO            Delete           Available                                                                   local-prometheusk8s               17d
local-pv-476b4e36        80Gi       RWO            Delete           Bound       openshift-logging/elasticsearch-elasticsearch-cdm-oqnqc785-1    local-elasticsearch               17d
local-pv-6a3a9d54        40Gi       RWO            Delete           Bound       openshift-monitoring/prometheus-k8s-db-prometheus-k8s-1         local-prometheusk8s               17d
local-pv-6cb91dfa        10Gi       RWO            Delete           Bound       openshift-monitoring/alertmanager-main-db-alertmanager-main-1   local-alertmanagermain            17d
local-pv-aec025c7        80Gi       RWO            Delete           Bound       openshift-logging/elasticsearch-elasticsearch-cdm-oqnqc785-2    local-elasticsearch               17d
local-pv-e646c476        40Gi       RWO            Delete           Bound       openshift-monitoring/prometheus-k8s-db-prometheus-k8s-0         local-prometheusk8s               17d
local-pv-e7a740c6        80Gi       RWO            Delete           Bound       openshift-logging/elasticsearch-elasticsearch-cdm-oqnqc785-3    local-elasticsearch               17d
local-pv-f209ee07        10Gi       RWO            Delete           Bound       openshift-monitoring/alertmanager-main-db-alertmanager-main-2   local-alertmanagermain            17d
local-pv-fc84cac         10Gi       RWO            Delete           Bound       openshift-monitoring/alertmanager-main-db-alertmanager-main-0   local-alertmanagermain            17d
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get pvc -n openshift-monitoring
NAME                                       STATUS   VOLUME              CAPACITY   ACCESS MODES   STORAGECLASS             AGE
alertmanager-main-db-alertmanager-main-0   Bound    local-pv-fc84cac    10Gi       RWO            local-alertmanagermain   17d
alertmanager-main-db-alertmanager-main-1   Bound    local-pv-6cb91dfa   10Gi       RWO            local-alertmanagermain   17d
alertmanager-main-db-alertmanager-main-2   Bound    local-pv-f209ee07   10Gi       RWO            local-alertmanagermain   17d
prometheus-k8s-db-prometheus-k8s-0         Bound    local-pv-e646c476   40Gi       RWO            local-prometheusk8s      17d
prometheus-k8s-db-prometheus-k8s-1         Bound    local-pv-6a3a9d54   40Gi       RWO            local-prometheusk8s      17d
[root@bastion-01 ~]#

更新

虽然可以通过CLI来更新订阅资源的通道,但在这里我们选择使用GUI完成。

2022-08-09-21-50-08.png
2022-08-09-21-51-00.png
2022-08-09-21-56-09.png
2022-08-09-21-56-51.png
2022-08-09-21-59-02.png
2022-08-09-21-59-23.png
2022-08-09-22-00-29.png
2022-08-09-22-03-36.png

确认更新后情况

本地存储运营商的频道已经更新到4.10。
CSV的版本已经更新为4.10.0-202206291026。

[root@bastion-01 ~]# oc get sub -n openshift-local-storage
NAME                     PACKAGE                  SOURCE             CHANNEL
local-storage-operator   local-storage-operator   redhat-operators   4.10
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get csv -n openshift-local-storage
NAME                                         DISPLAY                            VERSION               REPLACES                                    PHASE
elasticsearch-operator.5.4.2                 OpenShift Elasticsearch Operator   5.4.2                                                             Succeeded
local-storage-operator.4.10.0-202206291026   Local Storage                      4.10.0-202206291026   local-storage-operator.4.8.0-202206281335   Succeeded
[root@bastion-01 ~]#

由於更新後不久,在4.10 Channel中尚未有比4.10.0更新的版本的InstallPlan,因此4.10.0的InstallPlan的APPROVED欄位設為true。

[root@bastion-01 ~]# oc get installplan -n openshift-local-storage
NAME            CSV                                          APPROVAL    APPROVED
install-fq5qr   local-storage-operator.4.8.0-202206281335    Automatic   true
install-zslmm   local-storage-operator.4.10.0-202206291026   Manual      true
[root@bastion-01 ~]#

本地卷资源保留了更新之前的内容不变。

[root@bastion-01 ~]# oc get localvolume -n openshift-local-storage
NAME                           AGE
localvolume-alertmanagermain   17d
localvolume-elasticsearch      17d
localvolume-prometheusk8s      17d
[root@bastion-01 ~]#

Alertmanager主目录的持久卷(PV)和持久卷声明(PVC)都保留了更新之前的版本。

[root@bastion-01 ~]# oc get pv | grep alertmanager-main
local-pv-6cb91dfa        10Gi       RWO            Delete           Bound       openshift-monitoring/alertmanager-main-db-alertmanager-main-1   local-alertmanagermain            17d
local-pv-f209ee07        10Gi       RWO            Delete           Bound       openshift-monitoring/alertmanager-main-db-alertmanager-main-2   local-alertmanagermain            17d
local-pv-fc84cac         10Gi       RWO            Delete           Bound       openshift-monitoring/alertmanager-main-db-alertmanager-main-0   local-alertmanagermain            17d
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get pvc -n openshift-monitoring | grep alertmanager-main
alertmanager-main-db-alertmanager-main-0   Bound    local-pv-fc84cac    10Gi       RWO            local-alertmanagermain   17d
alertmanager-main-db-alertmanager-main-1   Bound    local-pv-6cb91dfa   10Gi       RWO            local-alertmanagermain   17d
alertmanager-main-db-alertmanager-main-2   Bound    local-pv-f209ee07   10Gi       RWO            local-alertmanagermain   17d
[root@bastion-01 ~]#

由于alertmanager的副本减少了从3个变为2个,因此需要删除一个PVC/PV等。

将OCP 4.8升级到4.10后,监控组件的statefulset副本数量将如下所示发生变化。

monitoring componentreplica数 (OCP 4.8)replica数 (OCP 4.10)prometheus-k8s22alertmanager-main32
[root@bastion-01 ~]# oc get statefulset -n openshift-monitoring
NAME                READY   AGE
alertmanager-main   2/2     34m
prometheus-k8s      2/2     34m
[root@bastion-01 ~]#

OCP 4.10版本更新后,alertmanager-main的Pod副本数量增至2,因此根据需要,必要时需要删除多余的alertmanager-main持久卷(PV)。

这次的环境中,我们使用了local-storage operator,在3个基础设施节点上添加了虚拟磁盘,并创建了适用于alertmanager-main的localvolume资源,以及相应的PV。

由于alertmanager-main的Pod停止运行,将删除不再使用的PV/PVC。

当确认Alertmanager-main的Pod在哪个节点上运行时发现,它已经从infra-03上消失了。

[root@bastion-01 ~]# oc get pod -n openshift-monitoring -o wide | grep prometheus-k8s
prometheus-k8s-0                               6/6     Running   0          16d    10.129.2.8      infra-03    <none>           <none>
prometheus-k8s-1                               6/6     Running   0          16d    10.130.2.8      infra-01    <none>           <none>
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get pod -n openshift-monitoring -o wide | grep alertmanager-main
alertmanager-main-0                            6/6     Running   0          16d    10.128.2.9      infra-02    <none>           <none>
alertmanager-main-1                            6/6     Running   0          16d    10.130.2.10     infra-01    <none>           <none>
[root@bastion-01 ~]#

然而,仍有三个alertmanager-main专用的持久卷和持久卷声明还未使用。

[root@bastion-01 ~]# oc get pv | grep alertmanager-main
local-pv-6cb91dfa        10Gi       RWO            Delete           Bound       openshift-monitoring/alertmanager-main-db-alertmanager-main-1   local-alertmanagermain            17d
local-pv-f209ee07        10Gi       RWO            Delete           Bound       openshift-monitoring/alertmanager-main-db-alertmanager-main-2   local-alertmanagermain            17d
local-pv-fc84cac         10Gi       RWO            Delete           Bound       openshift-monitoring/alertmanager-main-db-alertmanager-main-0   local-alertmanagermain            17d
[root@bastion-01 ~]#
[root@bastion-01 ~]# oc get pvc -n openshift-monitoring | grep alertmanager-main
alertmanager-main-db-alertmanager-main-0   Bound    local-pv-fc84cac    10Gi       RWO            local-alertmanagermain   17d
alertmanager-main-db-alertmanager-main-1   Bound    local-pv-6cb91dfa   10Gi       RWO            local-alertmanagermain   17d
alertmanager-main-db-alertmanager-main-2   Bound    local-pv-f209ee07   10Gi       RWO            local-alertmanagermain   17d
[root@bastion-01 ~]#

我认为这个视频可能只是未被使用,所以我认为保留它不动也可以。
然而,如果你想删除没有被妥善使用的东西,你需要更新localvolume资源。

由于alertmanager-main的statefulset的副本数量变为2,导致了名为alertmanager-main-2的Pod被删除。
由于被删除的Pod在infra-03上运行,因此将删除infra-03的PV/PVC。

首先,我们需要找出分配给alertmanager-main的虚拟磁盘在infra节点中的/dev/sdd路径。我们将检查infra-03节点中的/dev/sdd路径下的/dev/by-id/文件夹。

[root@bastion-01 ~]# ssh core@infra-03 -- sudo ls -l /dev/disk/by-id/ | grep scsi-36000 | grep sdd
lrwxrwxrwx. 1 root root  9 Jul 13 12:55 scsi-36000c29f96a0a5aa5dc5a6204d02874a -> ../../sdd
[root@bastion-01 ~]#

我将修改用于alertmanager-main的localvolume的清单文件。

[root@bastion-01 ~]# cd work/manifest/localvolume/
[root@bastion-01 localvolume]#
[root@bastion-01 localvolume]# ls -l localvolume-alertmanagermain.yaml
-rw-r--r--. 1 root root 696  5月 17 17:08 localvolume-alertmanagermain.yaml
[root@bastion-01 localvolume]#
[root@bastion-01 localvolume]# cp -p localvolume-alertmanagermain.yaml localvolume-alertmanagermain.yaml.bak.20220809
[root@bastion-01 localvolume]# vi localvolume-alertmanagermain.yaml
[root@bastion-01 localvolume]#

改动之前

apiVersion: "local.storage.openshift.io/v1"
kind: "LocalVolume"
metadata:
  name: "localvolume-alertmanagermain"
  namespace: "openshift-local-storage"
spec:
  nodeSelector:
    nodeSelectorTerms:
    - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - infra-01
          - infra-02
          - infra-03
  storageClassDevices:
    - storageClassName: "local-alertmanagermain"
      volumeMode: Filesystem
      fsType: xfs
      devicePaths:
        - /dev/disk/by-id/scsi-36000c292c64adf34d67ff0080ec8686a
        - /dev/disk/by-id/scsi-36000c298ec479efbc44f98d673edc887
        - /dev/disk/by-id/scsi-36000c29f96a0a5aa5dc5a6204d02874a

修订后 (xiū

    • spec.nodeSelectorから、infra-03を削除する

 

    spec.nodeSelectorから、infra-03の/dev/sddの/dev/disk/by-id/のエントリーを削除する。
apiVersion: "local.storage.openshift.io/v1"
kind: "LocalVolume"
metadata:
  name: "localvolume-alertmanagermain"
  namespace: "openshift-local-storage"
spec:
  nodeSelector:
    nodeSelectorTerms:
    - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - infra-01
          - infra-02
  storageClassDevices:
    - storageClassName: "local-alertmanagermain"
      volumeMode: Filesystem
      fsType: xfs
      devicePaths:
        - /dev/disk/by-id/scsi-36000c292c64adf34d67ff0080ec8686a
        - /dev/disk/by-id/scsi-36000c298ec479efbc44f98d673edc887

应用修正后的alertmanager-main使用的localvolume配置。

[root@bastion-01 localvolume]# oc apply -f localvolume-alertmanagermain.yaml
localvolume.local.storage.openshift.io/localvolume-alertmanagermain configured
[root@bastion-01 localvolume]#

可以确认 infra-03 的条目已经消失。

[root@bastion-01 localvolume]# oc get localvolume -n openshift-local-storage localvolume-alertmanagermain -o yaml
apiVersion: local.storage.openshift.io/v1
kind: LocalVolume
metadata:
  annotations:
    ()
  creationTimestamp: "2022-07-12T14:47:59Z"
  finalizers:
  - storage.openshift.com/local-volume-protection
  generation: 3
  name: localvolume-alertmanagermain
  namespace: openshift-local-storage
  resourceVersion: "18376454"
  uid: 3d357158-8520-4624-aa55-d717f9eec7b9
spec:
  logLevel: Normal
  managementState: Managed
  nodeSelector:
    nodeSelectorTerms:
    - matchExpressions:
      - key: kubernetes.io/hostname
        operator: In
        values:
        - infra-01
        - infra-02
  storageClassDevices:
  - devicePaths:
    - /dev/disk/by-id/scsi-36000c292c64adf34d67ff0080ec8686a
    - /dev/disk/by-id/scsi-36000c298ec479efbc44f98d673edc887
    fsType: xfs
    storageClassName: local-alertmanagermain
    volumeMode: Filesystem
status:
  conditions:
  - lastTransitionTime: "2022-07-12T14:47:59Z"
    message: Ready
    status: "True"
    type: Available
  generations:
  - group: apps
    lastGeneration: 5
    name: diskmaker-manager
    namespace: openshift-local-storage
    resource: DaemonSet
  managementState: Managed
  observedGeneration: 3
  readyReplicas: 0
[root@bastion-01 localvolume]#

然而,仅凭此操作并不能删除PV/PVC,因此需要手动进行删除。

[root@bastion-01 localvolume]# oc get pv | grep alertmanager-main
local-pv-6cb91dfa        10Gi       RWO            Delete           Bound       openshift-monitoring/alertmanager-main-db-alertmanager-main-1   local-alertmanagermain            27d
local-pv-f209ee07        10Gi       RWO            Delete           Bound       openshift-monitoring/alertmanager-main-db-alertmanager-main-2   local-alertmanagermain            27d
local-pv-fc84cac         10Gi       RWO            Delete           Bound       openshift-monitoring/alertmanager-main-db-alertmanager-main-0   local-alertmanagermain            27d
[root@bastion-01 localvolume]#
[root@bastion-01 localvolume]# oc get pvc -n openshift-monitoring | grep alertmanager-main
alertmanager-main-db-alertmanager-main-0   Bound    local-pv-fc84cac    10Gi       RWO            local-alertmanagermain   27d
alertmanager-main-db-alertmanager-main-1   Bound    local-pv-6cb91dfa   10Gi       RWO            local-alertmanagermain   27d
alertmanager-main-db-alertmanager-main-2   Bound    local-pv-f209ee07   10Gi       RWO            local-alertmanagermain   27d
[root@bastion-01 localvolume]#

本次将删除 alertmanager-main-2 的 Pod 中使用的 PV 和 PVC。

[root@bastion-01 localvolume]# oc delete pvc -n openshift-monitoring alertmanager-main-db-alertmanager-main-2
persistentvolumeclaim "alertmanager-main-db-alertmanager-main-2" deleted
[root@bastion-01 localvolume]#
[root@bastion-01 localvolume]# oc delete pv local-pv-f209ee07
persistentvolume "local-pv-f209ee07" deleted
[root@bastion-01 localvolume]#

我们将确认 alertmanager-main 的副本数量已经减少至 2,并且未使用的 PV 和 PVC 已经被删除。

[root@bastion-01 localvolume]# oc get pv | grep alertmanager-main
local-pv-6cb91dfa        10Gi       RWO            Delete           Bound       openshift-monitoring/alertmanager-main-db-alertmanager-main-1   local-alertmanagermain            27d
local-pv-fc84cac         10Gi       RWO            Delete           Bound       openshift-monitoring/alertmanager-main-db-alertmanager-main-0   local-alertmanagermain            27d
[root@bastion-01 localvolume]#
[root@bastion-01 localvolume]# oc get pvc -n openshift-monitoring | grep alertmanager-main
alertmanager-main-db-alertmanager-main-0   Bound    local-pv-fc84cac    10Gi       RWO            local-alertmanagermain   27d
alertmanager-main-db-alertmanager-main-1   Bound    local-pv-6cb91dfa   10Gi       RWO            local-alertmanagermain   27d
[root@bastion-01 localvolume]#

Pod仍然正常运行。

[root@bastion-01 localvolume]# oc get statefulset -n openshift-monitoring
NAME                READY   AGE
alertmanager-main   2/2     27d
prometheus-k8s      2/2     27d
[root@bastion-01 localvolume]#
[root@bastion-01 localvolume]# oc get pod -n openshift-monitoring | grep alertmanager-main
alertmanager-main-0                            6/6     Running   0          27d
alertmanager-main-1                            6/6     Running   0          27d
[root@bastion-01 localvolume]#

(3) 对于其他单独引入的事项也作出了相应调整。

操作员和其他应用程序可能需要在更新OCP到4.10之前先更新,因为它们与OCP的兼容性可能需要提前确认您使用的组件的文档等,并根据情况适当判断更新的顺序。

举个例子,Local Storage Operator在Red Hat OpenShift Container Platform的生命周期策略中没有提到与OCP的兼容性。
实际上,当尝试将OCP从4.6升级到4.7->4.8->4.9时,在升级到OCP 4.9时会显示一条消息,表示由于Local Storage Operator (stable-4.6)与之不兼容,无法将其升级到OCP 4.9。因此,在升级到OCP 4.8之后,需要将Local Storage Operator也更新到stable-4.8,并在之后通过EUS间更新将OCP升级到4.10,最后需要将Local Storage Operator升级到stable-4.10。

另外,操作员的API兼容性以及操作员实例的规范模式可能会发生变化,可能需要先卸载,然后在OCP更新后重新安装操作员可能更快。

在这方面,不仅仅需要在文档中进行兼容性确认,还应该准备版本升级验证环境并在实际设备上进行确认。

无论如何,基本上与其一次性将多个版本升级,还是最好将OCP的更新纳入运营计划以便根据需求及时进行更新。

广告
将在 10 秒后关闭
bannerAds