OpenShift 4 クラスターのアップグレードの事前チェック要件
Environment
- Red Hat OpenShift Container Platform (RHOCP)
- 4
- Red Hat OpenShift Service on AWS (ROSA)
- 4
- Red Hat OpenShift Dedicated (OSD)
- 4
- Azure Red Hat OpenShift (ARO)
- 4
Issue
- OpenShift Cluster をアップグレードする前の初期要件は何ですか?
- クラスターオブジェクトの正常性を確認するにはどうすればよいですか?
- クラスター上のリソース割り当てを確認するにはどうすればよいですか?
- Pod のステータスと実行状態を確認するにはどうすればよいですか?
- その他の事前チェック。
Resolution
クラスターをアップグレードする前に、クラスターが正常に動作しており、安全にアップグレードできることを確認するために、以下のチェック項目を確認してください。
プロアクティブケースの作成
ARO の標準ガイドライン
以下は、標準 ProActive ARO クラスターアップグレードチケットを作成するために必要な前提条件です。
- How to open a PROACTIVE case for a ROSA, OSD に従った、スケジュールされたメンテナンスウィンドウの日付/時刻 (タイムゾーンを含む)。
- 適切な連絡先情報。
- 標準 must-gather。
-
ARO クラスターのリソース ID とリージョン (以下を使用して取得可能)。
Resource ID:
$ az aro show -n <cluster_name> -g <resource_group> --subscription <subscription_name> --query id
Region:
$ az aro show -n <cluster_name> -g <resource_group> --subscription <subscription_name> --query location
OSD/ROSA の標準ガイドライン
以下は、標準 ProActive OSD/ROSA クラスターのアップグレードチケットを作成するために必要な前提条件です。
- How to open a PROACTIVE case for a ROSA, OSD に従った、スケジュールされたメンテナンスウィンドウの日付/時刻 (タイムゾーンを含む)。
- 適切な連絡先情報。
OCP の標準ガイドライン
以下は、標準 ProActive OCP クラスターアップグレードチケットを作成するために必要な前提条件です。
- How to open a PROACTIVE case for patching or upgrading Red Hat OpenShift Container Platform に従った、スケジュールされたメンテナンスウィンドウの日付/時刻 (タイムゾーンを含む)。
- 適切な連絡先情報。
- 標準 must-gather。
クラスターの事前チェック
Operator のチェック
クラスター上で実行されている Operator のバージョンが、必要な OpenShift バージョンと互換性があるか確認します。OpenShift で Red Hat がサポートする Operator については、OpenShift Operator Life Cycles および Red Hat OpenShift Container Platform Operator Update Information Checker を参照し、それぞれの特定の Operator を検索してください。これは、新しい OpenShift マイナーバージョン (4.y.z
の y
) にアップグレードするときに特に重要です。
重要な注意点: Red Hat OpenShift Data Foundations (RHODF) がクラスターにインストールされている場合は、RHODF バージョンが必要な RHOCP バージョンと互換性があるか確認することに加えて、OpenShift Data Foundations (ODF) Operator Upgrade Pre-Checks も参照してください。ODF クラスターのステータスが正常でない場合は、ODF ノードをドレインできず、OpenShift のアップグレードがハングする原因になります。
クラスターのアップグレードパスの確認
Red Hat OpenShift Container Platform Update Graph を使用すると、アップグレードに利用可能なアップグレードパスを確認できます。
削除された API の確認
新しい OpenShift マイナーバージョン (4.yz
の y
) にアップグレードする場合は、削除された API があるかどうか、およびカスタムアプリケーションがまだそれを使用しているかどうかを確認する必要があります。カスタムアプリケーションが、目的のマイナーバージョンで削除される API を使用している場合は、アップグレード後に問題が発生しないように、それらのアプリケーションを更新する必要があります。詳細は 、Kubernetes API の非推奨と削除への対応 を参照してください。
クラスターオブジェクトの確認
-
ノードのステータスをチェックして、どのノードも
NotReady
状態またはSchedulingDisabled
状態になっていないことを確認します。$ oc get nodes
NAME STATUS ROLES AGE VERSION
master-0.lab.example.com Ready master 3d18h v1.23.12+8a6bfe4
master-1.lab.example.com Ready master 3d18h v1.23.12+8a6bfe4
master-2.lab.example.com Ready master 3d18h v1.23.12+8a6bfe4
worker-0.lab.example.com Ready worker 3d17h v1.23.12+8a6bfe4
worker-1.lab.example.com Ready worker 3d17h v1.23.12+8a6bfe4
worker-2.lab.example.com Ready worker 3d17h v1.23.12+8a6bfe4 -
クラスター Operator のステータスをチェックして、すべてのクラスター Operator が
Available
状態であり、Degraded
状態ではないことを確認します。$ oc get co
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE
[...]
etcd 4.10.54 True False False 3d18h
image-registry 4.10.54 True False False 3d9h
ingress 4.10.54 True False False 3d17h
insights 4.10.54 True False False 3d18h
kube-apiserver 4.10.54 True False False 3d18h
kube-controller-manager 4.10.54 True False False 3d18h
kube-scheduler 4.10.54 True False False 3d18h
kube-storage-version-migrator 4.10.54 True False False 2d3h
machine-api 4.10.54 True False False 3d18h
machine-approver 4.10.54 True False False 3d18h
machine-config 4.10.54 True False False 2d2h
[...] -
PV
とPVC
の正常性をチェックして、以下を確認します。- すべての PV と PVC が
mounted
状態である。 - PV と PVC はいずれも
unmounted
状態ではない。 - PV と PVC はいずれも
terminating
状態でスタックしていない。 - 異常な設定は存在しない。
$ oc get pv,pvc -A
NAMESPACE NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
[...]
openshift-compliance persistentvolumeclaim/ocp4-cis Active 6d10h
openshift-compliance persistentvolumeclaim/ocp4-cis-node-master Active 6d10h
openshift-compliance persistentvolumeclaim/ocp4-cis-node-worker Active 6d10h
[...] - すべての PV と PVC が
-
machineConfigPools
の正常性をチェックして、MACHINECOUNT
がREADYMACHINECOUNT
と等しくなるようにし、UPDATEDMACHINECOUNT
およびDEGRADEDMACHINECOUNT
にスタックしているマシンがないことを確認します。$ oc get mcp
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE
master rendered-master-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX True False False 3 3 3 0 4d7h
worker rendered-worker-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX True False False 3 3 3 0 4d7h
クラスターノードの割り当ての確認
リソース割り当てを確認するには、次の 2 つの方法があります。
$ oc describe
の使用
$ oc describe node worker-0.lab.example.com
[...]
Conditions: <====
Type Status LastHeartbeatTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
MemoryPressure False Wed, 14 Jun 2023 15:24:09 -0400 Tue, 13 Jun 2023 02:59:26 -0400 KubeletHasSufficientMemory kubelet has sufficient memory available
DiskPressure False Wed, 14 Jun 2023 15:24:09 -0400 Tue, 13 Jun 2023 02:59:26 -0400 KubeletHasNoDiskPressure kubelet has no disk pressure
PIDPressure False Wed, 14 Jun 2023 15:24:09 -0400 Tue, 13 Jun 2023 02:59:26 -0400 KubeletHasSufficientPID kubelet has sufficient PID available
Ready True Wed, 14 Jun 2023 15:24:09 -0400 Tue, 13 Jun 2023 02:59:36 -0400 KubeletReady kubelet is posting ready status
Capacity: <====
cpu: 4
ephemeral-storage: 41407468Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 8146240Ki
pods: 250
Allocatable: <====
cpu: 3500m
ephemeral-storage: 37087380622
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 6995264Ki
pods: 250
System Info: <====
Machine ID: bc21e1755a9142238b04129b97e118c0
System UUID: bc21e175-5a91-4223-8b04-129b97e118c0
Boot ID: b0520f6a-09e7-4bf8-8e0c-9aa749fd14bc
Kernel Version: 4.18.0-372.58.1.el8_6.x86_64
OS Image: Red Hat Enterprise Linux CoreOS 412.86.202305230130-0 (Ootpa)
Operating System: linux
Architecture: amd64
Container Runtime Version: cri-o://1.25.3-4.rhaos4.12.git76ceef4.el8
Kubelet Version: v1.25.8+37a9a08
Kube-Proxy Version: v1.25.8+37a9a08
Non-terminated Pods: (33 in total) <====
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits Age
--------- ---- ------------ ---------- --------------- ------------- ---
new-test httpd-675fd5bfdd-9s4pr 0 (0%) 0 (0%) 0 (0%) 0 (0%) 34h
openshift-cluster-node-tuning-operator tuned-wfrxw 10m (0%) 0 (0%) 50Mi (0%) 0 (0%) 37h
openshift-cnv cdi-operator-6ffbc46886-rfb97 10m (0%) 0 (0%) 150Mi (2%) 0 (0%) 27h
openshift-cnv cluster-network-addons-operator-675b769f6f-954wl 60m (1%) 0 (0%) 50Mi (0%) 0 (0%) 27h
openshift-cnv hco-operator-7f8c48598d-c6vh5 10m (0%) 0 (0%) 96Mi (1%) 0 (0%) 27h
openshift-cnv hco-webhook-fc6b4c4b5-7zrdb 5m (0%) 0 (0%) 48Mi (0%) 0 (0%) 27h
openshift-cnv hostpath-provisioner-operator-6b6bc8bf8-6mxkp 10m (0%) 0 (0%) 150Mi (2%) 0 (0%) 27h
openshift-cnv hyperconverged-cluster-cli-download-7f5844cb77-ftjbz 10m (0%) 0 (0%) 96Mi (1%) 0 (0%) 27h
Allocated resources: <====
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 959m (27%) 1700m (48%)
memory 2968Mi (43%) 1800Mi (26%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-1Gi 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
Events: <none> <====
[...]
以下のコマンドを使用して、すべてのノードを一度に記述することもできます。
$ oc describe nodes > nodes_description.yaml
YAML Output
の使用
$ oc get node worker.lab.example.com -oyaml
すべてのノードのリソース割り当てを一度に取得するには、以下のコマンドを使用します。
$ for i in $(oc get nodes | awk '{print $1}'); do echo "==== $i ====";oc describe node $i 2> /dev/null | grep -A10 Allocated; echo; done
[...]
==== master-0.lab.example.com ====
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 1970m (56%) 400m (11%)
memory 8022Mi (53%) 900Mi (6%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-1Gi 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
Events: <none>
==== master-1.lab.example.com ====
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 1935m (55%) 0 (0%)
memory 8357Mi (56%) 0 (0%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-1Gi 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
Events: <none>
==== master-2.lab.example.com ====
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 1579m (45%) 0 (0%)
memory 6282Mi (42%) 0 (0%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-1Gi 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
Events: <none>
[...]
リクエスト/制限 と ノードのオーバーコミット に関する詳細は、以下のドキュメントを参照してください。
Pod の正常性とステータスの確認
-
ステータスが
Running
、Completed
、Succeeded
ではない Pod を確認します。$ oc get pods --all-namespaces | egrep -v 'Running | Completed | Succeeded'
-
namespace 内のすべての Pod のステータスを確認します。
$ for i in `oc adm top pods -A | awk '{print $1}' | uniq`; do echo $i; oc get pods -owide -n $i; done
###[Using grep against node name will limit the search to get more accurate results]
$ for i in `oc adm top pods -A | awk '{print $1}' | uniq`; do echo $i; oc get pods -owide -n $i | grep <node_name>; echo '---------------------'; done -
以下を使用して Pod ログを確認します。
$ oc logs pod/<pod_name> -n <namespace_name>
-
特定のコンテナーからログを取得するには、
-c
パラメーターを使用します。$ oc logs pod/<pod_name> -c <conatiner_name> -n <namespace_name>
その他の事前チェック:
- etcd クラスターの健全性 を確認します。
- ネットワークの可観測性 を使用してネットワークの健全性を確認する
-
保留中の証明書署名要求を確認する。
$ oc get csr
-
Pod Disruption Budget の場合、アップグレード中にノードのドレインプロセスをブロックする可能性のある Pod があるか確認するには、以下のコマンド出力が必要です。通常、ノードが適切にドレインされるように、許容される中断は 1 に設定されます。must-gather はこれを適切にキャプチャーしないため、この出力を手動で確認する必要があります。
$ oc get pdb -A
-
カスタムネットワークポリシー が存在すると、クラスターのアップグレードが中断される可能性もあります。アップグレード前に必ずネットワークポリシーを確認し、無効化/削除してください。
$ oc get networkpolicies -A
-
Web Console -> Observe -> Alerting を介して Alertmanager で発動中のアラートを確認し、警告 または 重大 なアラートが発動していないこと、および既存の 情報 アラートを認識していることを確認します。
-
すべての namespace で 警告 イベントを探し、懸念されるものがないか確認します。
$ oc get events -A --field-selector type=Warning --sort-by=".lastTimestamp"
Root Cause
Red Hat OpenShift Container Platform 4 のアップグレードには、いくつかの異なるコンポーネントのアップグレードが伴うため、アップグレードを開始する前に、クラスターの全体的なステータスと、追加の Operator およびサードパーティーコンポーネントの互換性を確認する必要があります。
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.
Comments