🦇
【MS Learn】Azure Kubernetes Service の構成 のラボをやってみた
はじめに
やってみたシリーズです。
今回はこちら。対話型のラボ シミュレーションをやります。
タスク 1: Microsoft.Kubernetes および Microsoft.KubernetesConfiguration リソース プロバイダーを登録する。
- Azure Kubernetes Service クラスターをデプロイするために必要なリソース プロバイダーを識別します。
- サブスクリプションのメニューの 設定 -> リソースプロバイダーを選択します。
- 『Kubernetes』で検索します。
- 必要なリソース プロバイダーを登録します。
『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