🦇

【MS Learn】Azure Kubernetes Service の構成 のラボをやってみた

2023/10/06に公開

はじめに

やってみたシリーズです。

今回はこちら。対話型のラボ シミュレーションをやります。
https://learn.microsoft.com/ja-jp/training/modules/configure-azure-kubernetes-service/

タスク 1: Microsoft.Kubernetes および Microsoft.KubernetesConfiguration リソース プロバイダーを登録する。

  1. Azure Kubernetes Service クラスターをデプロイするために必要なリソース プロバイダーを識別します。
  2. サブスクリプションのメニューの 設定 -> リソースプロバイダーを選択します。
  3. 『Kubernetes』で検索します。
  4. 必要なリソース プロバイダーを登録します。
    『Microsoft.Kubernetes』を選択して、『登録』をクリックします。
    同じことを『Microsoft.KubernetesConfiguration』に対しても実施します。

状態が『registered』になればOKです。

タスク 2: Azure Kubernetes Service クラスターをデプロイする。

Azure portal を使用して、Azure Kubernetes Service クラスターを作成します。

portal の検索でKubernetesサービスを検索して選択。

作成ボタンのプルダウンで『Kubernetes クラスターの作成』を選択。

基本

  • リソースグループを『az104-09c-rg1-683246』という名前で新規作成します。
    (ラボと合わせてます)
  • Kubernetes クラスター名に 『az104-9c-aks1』
  • あとはそのまま(※primary node pool は次のノードプールの画面で設定)
    基本

ノードプール

agentpool のリンクをクリック

  • スケーリング方法を『手動』に変更
  • ノード数に『1』を入力

    『更新』を押して閉じる

ネットワーク

  • DNS 名のプレフィックスに 『samplecluster683246』

統合

  • Azure Monitor を 『オフ』にする
  • アラートの推奨されるアラート ルールを有効化 のチェックを外す

『確認および作成』ボタンをクリック -> 『作成』ボタンをクリック
クラスターが作成されるまで待ちます。

タスク 3: Azure Kubernetes Service クラスターにポッドをデプロイする。

デプロイしたリソースにアクセスします。

Kubernetesサービス 設定 -> ノードプール を選択

Cloud Shell を起動します。Bashを選択。

変数定義とコンテキストを作成します。

Azure Cloud Shell
$ RESOURCE_GROUP='az104-09c-rg1-683246'
$ AKS_CLUSTER='az104-9c-aks1'
$ az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_CLUSTER
Merged "az104-9c-aks1" as current context in /home/user/.kube/config

クラスターが 1 つのノードを持つ単一プールで構成されていることを確認します。

Azure Cloud Shell
$ kubectl get nodes
NAME                                STATUS   ROLES   AGE   VERSION
aks-agentpool-12127498-vmss000000   Ready    agent   10m   v1.26.6

Azure Kubernetes Service クラスターへの接続を確認し、Docker Hub から nginx イメージをデプロイします。

Azure Cloud Shell
$ kubectl create deployment nginx-deployment --image=nginx
deployment.apps/nginx-deployment created

Kubernetes ポッドが作成され、アクセス可能であることを確認します。

Azure Cloud Shell
$ kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-55888b446c-cqkwz   1/1     Running   0          31s
$ kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   1/1     1            1           51s
$ kubectl expose deployment nginx-deployment --port=80 --type=LoadBalancer
service/nginx-deployment exposed

ロードバランサーのIPを取得します。

Azure Cloud Shell
$ kubectl get service
NAME               TYPE           CLUSTER-IP    EXTERNAL-IP    PORT(S)        AGE
kubernetes         ClusterIP      10.0.0.1      <none>         443/TCP        16m
nginx-deployment   LoadBalancer   10.0.34.208   4.241.143.34   80:31498/TCP   67s

ブラウザー ページに nginx へようこそのメッセージが表示されることを確認します。

EXTERNAL-IP でブラウザにアクセス

タスク 4: Azure Kubernetes Service クラスター内でコンテナー化されたワークロードをスケーリングする。

ポッドの数を増やしてデプロイをスケーリングします。

Azure Cloud Shell
$ kubectl scale --replicas=2 deployment/nginx-deployment
deployment.apps/nginx-deployment scaled
$ kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-55888b446c-8m6jj   1/1     Running   0          10s
nginx-deployment-55888b446c-cqkwz   1/1     Running   0          7m25s

ノードプールの 『agentpool』のリンクをクリック

『ノードプールのスケーリング』を選択

『適用』をクリック

正常にスケーリングが完了したら、Cloud Shellを開く

ノードを2つに増やします。

Azure Cloud Shell
$ az aks scale --resource-group $RESOURCE_GROUP --name $AKS_CLUSTER --node-count 2
{
  "aadProfile": null,
  "addonProfiles": {
    "azureKeyvaultSecretsProvider": {
      "config": null,
      "enabled": false,
      "identity": null
    },
    "azurepolicy": {
      "config": null,
      "enabled": false,
      "identity": null
    }
  },
  "agentPoolProfiles": [
    {
      "availabilityZones": null,
      "count": 2,
      "creationData": null,
      "currentOrchestratorVersion": "1.26.6",
      "enableAutoScaling": false,
      "enableEncryptionAtHost": null,
      "enableFips": false,
      "enableNodePublicIp": false,
      "enableUltraSsd": null,
      "gpuInstanceProfile": null,
      "hostGroupId": null,
      "kubeletConfig": null,
      "kubeletDiskType": "OS",
      "linuxOsConfig": null,
      "maxCount": null,
      "maxPods": 110,
      "minCount": null,
      "mode": "System",
      "name": "agentpool",
      "nodeImageVersion": "AKSUbuntu-2204gen2containerd-202309.06.0",
      "nodeLabels": null,
      "nodePublicIpPrefixId": null,
      "nodeTaints": null,
      "orchestratorVersion": "1.26.6",
      "osDiskSizeGb": 128,
      "osDiskType": "Managed",
      "osSku": "Ubuntu",
      "osType": "Linux",
      "podSubnetId": null,
      "powerState": {
        "code": "Running"
      },
      "provisioningState": "Succeeded",
      "proximityPlacementGroupId": null,
      "scaleDownMode": null,
      "scaleSetEvictionPolicy": null,
      "scaleSetPriority": null,
      "spotMaxPrice": null,
      "tags": null,
      "type": "VirtualMachineScaleSets",
      "upgradeSettings": {
        "drainTimeoutInMinutes": null,
        "maxSurge": null
      },
      "vmSize": "Standard_DS2_v2",
      "vnetSubnetId": null,
      "workloadRuntime": null
    }
  ],
  "apiServerAccessProfile": null,
  "autoScalerProfile": null,
  "autoUpgradeProfile": {
    "nodeOsUpgradeChannel": null,
    "upgradeChannel": "patch"
  },
  "azureMonitorProfile": null,
  "azurePortalFqdn": "samplecluster683246-cj7ycre5.portal.hcp.japaneast.azmk8s.io",
  "currentKubernetesVersion": "1.26.6",
  "disableLocalAccounts": false,
  "diskEncryptionSetId": null,
  "dnsPrefix": "samplecluster683246",
  "enablePodSecurityPolicy": null,
  "enableRbac": true,
  "extendedLocation": null,
  "fqdn": "samplecluster683246-cj7ycre5.hcp.japaneast.azmk8s.io",
  "fqdnSubdomain": null,
  "httpProxyConfig": null,
  "id": "/subscriptions/xxxxxxxx-xxxxxxxxx-xxxx-xxxxxxxxxxxx/resourcegroups/az104-09c-rg1-683246/providers/Microsoft.ContainerService/managedClusters/az104-9c-aks1",
  "identity": {
    "delegatedResources": null,
    "principalId": "215da5fc-34d2-4d55-af03-5c5ee8a5d68e",
    "tenantId": "cb9bb346-c037-4fb2-a3ff-dd23544753ea",
    "type": "SystemAssigned",
    "userAssignedIdentities": null
  },
  "identityProfile": {
    "kubeletidentity": {
      "clientId": "afab69bf-6ba7-494c-867c-57b0615d2da4",
      "objectId": "17831851-1952-44ca-8849-2dd54441b780",
      "resourceId": "/subscriptions/xxxxxxxx-xxxxxxxxx-xxxx-xxxxxxxxxxxx/resourcegroups/MC_az104-09c-rg1-683246_az104-9c-aks1_japaneast/providers/Microsoft.ManagedIdentity/userAssignedIdentities/az104-9c-aks1-agentpool"
    }
  },
  "kubernetesVersion": "1.26.6",
  "linuxProfile": null,
  "location": "japaneast",
  "maxAgentPools": 100,
  "name": "az104-9c-aks1",
  "networkProfile": {
    "dnsServiceIp": "10.0.0.10",
    "ipFamilies": [
      "IPv4"
    ],
    "loadBalancerProfile": {
      "allocatedOutboundPorts": null,
      "effectiveOutboundIPs": [
        {
          "id": "/subscriptions/xxxxxxxx-xxxxxxxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MC_az104-09c-rg1-683246_az104-9c-aks1_japaneast/providers/Microsoft.Network/publicIPAddresses/c2cb4748-364a-4bdb-994f-23d6232b2689",
          "resourceGroup": "MC_az104-09c-rg1-683246_az104-9c-aks1_japaneast"
        }
      ],
      "enableMultipleStandardLoadBalancers": null,
      "idleTimeoutInMinutes": null,
      "managedOutboundIPs": {
        "count": 1,
        "countIpv6": null
      },
      "outboundIPs": null,
      "outboundIpPrefixes": null
    },
    "loadBalancerSku": "Standard",
    "natGatewayProfile": null,
    "networkDataplane": null,
    "networkMode": null,
    "networkPlugin": "kubenet",
    "networkPluginMode": null,
    "networkPolicy": "calico",
    "outboundType": "loadBalancer",
    "podCidr": "10.244.0.0/16",
    "podCidrs": [
      "10.244.0.0/16"
    ],
    "serviceCidr": "10.0.0.0/16",
    "serviceCidrs": [
      "10.0.0.0/16"
    ]
  },
  "nodeResourceGroup": "MC_az104-09c-rg1-683246_az104-9c-aks1_japaneast",
  "oidcIssuerProfile": {
    "enabled": false,
    "issuerUrl": null
  },
  "podIdentityProfile": null,
  "powerState": {
    "code": "Running"
  },
  "privateFqdn": null,
  "privateLinkResources": null,
  "provisioningState": "Succeeded",
  "publicNetworkAccess": null,
  "resourceGroup": "az104-09c-rg1-683246",
  "securityProfile": {
    "azureKeyVaultKms": null,
    "defender": null,
    "imageCleaner": null,
    "workloadIdentity": null
  },
  "servicePrincipalProfile": {
    "clientId": "msi",
    "secret": null
  },
  "sku": {
    "name": "Base",
    "tier": "Free"
  },
  "storageProfile": {
    "blobCsiDriver": null,
    "diskCsiDriver": {
      "enabled": true
    },
    "fileCsiDriver": {
      "enabled": true
    },
    "snapshotController": {
      "enabled": true
    }
  },
  "supportPlan": "KubernetesOfficial",
  "systemData": null,
  "tags": null,
  "type": "Microsoft.ContainerService/ManagedClusters",
  "upgradeSettings": null,
  "windowsProfile": null,
  "workloadAutoScalerProfile": {
    "keda": null,
    "verticalPodAutoscaler": null
  }
}

デプロイのスケーリングの結果を確認します。

Azure Cloud Shell
$ kubectl get nodes
NAME                                STATUS   ROLES   AGE   VERSION
aks-agentpool-12127498-vmss000000   Ready    agent   27m   v1.26.6
aks-agentpool-12127498-vmss000001   Ready    agent   90s   v1.26.6

ポッドの数を10にします

Azure Cloud Shell
$ kubectl scale --replicas=10 deployment/nginx-deployment
deployment.apps/nginx-deployment scaled
$ kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-55888b446c-6q6nx   1/1     Running   0          60s
nginx-deployment-55888b446c-8m6jj   1/1     Running   0          10m
nginx-deployment-55888b446c-bsglr   1/1     Running   0          60s
nginx-deployment-55888b446c-cqkwz   1/1     Running   0          18m
nginx-deployment-55888b446c-l8tp7   1/1     Running   0          60s
nginx-deployment-55888b446c-mh6nz   1/1     Running   0          60s
nginx-deployment-55888b446c-nnj55   1/1     Running   0          60s
nginx-deployment-55888b446c-snswk   1/1     Running   0          60s
nginx-deployment-55888b446c-w59hh   1/1     Running   0          60s
nginx-deployment-55888b446c-xm7q2   1/1     Running   0          60s

クラスターノード間でのポッドの分散を確認します。
※コマンドの出力を確認し、ポッドが両方のノードに分散されていることを確認します。

Azure Cloud Shell
$ kubectl get pod -o=custom-columns=NODE:.spec.nodeName,POD:.metadata.name
NODE                                POD
aks-agentpool-12127498-vmss000001   nginx-deployment-55888b446c-6q6nx
aks-agentpool-12127498-vmss000000   nginx-deployment-55888b446c-8m6jj
aks-agentpool-12127498-vmss000001   nginx-deployment-55888b446c-bsglr
aks-agentpool-12127498-vmss000000   nginx-deployment-55888b446c-cqkwz
aks-agentpool-12127498-vmss000001   nginx-deployment-55888b446c-l8tp7
aks-agentpool-12127498-vmss000001   nginx-deployment-55888b446c-mh6nz
aks-agentpool-12127498-vmss000000   nginx-deployment-55888b446c-nnj55
aks-agentpool-12127498-vmss000001   nginx-deployment-55888b446c-snswk
aks-agentpool-12127498-vmss000001   nginx-deployment-55888b446c-w59hh
aks-agentpool-12127498-vmss000000   nginx-deployment-55888b446c-xm7q2

2つのノードに分かれてますね。

デプロイを削除します。

Azure Cloud Shell
$ kubectl delete deployment nginx-deployment
deployment.apps "nginx-deployment" deleted

Portalに戻って、画面の更新をします。

完了

作成したリソースグループの削除を忘れずに。

おわりに

Storageとの共有とかあるのかと思いきや、Portal+Cloud Shellでの構築+手動スケールのラボでした。
AKSにちょっと慣れてきたかも🙃

Discussion