SUSE Edgeドキュメント|SUSE Telco Cloudのドキュメント|ライフサイクルのアクション

44 ライフサイクルのアクション

このセクションでは、SUSE Telco Cloudを介してデプロイされたクラスタのライフサイクル管理アクションについて説明します。

44.1 ロードバランサの除外

ノードがドレインを必要とするライフサイクルアクションは多数あります。ドレインプロセス中に、すべてのPodがクラスタ内の他のノードに移動されます。ドレインプロセスが完了すると、そのノードはサービスをホストしなくなるため、トラフィックがルーティングされなくなります。MetalLBなどのロードバランサには、ノードにラベルを適用することでこの状態を認識させることができます。

node.kubernetes.io/exclude-from-external-load-balancers: "true"

詳細については、 Kubernetesのドキュメントを参照してください。

クラスタ内のすべてのノードのラベルを確認するには、次のコマンドを実行します。

kubectl get nodes -o json | jq -r '.items[].metadata | .name, .labels'

ダウンストリームクラスタのアップグレードの場合には、管理クラスタ上のRKE2ControlPlaneにアノテーションを付けることでこれを自動化できます。

rke2.controlplane.cluster.x-k8s.io/load-balancer-exclusion="true"

これにより、管理クラスタ上のすべてのマシンオブジェクトに、そのRKE2ControlPlane用のアノテーションが直ちに作成されます。

pre-drain.delete.hook.machine.cluster.x-k8s.io/rke2-lb-exclusion: ""

マシンオブジェクトにこのアノテーションを付けると、ドレイン用にスケジュールされたダウンストリームクラスタ上のノードには、ドレインプロセスの開始前に上記のノードラベルが付与されます。このラベルはノードが再度利用可能になり、準備が完了すると削除されます。

44.2 管理クラスタのアップグレード

管理クラスタのアップグレードについては、Day 2管理クラスタ(第36章 「管理クラスタ)のドキュメントを参照してください。

44.3 ダウンストリームクラスタのアップグレード

ダウンストリームクラスタをアップグレードするには、複数のコンポーネントを更新する必要があります。次の各セクションでは、各コンポーネントのアップグレードプロセスについて説明します。

オペレーティングシステムのアップグレード

このプロセスでは、次の参照資料(43.2項 「接続シナリオのダウンストリームクラスタイメージの準備」)を確認して、新しいオペレーティングシステムバージョンで新しいイメージを構築します。EIBで生成されたこの新しいイメージにより、次のプロビジョニングフェーズでは、指定した新しいオペレーティングシステムバージョンが使用されます。次の手順では、この新しいイメージを使用してノードをアップグレードします。

RKE2クラスタのアップグレード

自動化されたワークフローを使用してRKE2クラスタをアップグレードするために必要な変更は次のとおりです。

apiVersion: controlplane.cluster.x-k8s.io/v1beta1
kind: RKE2ControlPlane
metadata:
  name: single-node-cluster
  namespace: default
spec:
  infrastructureRef:
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: Metal3MachineTemplate
    name: single-node-cluster-controlplane
  version: ${RKE2_NEW_VERSION}
  replicas: 1
  rolloutStrategy:
    type: "RollingUpdate"
    rollingUpdate:
      maxSurge: 0
  serverConfig:
    cni: cilium
  rolloutStrategy:
    rollingUpdate:
      maxSurge: 0
  registrationMethod: "control-plane-endpoint"
  agentConfig:
    format: ignition
    additionalUserData:
      config: |
        variant: fcos
        version: 1.4.0
        systemd:
          units:
            - name: rke2-preinstall.service
              enabled: true
              contents: |
                [Unit]
                Description=rke2-preinstall
                Wants=network-online.target
                Before=rke2-install.service
                ConditionPathExists=!/run/cluster-api/bootstrap-success.complete
                [Service]
                Type=oneshot
                User=root
                ExecStartPre=/bin/sh -c "mount -L config-2 /mnt"
                ExecStart=/bin/sh -c "sed -i \"s/BAREMETALHOST_UUID/$(jq -r .uuid /mnt/openstack/latest/meta_data.json)/\" /etc/rancher/rke2/config.yaml"
                ExecStart=/bin/sh -c "echo \"node-name: $(jq -r .name /mnt/openstack/latest/meta_data.json)\" >> /etc/rancher/rke2/config.yaml"
                ExecStartPost=/bin/sh -c "umount /mnt"
                [Install]
                WantedBy=multi-user.target
    kubelet:
      extraArgs:
        - provider-id=metal3://BAREMETALHOST_UUID
    nodeName: "localhost.localdomain"
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: Metal3MachineTemplate
metadata:
  name: single-node-cluster-controlplane
  namespace: default
spec:
  nodeReuse: True
  template:
    spec:
      automatedCleaningMode: metadata
      dataTemplate:
        name: single-node-cluster-controlplane-template
      hostSelector:
        matchLabels:
          cluster-role: control-plane
      image:
        checksum: http://imagecache.local:8080/${NEW_IMAGE_GENERATED}.sha256
        checksumType: sha256
        format: raw
        url: http://imagecache.local:8080/${NEW_IMAGE_GENERATED}.raw

capi-provisioning-example.yamlファイルを適用する前に、外部ロードバランサ(例: MetalLB)に対してノードがドレイン中であることを通知し、この状態のノードにトラフィックがルーティングされないようにすることが常に推奨されます。44.1項 「ロードバランサの除外」セクションで説明しているように、管理クラスタ上のRKE2ControlPlaneにアノテーションを付けることでこれを自動化できます。この例では、multinode-clusterというRKE2ControlPlaneオブジェクトにアノテーションが付けられています。

kubectl annotate  RKE2ControlPlane/multinode-cluster  rke2.controlplane.cluster.x-k8s.io/load-balancer-exclusion="true"

マシンオブジェクトにアノテーションが付けられていることを確認します。

pre-drain.delete.hook.machine.cluster.x-k8s.io/rke2-lb-exclusion: ""

すべてのマシンオブジェクトのアノテーションを取得します。

kubectl get machines -o json | jq -r '.items[].metadata | .name, .annotations'
注記
注記

これらのアノテーションがないと、ロードバランサがドレインされているノードを認識できないため、サービスの応答時間が長くなる可能性があります。

これらの変更を行った後、次にコマンドを使用してcapi-provisioning-example.yamlファイルをクラスタに適用できます。

kubectl apply -f capi-provisioning-example.yaml