ノート:

Oracle Cloudネイティブ環境でのKubernetesクラスタのスケーリング

イントロダクション

このチュートリアルでは、Oracle Cloud Native Environmentで既存のKubernetesクラスタをスケーリングする方法を示します。

Kubernetesクラスタをスケール・アップするには、ノードを追加することを意味します。同様に、ノードを削除することでスケール・ダウンが発生します。ノードは、コントロール・プレーン・ノードまたはワーカー・ノードのいずれかです。Oracleでは、クラスタを同時にスケール・アップおよびスケール・ダウンしないことをお薦めします。かわりに、2つの個別のコマンドでスケール・アップを実行してからスケール・ダウンします。

ス分割ブレイン・シナリオを回避し、定足数を維持するために、Kubernetesクラスタのコントロール・プレーンまたはワーカー・ノードを奇数でスケーリングすることをお薦めします。たとえば、3、5または7のコントロール・プレーン・ノードまたはワーカー・ノードにより、クラスタの信頼性が保証されます。

このチュートリアルでは、Oracle Cloud Native Environmentで実行されている既存の高可用性Kubernetesクラスタを使用し、3つのモジュールをデプロイします:

開始デプロイメントは、次のもので構成されます。

これはラボに基づいて構築されます。

目的

このチュートリアル/ラボでは、2つの新しいコントロール・プレーン・ノードと2つの新しいワーカー・ノードを構成してクラスタに追加する手順を示します。チュートリアル/ラボでは、同じノードをクラスタから削除してクラスタをスケール・ダウンする方法を示します。

このシナリオでは、X.509プライベートCA証明書を使用してノード間の通信を保護します。HashiCorp Vaultシークレット・マネージャを使用するか、信頼できる認証局(CA)によって署名された独自の証明書を使用して、証明書を管理およびデプロイする他の方法があります。これらの他のメソッドは、このチュートリアルには含まれていません。

前提条件

ノート: 無料のラボ環境を使用する場合、これらの前提条件が開始ポイントとして提供されます。

Oracle Cloud Native Environmentで実行する高可用性Kubernetesクラスタの要件に加えて、次のものが必要です:

演習環境の設定

ノート: 無料のラボ環境を使用する場合、接続およびその他の使用手順については、Oracle Linux Lab Basicsを参照してください。

情報: 無料のラボ環境では、環境を作成する準備ができて、指定されたノードにOracle Cloud Native Environmentをデプロイします。このデプロイメントは、起動後に終了するまでに約20分から25分かかります。そのため、この実行中はステップを離れてから、演習を完了します。

特に明記しないかぎり、無料の演習環境内のすべてのステップはocne- operatorノードから実行でき、端末ウィンドウを開いてノードに接続することから開始することをお薦めします。Oracle Cloud Native Environmentのマルチノード・インストールでは、kubectlコマンドは、演算子、コントロール・プレーン・ノードまたはkubectl用に構成された別のシステムで実行されます。

  1. 端末を開き、sshを使用して ocne- operatorシステムに接続します。

    ssh oracle@<ip_address_of_ol_node>
    

Kubernetesモジュールのインストール

重要特に明記されていないかぎり、すべての操作は ocne- operatorノードから実行されます。

無料のラボ環境では、環境およびモジュール構成の準備など、デプロイメント中に高可用性Oracle Cloud Native Environmentインストールを作成します。

  1. myenvironment.yamlファイルを表示します。

    cat ~/myenvironment.yaml
    

    無料のラボ環境のデプロイメントでは、クラスタの作成時に3つのコントロール・プレーン・ノードと5つのワーカー・ノードを使用します。

    出力例:

    [oracle@ocne-operator ~]$ cat ~/myenvironment.yaml
    environments:
      - environment-name: myenvironment
        globals:
          api-server: 127.0.0.1:8091
          secret-manager-type: file
          olcne-ca-path: /etc/olcne/configs/certificates/production/ca.cert
          olcne-node-cert-path: /etc/olcne/configs/certificates/production/node.cert
          olcne-node-key-path:  /etc/olcne/configs/certificates/production/node.key
        modules:
          - module: kubernetes
            name: mycluster
            args:
              container-registry: container-registry.oracle.com/olcne
              load-balancer: 10.0.0.168:6443
              master-nodes:
                - ocne-control01.lv.vcnf998d566.oraclevcn.com:8090
                - ocne-control02.lv.vcnf998d566.oraclevcn.com:8090
                - ocne-control03.lv.vcnf998d566.oraclevcn.com:8090
              worker-nodes:
                - ocne-worker01.lv.vcnf998d566.oraclevcn.com:8090
                - ocne-worker02.lv.vcnf998d566.oraclevcn.com:8090
                - ocne-worker03.lv.vcnf998d566.oraclevcn.com:8090
                - ocne-worker04.lv.vcnf998d566.oraclevcn.com:8090
                - ocne-worker05.lv.vcnf998d566.oraclevcn.com:8090
              selinux: enforcing
              restrict-service-externalip: true
              restrict-service-externalip-ca-cert: /etc/olcne/configs/certificates/restrict_external_ip/production/ca.cert
              restrict-service-externalip-tls-cert: /etc/olcne/configs/certificates/restrict_external_ip/production/node.cert
              restrict-service-externalip-tls-key: /etc/olcne/configs/certificates/restrict_external_ip/production/node.key
          - module: helm
            name: myhelm
            args:
              helm-kubernetes-module: mycluster      
          - module: oci-ccm
            name: myoci
            oci-ccm-helm-module: myhelm
            oci-use-instance-principals: true
            oci-compartment: ocid1.compartment.oc1..aaaaaaaau2g2k23u6mp3t43ky3i4ky7jpyeiqcdcobpbcb7z6vjjlrdnuufq
            oci-vcn: ocid1.vcn.oc1.eu-frankfurt-1.amaaaaaaw6qx2pia2xkfmnnknpk3jll6emb76gtcza3ttbqqofxmwjb45rka
            oci-lb-subnet1: ocid1.subnet.oc1.eu-frankfurt-1.aaaaaaaawfjs5zrb6wdmg43522a4l5aak5zr6vvkaaa6xogttha2ufsip7fq         
    

    ノードのFQDNのドメイン部分は、無料のラボ環境の各デプロイメントで一意になります。

  2. Kubernetesモジュールをインストールします。

    olcnectl module install --config-file myenvironment.yaml
    

    ノート: ノードへのKubernetesのデプロイメントが完了するまでに20分から25分かかります。

    出力例:

    [oracle@ocne-operator ~]$ olcnectl module install --config-file myenvironment.yaml
    Modules installed successfully.
    Modules installed successfully.
    Modules installed successfully.
    

    3つのモジュールが正常にインストールされたレスポンスがあるのはなぜですか。この例で使用されているmyenvironment.yamlファイルでは、次の3つのモジュールが定義されているためです。

    • - module: kubernetes
    • - module: helm
    • - module: oci-ccm

    これを理解しておくことが重要です。これらのステップの後半では、レスポンスが3回(myenvironment.yamlファイルで定義されているモジュールごとに1回)返されるためです。

  3. Kubernetesモジュールのデプロイメントを確認します。

    olcnectl module instances --config-file myenvironment.yaml
    

    出力例:

    [oracle@ocne-operator ~]$ olcnectl module instances --config-file myenvironment.yaml
    INSTANCE                                        	MODULE    	STATE    
    mycluster                                       	kubernetes	installed
    myhelm                                          	helm      	installed
    myoci                                           	oci-ccm   	installed
    ocne-control01.lv.vcnf998d566.oraclevcn.com:8090	node      	installed
    ocne-control02.lv.vcnf998d566.oraclevcn.com:8090	node      	installed
    ocne-control03.lv.vcnf998d566.oraclevcn.com:8090	node      	installed
    ocne-worker01.lv.vcnf998d566.oraclevcn.com:8090 	node      	installed
    ocne-worker02.lv.vcnf998d566.oraclevcn.com:8090 	node      	installed
    ocne-worker03.lv.vcnf998d566.oraclevcn.com:8090 	node      	installed
    ocne-worker04.lv.vcnf998d566.oraclevcn.com:8090 	node      	installed
    ocne-worker05.lv.vcnf998d566.oraclevcn.com:8090 	node      	installed
    

kubectlの設定

  1. kubectlコマンドを設定します。

    1. いずれかのコントロール・プレーン・ノードから構成ファイルをコピーします。

      mkdir -p $HOME/.kube
      ssh -o StrictHostKeyChecking=no 10.0.0.150 "sudo cat /etc/kubernetes/admin.conf" > $HOME/.kube/config
      

      出力例:

      [oracle@ocne-operator ~]$ mkdir -p $HOME/.kube
      [oracle@ocne-operator ~]$ ssh -o StrictHostKeyChecking=no 10.0.0.150 "sudo cat /etc/kubernetes/admin.conf" > $HOME/.kube/config
      Warning: Permanently added '10.0.0.150' (ECDSA) to the list of known hosts.
      
    2. kubectlコマンドで使用する構成をエクスポートします。

      sudo chown $(id -u):$(id -g) $HOME/.kube/config
      export KUBECONFIG=$HOME/.kube/config
      echo 'export KUBECONFIG=$HOME/.kube/config' >> $HOME/.bashrc
      
  2. kubectlが機能することを検証します。

    kubectl get nodes
    

    出力例:

    [oracle@ocne-operator ~]$ kubectl get nodes
    NAME             STATUS   ROLES                  AGE   VERSION
    ocne-control01   Ready    control-plane,master   17m   v1.23.7+1.el8
    ocne-control02   Ready    control-plane,master   16m   v1.23.7+1.el8
    ocne-control03   Ready    control-plane,master   15m   v1.23.7+1.el8
    ocne-worker01    Ready    <none>                 16m   v1.23.7+1.el8
    ocne-worker02    Ready    <none>                 15m   v1.23.7+1.el8
    ocne-worker03    Ready    <none>                 14m   v1.23.7+1.el8
    ocne-worker04    Ready    <none>                 15m   v1.23.7+1.el8
    ocne-worker05    Ready    <none>                 15m   v1.23.7+1.el8
    [oracle@ocne-operator ~]$
    

Oracle Cloud Infrastructure Cloud Controller Managerモジュールの準備完了の確認

続行する前に、Oracle Cloud Infrastructure Cloud Controller ManagerモジュールがOCI APIとの通信を確立するのを待つことが重要です。Oracle Cloud Infrastructure Cloud Controller Managerモジュールは、ブロック・ストレージのアタッチなどの機能を処理する各ノード上でポッドを実行します。このコントローラは、インストール後、この専用ポッドがOCI APIとの初期化、実行および通信を確認するまで、ポッドがスケジュールされないようにします。この通信が正常に確立されるまで、続行しようとすると、Kubernetesによるクラウド・ストレージまたはロード・バランサの使用が成功しなくなる可能性があります。

  1. コンポーネントのoci-cloud-controller-managerポッドのステータスを取得します。

    kubectl -n kube-system get pods -l component=oci-cloud-controller-manager
    

    出力例:

    [[oracle@ocne-operator ~]$ kubectl -n kube-system get pods -l component=oci-cloud-controller-manager
    NAME                                 READY   STATUS    RESTARTS      AGE
    oci-cloud-controller-manager-9d9gh   1/1     Running   1 (48m ago)   50m
    oci-cloud-controller-manager-jqzs6   1/1     Running   0             50m
    oci-cloud-controller-manager-xfm9w   1/1     Running   0             50m
    
  2. ロールcsi-ociポッドのステータスを取得します。

    kubectl -n kube-system get pods -l role=csi-oci
    

    出力例:

    [[oracle@ocne-operator ~]$ kubectl -n kube-system get pods -l role=csi-oci
    NAME                                  READY   STATUS             RESTARTS      AGE
    csi-oci-controller-7fcbddd746-2hb5c   4/4     Running            2 (50m ago)   51m
    csi-oci-node-7jd6t                    3/3     Running            0             51m
    csi-oci-node-fc5x5                    3/3     Running            0             51m
    csi-oci-node-jq8sm                    3/3     Running            0             51m
    csi-oci-node-jqkvl                    3/3     Running            0             51m
    csi-oci-node-jwq8g                    3/3     Running            0             51m
    csi-oci-node-jzxqt                    3/3     Running            0             51m
    csi-oci-node-rmmmb                    3/3     Running            0             51m
    csi-oci-node-zc287                    1/3     Running            0             51m
    

ノート: 続行する前に、これらの両方のコマンドでSTATUSRunningと表示されるまで待ちます。

READY列の値に開始済のコンテナがすべて表示されず、STATUS列の下にあるコンテナが15分後にRunningとして表示されない場合は、ラボを再起動してください。

(オプション)新しいKubernetesノードの設定

ノート: この項のステップは、演習の初期デプロイメント中にすでに完了しているため、無料の演習環境では必要ありません。次のセクションに進んで、そこから続行してください。

スケール・アップ(ノードの追加)する場合、新しいノードでは、このチュートリアルのPrerequisitesセクションにリストされているすべての前提条件を満たす必要があります。

このチュートリアル/ラボでは、ノードocne-control04およびocne-control05は新しいコントロール・プレーン・ノードであり、ノードocne-worker06およびocne-worker07は新しいワーカー・ノードです。前提条件の他に、これらの新しいノードでは、Oracle Cloud Native Environment Platform Agentをインストールして有効にする必要があります。

  1. Platform Agentをインストールして有効にします。

    sudo dnf install olcne-agent olcne-utils
    sudo systemctl enable olcne-agent.service
    
  2. プロキシ・サーバーを使用する場合は、CRI- Oで構成します。Kubernetesノードごとに、CRI- Oシステム構成ディレクトリを作成します。そのディレクトリにproxy.confというファイルを作成して、プロキシ・サーバーの情報を追加します。

    sudo mkdir /etc/systemd/system/crio.service.d
    sudo vi /etc/systemd/system/crio.service.d/proxy.conf
    
  3. proxy.confファイルの例を使用して、環境内のプロキシ値に適切なプロキシ値を置き換えます。

    [Service]
    Environment="HTTP_PROXY=proxy.example.com:80"
    Environment="HTTPS_PROXY=proxy.example.com:80"
    Environment="NO_PROXY=.example.com,192.0.2.*"
    
  4. dockerまたはcontainerdサービスが実行中の場合は、それらを停止してから無効化してください。

    sudo systemctl disable --now docker.service
    sudo systemctl disable --now containerd.service
    

X.509プライベートCA証明書の設定

新しいコントロール・プレーン・ノードおよびワーカー・ノードのX.509プライベートCA証明書を設定します。

  1. 新規ノードのリストを作成します。

    VAR1=$(hostname -d)
    for NODE in 'ocne-control04' 'ocne-control05' 'ocne-worker06' 'ocne-worker07'; do VAR2+="${NODE}.$VAR1,"; done
    VAR2=${VAR2%,}
    

    指定されたbashスクリプトは、オペレータ・ノードのドメイン名を取得し、スケール・アップ・プロシージャでクラスタに追加するノードのカンマ区切りリストを作成します。

  2. 新しいノードのプライベートCAと証明書のセットを生成します。

    --byo-CA-certオプションを使用して既存のCA証明書の場所を指定し、--byo-CA-keyオプションを使用して既存のCAキーの場所を指定します。--nodesオプションを使用して、新しいコントロール・プレーン・ノードおよびワーカー・ノードのFQDNを指定します。

    cd /etc/olcne
    sudo ./gen-certs-helper.sh \
    --cert-dir /etc/olcne/configs/certificates/ \
    --byo-ca-cert /etc/olcne/configs/certificates/production/ca.cert \
    --byo-ca-key /etc/olcne/configs/certificates/production/ca.key \
    --nodes $VAR2
    

    出力例:

    [oracle@ocne-operator ~]$ cd /etc/olcne
    [oracle@ocne-operator olcne]$ sudo ./gen-certs-helper.sh \
    > --cert-dir /etc/olcne/configs/certificates/ \
    > --byo-ca-cert /etc/olcne/configs/certificates/production/ca.cert \
    > --byo-ca-key /etc/olcne/configs/certificates/production/ca.key \
    > --nodes $VAR2
    [INFO] Generating certs for ocne-control04.lv.vcnf998d566.oraclevcn.com
    Generating RSA private key, 2048 bit long modulus (2 primes)
    .............................+++++
    ....................+++++
    e is 65537 (0x010001)
    Signature ok
    subject=C = US, ST = North Carolina, L = Whynot, O = your-company, OU = private cloud, CN = example.com
    Getting CA Private Key
    [INFO] Generating certs for ocne-control05.lv.vcnf998d566.oraclevcn.com
    Generating RSA private key, 2048 bit long modulus (2 primes)
    ...+++++
    ...........................................................+++++
    e is 65537 (0x010001)
    Signature ok
    subject=C = US, ST = North Carolina, L = Whynot, O = your-company, OU = private cloud, CN = example.com
    Getting CA Private Key
    [INFO] Generating certs for ocne-worker06.lv.vcnf998d566.oraclevcn.com
    Generating RSA private key, 2048 bit long modulus (2 primes)
    ......+++++
    .......................+++++
    e is 65537 (0x010001)
    Signature ok
    subject=C = US, ST = North Carolina, L = Whynot, O = your-company, OU = private cloud, CN = example.com
    Getting CA Private Key
    [INFO] Generating certs for ocne-worker07.lv.vcnf998d566.oraclevcn.com
    Generating RSA private key, 2048 bit long modulus (2 primes)
    ....................................................................................+++++
    .................................+++++
    e is 65537 (0x010001)
    Signature ok
    subject=C = US, ST = North Carolina, L = Whynot, O = your-company, OU = private cloud, CN = example.com
    Getting CA Private Key
    -----------------------------------------------------------
    Script To Transfer Certs: /etc/olcne/configs/certificates/olcne-tranfer-certs.sh
    -----------------------------------------------------------
    [SUCCESS] Generated certs and file transfer script!
    [INFO]    CA Cert: /etc/olcne/configs/certificates/production/ca.key
    [INFO]    CA Key:  /etc/olcne/configs/certificates/production/ca.cert
    [WARNING] The CA Key is the only way to generate more certificates, ensure it is stored in long term storage
    [USER STEP #1]    Please ensure you have ssh access from this machine to: ocne-control04.lv.vcnf998d566.oraclevcn.com,ocne-control05.lv.vcnf998d566.oraclevcn.com,ocne-worker06.lv.vcnf998d566.oraclevcn.com,ocne-worker07.lv.vcnf998d566.oraclevcn.com
    

証明書の転送

新しく作成した証明書をオペレータノードからすべての新しいノードに転送します。

  1. 指定された転送スクリプトのユーザー詳細を更新します。

    sudo sed -i 's/USER=opc/USER=oracle/g' configs/certificates/olcne-tranfer-certs.sh
    

    ノート: スクリプトのデフォルト・ユーザーはopcであるため、チュートリアルではこのステップが必要です。このチュートリアル環境と無料演習環境の両方で、ユーザーoracleを使用して製品をインストールするため、スクリプト内のUSER変数を適宜更新してください。

  2. 証明書作成スクリプトによって生成された各node.keyの権限を更新します。

    sudo chmod 644 /etc/olcne/configs/certificates/tmp-olcne/ocne-control*/node.key
    sudo chmod 644 /etc/olcne/configs/certificates/tmp-olcne/ocne-operator*/node.key
    sudo chmod 644 /etc/olcne/configs/certificates/tmp-olcne/ocne-worker*/node.key
    
  3. 新しい各ノードに証明書を転送します。

    ノートこのステップでは、ノード間にパスワードなしのSSHを構成する必要があります。この構成はこのチュートリアルの範囲外ですが、無料のラボ環境で事前構成されています。

    bash -ex /etc/olcne/configs/certificates/olcne-tranfer-certs.sh
    

証明書を使用するためのプラットフォームエージェントの構成

前のステップでコピーした証明書を使用するように、新しい各ノードでプラットフォーム・エージェントを構成します。オペレータ・ノードからこのタスクを実行するには、sshでコマンドを実行します。

  1. ocne-control04ノードを構成します。

    ssh -o StrictHostKeyChecking=no ocne-control04 'sudo /etc/olcne/bootstrap-olcne.sh \
    --secret-manager-type file \
    --olcne-node-cert-path /etc/olcne/configs/certificates/production/node.cert \
    --olcne-ca-path /etc/olcne/configs/certificates/production/ca.cert \
    --olcne-node-key-path /etc/olcne/configs/certificates/production/node.key \
    --olcne-component agent'
    

    出力例:

    [oracle@ocne-operator olcne]$ ssh -o StrictHostKeyChecking=no ocne-control04 'sudo /etc/olcne/bootstrap-olcne.sh \
    > --secret-manager-type file \
    > --olcne-node-cert-path /etc/olcne/configs/certificates/production/node.cert \
    > --olcne-ca-path /etc/olcne/configs/certificates/production/ca.cert \
    > --olcne-node-key-path /etc/olcne/configs/certificates/production/node.key \
    > --olcne-component agent'
    Warning: Permanently added 'ocne-control04,10.0.0.153' (ECDSA) to the list of known hosts.
    ��� olcne-agent.service - Agent for Oracle Linux Cloud Native Environments
       Loaded: loaded (/usr/lib/systemd/system/olcne-agent.service; enabled; vendor preset: disabled)
      Drop-In: /etc/systemd/system/olcne-agent.service.d
               ������10-auth.conf
       Active: active (running) since Tue 2022-08-30 15:29:37 GMT; 2s ago
     Main PID: 152809 (olcne-agent)
        Tasks: 8 (limit: 202294)
       Memory: 11.1M
       CGroup: /system.slice/olcne-agent.service
               ������152809 /usr/libexec/olcne-agent --secret-manager-type file --olcne-ca-path /etc/olcne/configs/certificates/production/ca.cert --olcne-node-cert-path /etc/olcne/configs/certificates/production/node.cert --olcne-node-key-path /etc/olcne/configs/certificates/production/node.key
    
    Aug 30 15:29:37 ocne-control04 systemd[1]: Started Agent for Oracle Linux Cloud Native Environments.
    Aug 30 15:29:37 ocne-control04 olcne-agent[152809]: time=30/08/22 15:29:37 level=info msg=Started server on[::]:8090
    
  2. ocne-control05ノードを構成します。

    ssh -o StrictHostKeyChecking=no ocne-control05 'sudo /etc/olcne/bootstrap-olcne.sh \
    --secret-manager-type file \
    --olcne-node-cert-path /etc/olcne/configs/certificates/production/node.cert \
    --olcne-ca-path /etc/olcne/configs/certificates/production/ca.cert \
    --olcne-node-key-path /etc/olcne/configs/certificates/production/node.key \
    --olcne-component agent'
    

    出力例:

    [oracle@ocne-operator olcne]$ ssh -o StrictHostKeyChecking=no ocne-control05 'sudo /etc/olcne/bootstrap-olcne.sh \
    > --secret-manager-type file \
    > --olcne-node-cert-path /etc/olcne/configs/certificates/production/node.cert \
    > --olcne-ca-path /etc/olcne/configs/certificates/production/ca.cert \
    > --olcne-node-key-path /etc/olcne/configs/certificates/production/node.key \
    > --olcne-component agent'
    Warning: Permanently added 'ocne-control05,10.0.0.154' (ECDSA) to the list of known hosts.
    ��� olcne-agent.service - Agent for Oracle Linux Cloud Native Environments
      Loaded: loaded (/usr/lib/systemd/system/olcne-agent.service; enabled; vendor preset: disabled)
      Drop-In: /etc/systemd/system/olcne-agent.service.d
               ������10-auth.conf
       Active: active (running) since Tue 2022-08-30 15:34:13 GMT; 2s ago
     Main PID: 153413 (olcne-agent)
        Tasks: 7 (limit: 202294)
       Memory: 9.1M
       CGroup: /system.slice/olcne-agent.service
               ������153413 /usr/libexec/olcne-agent --secret-manager-type file --olcne-ca-path /etc/olcne/configs/certificates/production/ca.cert --olcne-node-cert-path /etc/olcne/configs/certificates/production/node.cert --olcne-node-key-path /etc/olcne/configs/certificates/production/node.key
    
    Aug 30 15:34:13 ocne-control05 systemd[1]: olcne-agent.service: Succeeded.
    Aug 30 15:34:13 ocne-control05 systemd[1]: Stopped Agent for Oracle Linux Cloud Native Environments.
    Aug 30 15:34:13 ocne-control05 systemd[1]: Started Agent for Oracle Linux Cloud Native Environments.
    Aug 30 15:34:13 ocne-control05 olcne-agent[153413]: time=30/08/22 15:34:13 level=info msg=Started server on[::]:8090
    
  3. ocne-worker06ノードを構成します。

    ssh -o StrictHostKeyChecking=no ocne-worker06 'sudo /etc/olcne/bootstrap-olcne.sh \
    --secret-manager-type file \
    --olcne-node-cert-path /etc/olcne/configs/certificates/production/node.cert \
    --olcne-ca-path /etc/olcne/configs/certificates/production/ca.cert \
    --olcne-node-key-path /etc/olcne/configs/certificates/production/node.key \
    --olcne-component agent'
    

    出力例:

    [oracle@ocne-operator olcne]$ ssh -o StrictHostKeyChecking=no ocne-worker06 'sudo /etc/olcne/bootstrap-olcne.sh \
    > --secret-manager-type file \
    > --olcne-node-cert-path /etc/olcne/configs/certificates/production/node.cert \
    > --olcne-ca-path /etc/olcne/configs/certificates/production/ca.cert \
    > --olcne-node-key-path /etc/olcne/configs/certificates/production/node.key \
    > --olcne-component agent'
    Warning: Permanently added 'ocne-worker06,10.0.0.165' (ECDSA) to the list of known hosts.
    ��� olcne-agent.service - Agent for Oracle Linux Cloud Native Environments
       Loaded: loaded (/usr/lib/systemd/system/olcne-agent.service; enabled; vendor preset: disabled)
      Drop-In: /etc/systemd/system/olcne-agent.service.d
               ������10-auth.conf
       Active: active (running) since Tue 2022-08-30 15:41:08 GMT; 2s ago
     Main PID: 153988 (olcne-agent)
        Tasks: 8 (limit: 202294)
       Memory: 5.2M
       CGroup: /system.slice/olcne-agent.service
               ������153988 /usr/libexec/olcne-agent --secret-manager-type file --olcne-ca-path /etc/olcne/configs/certificates/production/ca.cert --olcne-node-cert-path /etc/olcne/configs/certificates/production/node.cert --olcne-node-key-path /etc/olcne/configs/certificates/production/node.key
    
    Aug 30 15:41:08 ocne-worker06 systemd[1]: Started Agent for Oracle Linux Cloud Native Environments.
    Aug 30 15:41:08 ocne-worker06 olcne-agent[153988]: time=30/08/22 15:41:08 level=info msg=Started server on[::]:8090
    
  4. ocne-worker07ノードを構成します。

    ssh -o StrictHostKeyChecking=no ocne-worker07 'sudo /etc/olcne/bootstrap-olcne.sh \
    --secret-manager-type file \
    --olcne-node-cert-path /etc/olcne/configs/certificates/production/node.cert \
    --olcne-ca-path /etc/olcne/configs/certificates/production/ca.cert \
    --olcne-node-key-path /etc/olcne/configs/certificates/production/node.key \
    --olcne-component agent'
    

    出力例:

    [oracle@ocne-operator olcne]$ ssh -o StrictHostKeyChecking=no ocne-worker07 'sudo /etc/olcne/bootstrap-olcne.sh \
    > --secret-manager-type file \
    > --olcne-node-cert-path /etc/olcne/configs/certificates/production/node.cert \
    > --olcne-ca-path /etc/olcne/configs/certificates/production/ca.cert \
    > --olcne-node-key-path /etc/olcne/configs/certificates/production/node.key \
    > --olcne-component agent'
    Warning: Permanently added 'ocne-worker07,10.0.0.166' (ECDSA) to the list of known hosts.
    ��� olcne-agent.service - Agent for Oracle Linux Cloud Native Environments
       Loaded: loaded (/usr/lib/systemd/system/olcne-agent.service; enabled; vendor preset: disabled)
      Drop-In: /etc/systemd/system/olcne-agent.service.d
               ������10-auth.conf
       Active: active (running) since Tue 2022-08-30 15:43:23 GMT; 2s ago
     Main PID: 154734 (olcne-agent)
        Tasks: 8 (limit: 202294)
       Memory: 9.1M
       CGroup: /system.slice/olcne-agent.service
               ������154734 /usr/libexec/olcne-agent --secret-manager-type file --olcne-ca-path /etc/olcne/configs/certificates/production/ca.cert --olcne-node-cert-path /etc/olcne/configs/certificates/production/node.cert --olcne-node-key-path /etc/olcne/configs/certificates/production/node.key
    
    Aug 30 15:43:23 ocne-worker07 systemd[1]: olcne-agent.service: Succeeded.
    Aug 30 15:43:23 ocne-worker07 systemd[1]: Stopped Agent for Oracle Linux Cloud Native Environments.
    Aug 30 15:43:23 ocne-worker07 systemd[1]: Started Agent for Oracle Linux Cloud Native Environments.
    Aug 30 15:43:23 ocne-worker07 olcne-agent[154734]: time=30/08/22 15:43:23 level=info msg=Started server on[::]:8090
    

OCI Load Balancerへのアクセスおよびバックエンドの表示

Kubernetesコントロール・プレーンに複数のノードが定義されているため、Load Balancerが必要であるため、無料のラボ環境のデプロイ時に自動的に設定された構成を表示することは興味深いことです。これは、演習がHealthyステータスで作成されるとデプロイおよび構成される3つのノードと、次のステップでCriticalステータスとして追加される2つのノードを示します。

  1. ターミナルからLunaデスクトップに切り替える

  2. 「Luna Lab」アイコンを使用して、「Luna Lab」の詳細ページを開きます。

  3. 「OCIコンソール」リンクをクリックします。

    OCIリンク

  4. Oracle Cloudコンソールのログイン・ページが表示されます。

    コンソールログイン

  5. User NameおよびPasswordを入力します(「資格証明」セクションの「Luna Lab」タブにあります)。

    延期する

  6. ハンバーガ・メニュー(左上)をクリックし、「ネットワーキング」および「ロード・バランサ」をクリックします。

    ネットワークの選択

  7. 「ロード・バランサ」ページが表示されます。

    ロード・バランサ

  8. ドロップダウン・リストから、使用されているコンパートメントを見つけます。

    oci- compartment (OCIコンパートメント)

  9. 表にリストされているLoad Balancer (ocne- load- balancer)をクリックします。

    ロード・バランサ

  10. ページを下にスクロールし、(「リソース」セクションの左側にある)「バックエンド・セット」へのリンクをクリックします。

    バックエンド・セット

  11. 「バックエンド・セット」表が表示されます。「名前」列でocne- lb- backend- setというリンクをクリックします。

    ロード・バランサ

  12. 「バックエンド」へのリンク(「リソース」セクションの左側)をクリックします。

    バックエンド・リンク

  13. コントロール・プレーン・ノードを表すバックエンドが表示されます。

    ノート 2つのバックエンド・ノードがまだKubernetesコントロール・プレーン・クラスタの一部ではないため、クリティカル- 接続に失敗しました状態です。スケールアップ・ステップの完了後にバックエンド・ノードのステータスを再確認するため、このブラウザ・タブは開いたままにしておきます。

    バックエンド・テーブル

Kubernetesノードの表示

クラスタ内で現在使用可能なKubernetesノードを確認します。3つのコントロール・プレーン・ノードと5つのワーカー・ノードがあることに注意してください。

  1. ノードがすべてREADYステータスであることを確認します。

    kubectl get nodes
    

    出力例:

    [oracle@ocne-operator olcne]$ kubectl get nodes
    NAME             STATUS   ROLES                  AGE     VERSION
    ocne-control01   Ready    control-plane,master   5h15m   v1.23.7+1.el8
    ocne-control02   Ready    control-plane,master   5h14m   v1.23.7+1.el8
    ocne-control03   Ready    control-plane,master   5h13m   v1.23.7+1.el8
    ocne-worker01    Ready    <none>                 5h14m   v1.23.7+1.el8
    ocne-worker02    Ready    <none>                 5h13m   v1.23.7+1.el8
    ocne-worker03    Ready    <none>                 5h12m   v1.23.7+1.el8
    ocne-worker04    Ready    <none>                 5h13m   v1.23.7+1.el8
    ocne-worker05    Ready    <none>                 5h14m   v1.23.7+1.el8
    

デプロイメント構成ファイルへのコントロール・プレーン・ノードおよびワーカー・ノードの追加

クラスタに追加するすべてのコントロール・プレーン・ノードおよびワーカー・ノードに、完全修飾ドメイン名(FQDN)およびプラットフォーム・エージェント・アクセス・ポート(8090)を追加します。

YAMLデプロイメント構成ファイルを編集して、新しいクラスタ・ノードを含めます。master-nodesセクションの下にコントロール・プレーン・ノードを追加し、worker-nodeセクションにワーカー・ノードを追加します。

このチュートリアルの構成ファイルのファイル名はmyenvironment.yamlで、現在、3つのコントロール・プレーンと5つのワーカー・ノードが含まれています。

  1. 現在の環境で3つのコントロール・プレーン・ノードと5つのワーカー・ノードが使用されていることを確認します。

    cat ~/myenvironment.yaml
    

    出力例:

    ...
              master-nodes:
                - ocne-control01.lv.vcneea798df.oraclevcn.com:8090
                - ocne-control02.lv.vcneea798df.oraclevcn.com:8090
                - ocne-control03.lv.vcneea798df.oraclevcn.com:8090
              worker-nodes:
                - ocne-worker01.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker02.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker03.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker04.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker05.lv.vcneea798df.oraclevcn.com:8090
    ...
    
  2. 新しいコントロール・プレーン・ノードおよびワーカー・ノードをmyenvironment.yamlファイルに追加します。

    cd ~
    sed -i '19 i \            - ocne-control04.'"$(hostname -d)"':8090' ~/myenvironment.yaml
    sed -i '20 i \            - ocne-control05.'"$(hostname -d)"':8090' ~/myenvironment.yaml
    sed -i '27 i \            - ocne-worker06.'"$(hostname -d)"':8090' ~/myenvironment.yaml
    sed -i '28 i \            - ocne-worker07.'"$(hostname -d)"':8090' ~/myenvironment.yaml
    
  3. コントロール・プレーンおよびワーカー・ノードがmyenvironment.yamlファイルに追加されていることを確認します。

    cat ~/myenvironment.yaml
    

    抜粋例:

    ...
              master-nodes:
                - ocne-control01.lv.vcneea798df.oraclevcn.com:8090
                - ocne-control02.lv.vcneea798df.oraclevcn.com:8090
                - ocne-control03.lv.vcneea798df.oraclevcn.com:8090
                - ocne-control04.lv.vcneea798df.oraclevcn.com:8090
                - ocne-control05.lv.vcneea798df.oraclevcn.com:8090
              worker-nodes:
                - ocne-worker01.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker02.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker03.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker04.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker05.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker06.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker07.lv.vcneea798df.oraclevcn.com:8090   
    ...
    

構成ファイルに、新しいコントロール・プレーン・ノード(ocne-control04およびocne-control05)および新しいワーカー・ノード(ocne-worker06およびocne-worker07)が含まれるようになりました。これは、スケールアップの完了後にクラスタ内に存在する必要があるコントロール・プレーン・ノードおよびワーカー・ノードのすべてを表します。

コントロール・プレーン・ノードおよびワーカー・ノードのスケール・アップ

  1. module updateコマンドを実行します。

    olcnectl module updateコマンドを --config-fileオプションとともに使用して、構成ファイルの場所を指定します。プラットフォームAPIサーバーは、構成ファイルをクラスタの状態で検証し、クラスタに追加する必要があるノードがさらに存在することを認識します。プロンプトが表示されたら、yと入力します。

    ノート: 各モジュールが更新される間、ターミナル・ウィンドウのプロンプトが遅延します。無料のラボ環境では、この遅延は最大10分から15分になる場合があります。

    olcnectl module update --config-file myenvironment.yaml
    

    出力例:

    [oracle@ocne-operator ~]$ olcnectl module update --config-file myenvironment.yaml
    ? [WARNING] Update will shift your workload and some pods will lose data if they rely on local storage. Do you want to continue? Yes
    Taking backup of modules before update
    Backup of modules succeeded.
    Updating modules
    Update successful
    ? [WARNING] Update will shift your workload and some pods will lose data if they rely on local storage. Do you want to continue? Yes
    Taking backup of modules before update
    Backup of modules succeeded.
    Updating modules
    Update successful
    ? [WARNING] Update will shift your workload and some pods will lose data if they rely on local storage. Do you want to continue? Yes
    Taking backup of modules before update
    Backup of modules succeeded.
    Updating modules
    Update successful
    
  2. (クラウド・コンソールで) Load Balancerのバックエンド・セットに5つの正常なバックエンド・ノードが表示されていることを確認します。

    lb- 健康

  3. 新しいコントロール・プレーンおよびワーカー・ノードがクラスタに追加されていることを確認します。

    kubectl get nodes
    

    出力例:

    [oracle@ocne-operator ~]$ kubectl get nodes
    NAME             STATUS   ROLES                  AGE   VERSION
    ocne-control01   Ready    control-plane,master   99m   v1.23.7+1.el8
    ocne-control02   Ready    control-plane,master   97m   v1.23.7+1.el8
    ocne-control03   Ready    control-plane,master   96m   v1.23.7+1.el8
    ocne-control04   Ready    control-plane,master   13m   v1.23.7+1.el8
    ocne-control05   Ready    control-plane,master   12m   v1.23.7+1.el8
    ocne-worker01    Ready    <none>                 99m   v1.23.7+1.el8
    ocne-worker02    Ready    <none>                 98m   v1.23.7+1.el8
    ocne-worker03    Ready    <none>                 98m   v1.23.7+1.el8
    ocne-worker04    Ready    <none>                 98m   v1.23.7+1.el8
    ocne-worker05    Ready    <none>                 98m   v1.23.7+1.el8
    ocne-worker06    Ready    <none>                 13m   v1.23.7+1.el8
    ocne-worker07    Ready    <none>                 13m   v1.23.7+1.el8
    

    新しいコントロール・プレーン・ノード(ocne-control04およびocne-control05)および新しいワーカー・ノード(ocne-work06およびocne-worker07)がクラスタに含まれていることに注意してください。それにより、スケール・アップ操作が機能したことを確認しました。

コントロール・プレーン・ノードのスケール・ダウン

コントロール・プレーン・ノードとワーカー・ノードを個別にスケーリングできることを示すため、このステップではコントロール・プレーン・ノードをスケール・ダウン(削除)します。

  1. 現在の環境で5つのコントロール・プレーン・ノードと7つのワーカー・ノードが使用されていることを確認します。

    cat ~/myenvironment.yaml
    

    出力例:

    ...
              master-nodes:
                - ocne-control01.lv.vcneea798df.oraclevcn.com:8090
                - ocne-control02.lv.vcneea798df.oraclevcn.com:8090
                - ocne-control03.lv.vcneea798df.oraclevcn.com:8090
                - ocne-control04.lv.vcneea798df.oraclevcn.com:8090
                - ocne-control05.lv.vcneea798df.oraclevcn.com:8090
              worker-nodes:
                - ocne-worker01.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker02.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker03.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker04.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker05.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker06.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker07.lv.vcneea798df.oraclevcn.com:8090
    ...
    
  2. クラスタを元の3つのコントロール・プレーンにスケール・ダウンするには、構成ファイルからocne-control04およびocne-control05コントロール・プレーン・ノードを削除します。

    sed -i '19d;20d' ~/myenvironment.yaml
    
  3. 構成ファイルに3つのコントロール・プレーン・ノードと7つのワーカー・ノードのみが含まれるようになったことを確認します。

    cat ~/myenvironment.yaml
    

    抜粋例:

    ...
              master-nodes:
                - ocne-control01.lv.vcneea798df.oraclevcn.com:8090
                - ocne-control02.lv.vcneea798df.oraclevcn.com:8090
                - ocne-control03.lv.vcneea798df.oraclevcn.com:8090
              worker-nodes:
                - ocne-worker01.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker02.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker03.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker04.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker05.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker06.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker07.lv.vcneea798df.oraclevcn.com:8090
    ...
    
  4. モジュール更新の警告メッセージを抑止します。

    force: trueディレクティブを構成ファイルに追加することで、モジュールの更新中に確認プロンプトを回避および抑制できます。このdirectiveは、定義されている各モジュールのname: <xxxx>ディレクティブの直下に配置する必要があります。

    cd ~
    sed -i '12 i \        force: true' ~/myenvironment.yaml
    sed -i '35 i \        force: true' ~/myenvironment.yaml
    sed -i '40 i \        force: true' ~/myenvironment.yaml
    
  5. 構成ファイルにforce: trueディレクティブが含まれていることを確認します。

    cat ~/myenvironment.yaml
    

    抜粋例:

    [oracle@ocne-operator ~]$ cat ~/myenvironment.yaml
    environments:
      - environment-name: myenvironment
        globals:
          api-server: 127.0.0.1:8091
          secret-manager-type: file
          olcne-ca-path: /etc/olcne/configs/certificates/production/ca.cert
          olcne-node-cert-path: /etc/olcne/configs/certificates/production/node.cert
          olcne-node-key-path:  /etc/olcne/configs/certificates/production/node.key
        modules:
          - module: kubernetes
            name: mycluster
            force: true
            args:
              container-registry: container-registry.oracle.com/olcne
              load-balancer: 10.0.0.18:6443
              master-nodes:
                - ocne-control01.lv.vcn1174e41d.oraclevcn.com:8090
                - ocne-control02.lv.vcn1174e41d.oraclevcn.com:8090
                - ocne-control03.lv.vcn1174e41d.oraclevcn.com:8090
              worker-nodes:
                - ocne-worker01.lv.vcn1174e41d.oraclevcn.com:8090
                - ocne-worker02.lv.vcn1174e41d.oraclevcn.com:8090
                - ocne-worker03.lv.vcn1174e41d.oraclevcn.com:8090
                - ocne-worker04.lv.vcn1174e41d.oraclevcn.com:8090
                - ocne-worker05.lv.vcn1174e41d.oraclevcn.com:8090
                - ocne-worker06.lv.vcneea798df.oraclevcn.com:8090
                - ocne-worker07.lv.vcneea798df.oraclevcn.com:8090
              selinux: enforcing
              restrict-service-externalip: true
              restrict-service-externalip-ca-cert: /etc/olcne/configs/certificates/restrict_external_ip/production/ca.cert
              restrict-service-externalip-tls-cert: /etc/olcne/configs/certificates/restrict_external_ip/production/node.cert
              restrict-service-externalip-tls-key: /etc/olcne/configs/certificates/restrict_external_ip/production/node.key
          - module: helm
            name: myhelm
            force: true
            args:
              helm-kubernetes-module: mycluster      
          - module: oci-ccm
            name: myoci
            force: true
            oci-ccm-helm-module: myhelm
            oci-use-instance-principals: true
            oci-compartment: ocid1.compartment.oc1..aaaaaaaanr6cysadeswwxc7sczdsrlamzhfh6scdyvuh4s4fmvecob6e2cha
            oci-vcn: ocid1.vcn.oc1.eu-frankfurt-1.amaaaaaag7acy3iat3duvrym376oax7nxdyqd56mqxtjaws47t4g7vqthgja
            oci-lb-subnet1: ocid1.subnet.oc1.eu-frankfurt-1.aaaaaaaa6rt6chugbkfhyjyl4exznpxrlvnus2bgkzcgm7fljfkqbxkva6ya         
    
  6. コマンドを実行してクラスタを更新し、ノードを削除します。

    注意: 完了には数分かかります。

    olcnectl module update --config-file myenvironment.yaml
    

    出力例:

    [oracle@ocne-operator ~]$ olcnectl module update --config-file myenvironment.yaml
    Taking backup of modules before update
    Backup of modules succeeded.
    Updating modules
    Update successful
    Taking backup of modules before update
    Backup of modules succeeded.
    Updating modules
    Update successful
    Taking backup of modules before update
    Backup of modules succeeded.
    Updating modules
    Update successful
    
  7. (クラウド・コンソールで) Load Balancerのバックエンド・セットに、3つの正常な(Health = 'OK')ノードと2つの異常な(Health = 'Critical - Connection failed')ノードが表示されていることを確認します。2つのノードがクリティカル・ステータスであると表示される理由は、Kubernetesクラスタから削除されているためです。

    lb- 健康

  8. プラットフォームAPIサーバーによってクラスタからコントロール・プレーン・ノードが削除されることを示します。コントロール・プレーン(ocne-control04およびocne-control05)ノードが削除されていることを確認します。

    kubectl get nodes
    

    出力例:

    [oracle@ocne-operator ~]$ kubectl get nodes
    NAME             STATUS   ROLES                  AGE    VERSION
    ocne-control01   Ready    control-plane,master   164m   v1.23.7+1.el8
    ocne-control02   Ready    control-plane,master   163m   v1.23.7+1.el8
    ocne-control03   Ready    control-plane,master   162m   v1.23.7+1.el8
    ocne-worker01    Ready    <none>                 164m   v1.23.7+1.el8
    ocne-worker02    Ready    <none>                 163m   v1.23.7+1.el8
    ocne-worker03    Ready    <none>                 164m   v1.23.7+1.el8
    ocne-worker04    Ready    <none>                 164m   v1.23.7+1.el8
    ocne-worker05    Ready    <none>                 164m   v1.23.7+1.el8
    ocne-worker06    Ready    <none>                 13m   v1.23.7+1.el8
    ocne-worker07    Ready    <none>                 13m   v1.23.7+1.el8
    

概要

これで、クラスタからKubernetesノードを追加および削除する方法の詳細を示すデモンストレーションが完了しました。この演習では、コントロール・プレーン・ノードとワーカー・ノードの両方を同時に更新することが実証されていますが、これは、Oracle Cloud Native Environment Kubernetesクラスタをスケール・アップまたはスケール・ダウンするための推奨アプローチではなく、本番環境では別々に実施される可能性が高いです。

詳細情報

その他の学習リソース

docs.oracle.com/learnの他のラボを調べるか、Oracle Learning YouTubeチャネルでさらに無料の学習コンテンツにアクセスします。さらに、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerにします。

製品ドキュメントは、Oracleヘルプ・センターを参照してください。