0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OCP4.7.4からグローバルプルシークレットの変更の適用にノードドレインや再起動が不要になった

Posted at

OCP4.8にIBM Cloud Pak for Data (CP4D)をインストールしている時、OCPのグローバルプルシークレット変更時の挙動が変わったことに気づきました。OCPドキュメントで変更内容を確認のうえ、OCP4.6とOCP4.8で実際の挙動を検証してみました。

グローバルプルシークレットについて

CP4Dでは、ポッドなどのリソースは、IBM Entitled Registryからプルするように設定されています。 このレジストリは保護されており、資格キーを使用してのみアクセスできます。 IBM Entitled registry から直接イメージをプルする場合、グローバルプルシークレットに IBM の資格 API キーが含まれている必要があります。
CP4D 4.0の関連手順:Cloud Pak for Data イメージをプルするためのクラスターの構成

さて、OCP 4.8 のドキュメントに次の記述があります。
5.4.3. グローバルクラスターのプルシークレットの更新

現在のプルシークレットを置き換えるか、新しいプルシークレットを追加することで、クラスターのグローバルプルシークレットを更新できます。

注記
OpenShift Container Platform 4.7.4 の時点で、グローバルプルシークレットへの変更によってノードドレインまたは再起動がトリガーされなくなりました。

「OpenShift Container Platform 4.7.4 の時点で、グローバルプルシークレットへの変更によってノードドレインまたは再起動がトリガーされなくなりました。 」というのは、次のどちらの意味? という疑問がわきました。

  • ノードドレインまたは再起動がトリガーされないが、変更が適用される
  • ノードドレインまたは再起動がトリガーされないので、変更の適用には手動でノードドレインまたは再起動がトリガーが必要

release notesを見てみます。
OpenShift Container Platform 4.7 release notes

Some machine configuration updates no longer cause automatic reboot

The Machine Config Operator (MCO) no longer automatically reboots all corresponding nodes for the following machine configuration changes:

  • changes to the SSH key in the spec.config.ignition.passwd.users.sshAuthorizedKeys parameter of a machine config

  • changes to the global pull secret or pull secret in the openshift-config namespace

  • changes to the /etc/containers/registries.conf file, such as adding or editing an ImageContentSourcePolicy object

For more information, see Understanding the Machine Config Operator.

まだ曖昧です。リンク先のUnderstanding the Machine Config Operatorを見てみます。
mco_important_changes.png

openshift-config namespaceのグローバルプルシークレットまたはプルシークレットへの変更については、MCOが変更を検出すると、ノードをドレインまたは再起動せずに更新を適用する。 ということでよさそうです。

以下、CP4Dのためのグローバルプルシークレットの更新を行い、挙動をOCP4.6とOCP4.8で比較確認した例です。OCP4.8ではノードの再起動なしで、変更が適用されることを確認できました。

確認例

参考手順
Cloud Pak for Data イメージをプルするためのクラスターの構成

1.クラスター管理者としてOCPクラスターにログインします。

2.既存のglobal image pull secretがあるかどうかを確認します。

# oc extract secret/pull-secret -n openshift-config
.dockerconfigjson

.dockerconfigjsonが空でない場合、既存のglobal image pull secretがあります。以下、この空でない場合の手順です。

3.usernameとpasswordをBase64エンコーディングでエンコードした文字列をb64_credentialにセットします。

# b64_credential=`echo -n "cp:$CPD_KEY" | base64 -w0`

4.JSONファイルのauthセクションにコンテナレジストリのエントリーを追加します。

if [ "$(cat .dockerconfigjson  | grep '.auths' | grep 'cp.icr.io')" = "" ]; then
  echo "updating .dockerconfigjson"
  sed -i -e 's|:{|:{"cp.icr.io":{"auth":"'$b64_credential'"\},|' .dockerconfigjson
fi

5.新しい構成をアプライします。

# oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=.dockerconfigjson

OCP4.6 の場合

すべてのノードが自動的に再起動されます。

6.ノードのSTATUSをチェックし、すべてのノードがReadyになるまで待ちます。

# oc get nodes
### 出力例: 待つべき状態
# oc get nodes
NAME       STATUS                     ROLES    AGE   VERSION
infra-0    Ready                      worker   35d   v1.19.0+d5ed12c
infra-1    Ready                      worker   35d   v1.19.0+d5ed12c
infra-2    Ready                      worker   35d   v1.19.0+d5ed12c
master-0   Ready,SchedulingDisabled   master   36d   v1.19.0+d5ed12c
master-1   Ready                      master   36d   v1.19.0+d5ed12c
master-2   Ready                      master   36d   v1.19.0+d5ed12c
worker-0   Ready                      worker   35d   v1.19.0+d5ed12c
worker-1   Ready,SchedulingDisabled   worker   35d   v1.19.0+d5ed12c
worker-2   Ready                      worker   35d   v1.19.0+d5ed12c
worker-3   Ready                      worker   35d   v1.19.0+d5ed12c
worker-4   Ready                      worker   35d   v1.19.0+d5ed12c
worker-5   Ready                      worker   35d   v1.19.0+d5ed12c


### 出力例: すべてのノードがReadyになった状態
# oc get nodes
NAME       STATUS   ROLES    AGE   VERSION
infra-0    Ready    worker   36d   v1.19.0+d5ed12c
infra-1    Ready    worker   36d   v1.19.0+d5ed12c
infra-2    Ready    worker   36d   v1.19.0+d5ed12c
master-0   Ready    master   36d   v1.19.0+d5ed12c
master-1   Ready    master   36d   v1.19.0+d5ed12c
master-2   Ready    master   36d   v1.19.0+d5ed12c
worker-0   Ready    worker   36d   v1.19.0+d5ed12c
worker-1   Ready    worker   36d   v1.19.0+d5ed12c
worker-2   Ready    worker   36d   v1.19.0+d5ed12c
worker-3   Ready    worker   36d   v1.19.0+d5ed12c
worker-4   Ready    worker   36d   v1.19.0+d5ed12c
worker-5   Ready    worker   36d   v1.19.0+d5ed12c

すべてのノードがReadyになった後、各ノードにログインすると、
/var/lib/kubelet/config.json に cp.icr.io の情報が適用されていることを確認できました。

# oc debug node/worker-0
sh-4.4# chroot /host
sh-4.4# ls -l /var/lib/kubelet/config.json
-rw-------. 1 root root 2995 Dec  9  2021 /var/lib/kubelet/config.json

OCP4.8 の場合

ノードは再起動されず、常にReadyのままでしたが、Machine Config Pool Operatorの出力oc get mcpからノードが順次更新されていることを確認できました。

# oc get nodes
NAME       STATUS   ROLES    AGE     VERSION
infra-0    Ready    worker   6d      v1.21.11+6b3cbdd
infra-1    Ready    worker   6d      v1.21.11+6b3cbdd
infra-2    Ready    worker   6d      v1.21.11+6b3cbdd
master-0   Ready    master   6d      v1.21.11+6b3cbdd
master-1   Ready    master   6d      v1.21.11+6b3cbdd
master-2   Ready    master   6d      v1.21.11+6b3cbdd
worker-0   Ready    worker   6d      v1.21.11+6b3cbdd
worker-1   Ready    worker   5d23h   v1.21.11+6b3cbdd
worker-2   Ready    worker   6d      v1.21.11+6b3cbdd
worker-3   Ready    worker   6d      v1.21.11+6b3cbdd
worker-4   Ready    worker   6d      v1.21.11+6b3cbdd
worker-5   Ready    worker   6d      v1.21.11+6b3cbdd
# oc get mcp
NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
master   rendered-master-b2f8e48b76335b1e285b5dac02474ace   False     True       False      3              1                   1                     0                      6d
worker   rendered-worker-5bd7fe1a029cd154492507193689b559   False     True       False      9              1                   1                     0                      6d
# oc get nodes
NAME       STATUS   ROLES    AGE     VERSION
infra-0    Ready    worker   6d      v1.21.11+6b3cbdd
infra-1    Ready    worker   6d      v1.21.11+6b3cbdd
infra-2    Ready    worker   6d      v1.21.11+6b3cbdd
master-0   Ready    master   6d      v1.21.11+6b3cbdd
master-1   Ready    master   6d      v1.21.11+6b3cbdd
master-2   Ready    master   6d      v1.21.11+6b3cbdd
worker-0   Ready    worker   6d      v1.21.11+6b3cbdd
worker-1   Ready    worker   5d23h   v1.21.11+6b3cbdd
worker-2   Ready    worker   6d      v1.21.11+6b3cbdd
worker-3   Ready    worker   6d      v1.21.11+6b3cbdd
worker-4   Ready    worker   6d      v1.21.11+6b3cbdd
worker-5   Ready    worker   6d      v1.21.11+6b3cbdd
# oc get mcp
NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
master   rendered-master-70f5548c06f39a4b28212587ceb063bc   True      False      False      3              3                   3                     0                      6d
worker   rendered-worker-5bd7fe1a029cd154492507193689b559   False     True       False      9              4                   4                     0                      6d
# oc get nodes
NAME       STATUS   ROLES    AGE     VERSION
infra-0    Ready    worker   6d      v1.21.11+6b3cbdd
infra-1    Ready    worker   6d      v1.21.11+6b3cbdd
infra-2    Ready    worker   6d      v1.21.11+6b3cbdd
master-0   Ready    master   6d      v1.21.11+6b3cbdd
master-1   Ready    master   6d      v1.21.11+6b3cbdd
master-2   Ready    master   6d      v1.21.11+6b3cbdd
worker-0   Ready    worker   6d      v1.21.11+6b3cbdd
worker-1   Ready    worker   5d23h   v1.21.11+6b3cbdd
worker-2   Ready    worker   6d      v1.21.11+6b3cbdd
worker-3   Ready    worker   6d      v1.21.11+6b3cbdd
worker-4   Ready    worker   6d      v1.21.11+6b3cbdd
worker-5   Ready    worker   6d      v1.21.11+6b3cbdd
# oc get mcp
NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
master   rendered-master-70f5548c06f39a4b28212587ceb063bc   True      False      False      3              3                   3                     0                      6d
worker   rendered-worker-5bd7fe1a029cd154492507193689b559   False     True       False      9              6                   6                     0                      6d
# oc get nodes
NAME       STATUS   ROLES    AGE     VERSION
infra-0    Ready    worker   6d      v1.21.11+6b3cbdd
infra-1    Ready    worker   6d      v1.21.11+6b3cbdd
infra-2    Ready    worker   6d      v1.21.11+6b3cbdd
master-0   Ready    master   6d      v1.21.11+6b3cbdd
master-1   Ready    master   6d      v1.21.11+6b3cbdd
master-2   Ready    master   6d      v1.21.11+6b3cbdd
worker-0   Ready    worker   6d      v1.21.11+6b3cbdd
worker-1   Ready    worker   5d23h   v1.21.11+6b3cbdd
worker-2   Ready    worker   6d      v1.21.11+6b3cbdd
worker-3   Ready    worker   6d      v1.21.11+6b3cbdd
worker-4   Ready    worker   6d      v1.21.11+6b3cbdd
worker-5   Ready    worker   6d      v1.21.11+6b3cbdd
# oc get mcp
NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
master   rendered-master-70f5548c06f39a4b28212587ceb063bc   True      False      False      3              3                   3                     0                      6d
worker   rendered-worker-41212b91c87e872023b4b58c7f876d82   True      False      False      9              9                   9                     0                      6d

oc get mcpの出力でUPDATINGFALSEになった後、各ノードにログインすると、OCP4.6の場合と同様に /var/lib/kubelet/config.json に cp.icr.io の情報が適用されていることを確認できました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?