OCIでのARM KubernetesクラスタのプロビジョニングとNginx Webサイトのデプロイについて学習

OCIでARM Kubernetesクラスタをプロビジョニングし、Terraformスクリプトを使用してNginx Webサイトを手動または自動でデプロイできます。デプロイしたWebサイトのテストは、ローカル・ブラウザでWebサイトを起動する単純な問題です。

ARMプールを使用したOKEクラスタの手動プロビジョニング

Kubernetesクラスタを簡単にプロビジョニングして、OCIに異機種間プールのセットを作成し、OCIコンソールからNginx Webサイトをデプロイできます。この方法は、インフラストラクチャの自動化に精通しておらず、かわりにコンソールを使用する場合に役立ちます。

OCIコンソールで、次の手順を実行します。
  1. まず、OKEクラスタをプロビジョニングします:
    1. 「開発者サービス」セクションで、「Kubernetesクラスタ(OKE)」を選択します。

      「クラスタの作成」ページが表示されます。

    2. 「クイック作成」を選択して、必要なKubernetesクラスタ・インフラストラクチャを迅速かつ安全にプロビジョニングします。

      クイック作成ページが表示されます。

    3. ワーカー・ノードのARMシェイプ(VM.Standard.A1.Flex)を選択します。このシェイプにより、OCPUの数と割当て済メモリー量の両方を構成できるため、特定の要件に合せてリソースを微調整(および価格を均一に)できます。

      ノート:

      高可用性(HA)Webサイトでこのクラスタを構築する場合は、リソースを最小限に抑えます。ノード数は、必要に応じて後でスケール・アップできます。
    4. クラスタがプロビジョニングされたら、デプロイメント・ファイル内の特定のイメージにバインドできる専門マシンを含むプールを追加できます。たとえば、Webサイトによって実行されるMLタスク(コンテンツ推奨や顔認識バックエンドなど)に対してGPUバックアップ・ノードのプールを設定できます。

      ノード・プールを追加するには、「クラスタ詳細」ページの「ノード・プール」セクションの「シェイプ」を更新するだけです。

      1. 「リソース」メニューに移動します。
      2. 「ノード・プール」「新規プールの追加」の順にクリックします。
      3. ノード・シェイプを追加/変更して、必要に応じてプールを変更します。
  2. 次に、デプロイメント・ファイルを使用してクラスタにアクセスし、Nginx環境のデプロイを開始します。
    1. 自分のクラスタに移動し、「クラスタへのアクセス」をクリックします。

      クイックアクセス画面が表示されます。続行するには、ステップ1および2 (画面に示されています)に従います。クラウド・シェル・アクセスを使用する場合、マシン上でkubectl環境を設定および構成する必要はありません。このプロセスでは、Web端末エミュレータを起動し、環境用に構成します。画面のステップ2で説明したように、OCI CLIコマンドを貼り付けると、新しいクラスタにアクセスするようにkubectlが構成されます。

    2. 次に、ポッドがプロビジョニングされたことを確認します。次を入力します:

      ノート:

      このプレイブックのすべてのコマンドで便宜上、例の「コピー」をクリックして、プロンプトにコマンドを直接貼り付けることができます。
      kubectl get nodes -o wide
      2つのノードと、ARMで実行されていることを示すマシン・シェイプが表示されます。次に例を示します。
      NAME        STATUS ROLES AGE     VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE              KERNEL-VERSION                   CONTAINER-RUNTIME 
      10.0.10.129 Ready  node  3m57s   v.1.19.7  10.0.10.129   <none>        Oracle Linux Server   7.9 5.4.17-2102.el7uek.aarch64   docker://19.3.11 
      10.0.10.153 Ready  node  3m17s   v.1.19.7  10.0.10.153   <none>        Oracle Linux Server   7.9 5.4.17-2102.el7uek.aarch64   docker://19.3.11
      ノード数をスケールアップする必要がある場合は、「ノード・プール」画面で「スケール」をクリックし、「ノード数」で必要なノード数を入力します。OCIはスピンアップして登録します。
  3. 最後に、Nginx Webサイトをデプロイし、ロード・バランサを介して公開します:
    1. サービス・リスニングがポート80に設定された2つのレプリカNginxデプロイメントをデプロイします。次を入力します:
       kubectl apply -f https://k8s.io/examples/application/deployment.yaml 
    2. デプロイメントを確認し、次のように入力します。
      kubectl describe deployment nginx-deployment
      次の出力が表示されます:
      ----
      kubectl describe deployment nginx-deployment
      
      Name:                   nginx-deployment
      Namespace:              default
      CreationTimestamp:      Tue, 03 Jan 2023 17:41:27 +0000
      Labels:                 <none>
      Annotations:            deployment.kubernetes.io/revision: 1
      Selector:               app=nginx
      Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
      StrategyType:           RollingUpdate
      MinReadySeconds:        0
      RollingUpdateStrategy:  25% max unavailable, 25% max surge
      Pod Template:
        Labels:  app=nginx
        Containers:
         nginx:
          Image:        nginx:1.14.2
          Port:         80/TCP
          Host Port:    0/TCP
          Environment:  <none>
          Mounts:       <none>
        Volumes:        <none>
      Conditions:
        Type           Status  Reason
        ----           ------  ------
        Available      True    MinimumReplicasAvailable
        Progressing    True    NewReplicaSetAvailable
      OldReplicaSets:  <none>
      NewReplicaSet:   nginx-deployment-6595874d85 (2/2 replicas created)
      Events:
        Type    Reason             Age   From                   Message
        ----    ------             ----  ----                   -------
        Normal  ScalingReplicaSet  15s   deployment-controller  Scaled up replica set nginx-deployment-6595874d85 to 2
      
      ----
      
    3. ロード・バランサを介してサービスをインターネットに公開します。次を入力します:
      kubectl expose deployment nginx-deployment --type=LoadBalancer --name=my-service 
    4. ロード・バランサにパブリックIPがあることを確認します。次のように入力します。
      kubectl get services
      OCIはロード・バランサを起動し、パブリックIPを割り当てます。しばらくすると、次のような出力が表示されるはずです。
      NAME        TYPE          CLUSTER-IP     EXTERNAL-IP    PORT(S)              AGE 
      kubernetes  ClusterIP     10.96.0.1      <none>         443/TCP, 12250/TCP   16m 
      nginx-lb    LoadBalancer  10.96.224.64   138.2.218.135  80:30343/TCP         3m1s

Ampere A1を使用したARMプールを使用したOKEクラスタのプロビジョニングおよびデプロイ

ARMプールを使用してOKEクラスタを自動的にプロビジョニングし、GitHubで提供されるTerraformスクリプトを使用してNginx Webサイトをデプロイできます。 このスクリプトは、2つのOCPUに(同じ可用性ドメイン上の) 2つのノードを持つクラスタをプロビジョニングします。構成ステップは、ノードおよびOCPUの数を変更する方法を示しています。その後、スクリプトによってNginx (2ポッド)がプロビジョニングされ、ロード・バランサの背後に公開されます。
クラスタをプロビジョニングしてWebサイトをデプロイするには、この手順を使用します。
  1. まず、クラスタを構成する必要があります。
    1. OCIコンパートメントを持つOCIテナンシがあることを確認します。
    2. OCIコンソールにログインし、コマンド・シェルを開き、次のコマンドを実行します。
      git clone https://github.com/badr42/OKE_A1
      cd OKE_A1
      export TF_VAR_tenancy_ocid='tenancy-ocid'
      export TF_VAR_compartment_ocid='comparment-ocid'
      export TF_VAR_region='home-region'
      <optional>
      ### Select Availability Domain, zero based, if not set it defaults to 0, 
      ### this allows you to select an AD that has available A1 chips
      export TF_VAR_AD_number='0'
      
      ### Select number of nodes
      export TF_VAR_node_count='2'
      
      ### Set OCPU count per node
      export TF_VAR_ocpu_count='2'

    tenancy-ocidcomparment-ocidおよびhome-regionに固有の値を使用します。

  2. クラスタを構築し、次のように入力します。
    terraform init
    terraform plan
    terraform apply

    terraform applyの実行後、サービスの起動に約25分かかります。

  3. サービスが起動したら、Nginxロード・バランサを起動し、次のように入力します:
    kubectl --kubeconfig kubeconfig get service
    次のシステム出力が表示されます。
    NAME        TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)              AGE
    kubernetes  ClusterIP      10.96.0.1       <none>           443/TCP, 12250/TCP   16m
    nginx-lb    LoadBalancer   10.96.224.64    138.2.218.135    80:30343/TCP       3m1s
  4. デプロイメントが完了したら、環境を終了し、次のように入力します。
    terraform destroy

デプロイメントのテスト

デプロイメントをテストするには、Webブラウザを開き、アドレス・バーにパブリックIPアドレスを入力します。Webページを正常にデプロイした場合は、新しいNginxサーバーのようこそページにアクセスできる必要があります。