🐶
【MS Learn】コンテナー化されたアプリケーションを Azure Kubernetes Service にデプロイするをやってみた
はじめに
やってみたシリーズです。
今回はAzure での Kubernetes 入門からAKSをデプロイするLearnをやります。
手を動かすところだけ記述していきます。
番号とかは飛び飛びになりますので、ご本家様と照らし合わせてみていただけると幸いです。
Azure Cloud Shellのbashで実行しています。
ユニット3: 演習 - Azure Kubernetes Service クラスターを作成する
- 演習全体で再利用する構成値の変数を作成します。
Azure Cloud Shell
$ export RESOURCE_GROUP=rg-contoso-video
$ export CLUSTER_NAME=aks-contoso-video
$ export LOCATION=japaneast
- リソース グループを作成します。
Azure Cloud Shell
$ az group create --name=$RESOURCE_GROUP --location=$LOCATION
{
"id": "/subscriptions/xxxxxxxx-xxxxxxxxx-xxxx-xxxxxxxxxxxx/resourceGroups/rg-contoso-video",
"location": "japaneast",
"managedBy": null,
"name": "rg-contoso-video",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
- AKS クラスターを作成します。
Azure Cloud Shell
$ az aks create \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--node-count 2 \
--enable-addons http_application_routing \
--generate-ssh-keys \
--node-vm-size Standard_B2s \
--network-plugin azure
docker_bridge_cidr is not a known attribute of class <class 'azure.mgmt.containerservice.v2023_07_01.models._models_py3.ContainerServiceNetworkProfile'> and will be ignored
{
"aadProfile": null,
"addonProfiles": {
"httpApplicationRouting": {
"config": {
"HTTPApplicationRoutingZoneName": "3bed7d8e4a5f4cbfa2d3.japaneast.aksapp.io"
},
"enabled": true,
"identity": {
"clientId": "b12e42fc-28d3-4d4f-9cf8-82a7a1e1f036",
"objectId": "aad8a955-9310-4fdc-94a6-36f48c99d3d1",
"resourceId": "/subscriptions/xxxxxxxx-xxxxxxxxx-xxxx-xxxxxxxxxxxx/resourcegroups/MC_rg-contoso-video_aks-contoso-video_japaneast/providers/Microsoft.ManagedIdentity/userAssignedIdentities/httpapplicationrouting-aks-contoso-video"
}
}
},
"agentPoolProfiles": [
{
"availabilityZones": null,
"count": 2,
"creationData": null,
"currentOrchestratorVersion": "1.26.6",
"enableAutoScaling": false,
"enableEncryptionAtHost": false,
"enableFips": false,
"enableNodePublicIp": false,
"enableUltraSsd": false,
"gpuInstanceProfile": null,
"hostGroupId": null,
"kubeletConfig": null,
"kubeletDiskType": "OS",
"linuxOsConfig": null,
"maxCount": null,
"maxPods": 30,
"minCount": null,
"mode": "System",
"name": "nodepool1",
"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_B2s",
"vnetSubnetId": null,
"workloadRuntime": null
}
],
"apiServerAccessProfile": null,
"autoScalerProfile": null,
"autoUpgradeProfile": {
"nodeOsUpgradeChannel": "NodeImage",
"upgradeChannel": null
},
"azureMonitorProfile": null,
"azurePortalFqdn": "aks-contos-rg-contoso-video-a058ec-4sbhkovp.portal.hcp.japaneast.azmk8s.io",
"currentKubernetesVersion": "1.26.6",
"disableLocalAccounts": false,
"diskEncryptionSetId": null,
"dnsPrefix": "aks-contos-rg-contoso-video-a058ec",
"enablePodSecurityPolicy": null,
"enableRbac": true,
"extendedLocation": null,
"fqdn": "aks-contos-rg-contoso-video-a058ec-4sbhkovp.hcp.japaneast.azmk8s.io",
"fqdnSubdomain": null,
"httpProxyConfig": null,
"id": "/subscriptions/xxxxxxxx-xxxxxxxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-contoso-video/providers/Microsoft.ContainerService/managedClusters/aks-contoso-video",
"identity": {
"delegatedResources": null,
"principalId": "ef193bf0-e5c0-44e2-a529-bff33e981ed4",
"tenantId": "cb9bb346-c037-4fb2-a3ff-dd23544753ea",
"type": "SystemAssigned",
"userAssignedIdentities": null
},
"identityProfile": {
"kubeletidentity": {
"clientId": "8fd66683-3b32-46f1-9238-9946e2ac14df",
"objectId": "3b72a7f4-f55f-436c-8cfc-8ae18ab5d03f",
"resourceId": "/subscriptions/xxxxxxxx-xxxxxxxxx-xxxx-xxxxxxxxxxxx/resourcegroups/MC_rg-contoso-video_aks-contoso-video_japaneast/providers/Microsoft.ManagedIdentity/userAssignedIdentities/aks-contoso-video-agentpool"
}
},
"kubernetesVersion": "1.26.6",
"linuxProfile": {
"adminUsername": "azureuser",
"ssh": {
"publicKeys": [
{
"keyData": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtlQI5JNtID9FT9ei748fLS8yiwL94XmBPoXsxv9UGFe3ZilBzAtPUara5AXKVHDiHcPyLuXTq6iLbbC1tvVidf1BsH/lwFFSjz/z7aSAS2I84dAu5E/+AYg6azipYYtWzcCwIPfhaP0FqgtEOb0+Cvf1DgZ2tmUfOlg2qY0PdfrTU7Pf5cpCK46+zLhqQL7HpZNi/CHQrtU5TiSU6gU2gUy0/tOvlvUh4T+ipR+yH51Y2XF5v0Szy8c1brSOJ4VpO8sdxLycSw2QYOMbuv0Pxjg8YIv5yKbGxjKVOCn6Mp8QwOgYj1BeEdpUr4Lz2/ZuFlJoTNcPQSkxCjVI0VtRF"
}
]
}
},
"location": "japaneast",
"maxAgentPools": 100,
"name": "aks-contoso-video",
"networkProfile": {
"dnsServiceIp": "10.0.0.10",
"ipFamilies": [
"IPv4"
],
"loadBalancerProfile": {
"allocatedOutboundPorts": null,
"effectiveOutboundIPs": [
{
"id": "/subscriptions/xxxxxxxx-xxxxxxxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MC_rg-contoso-video_aks-contoso-video_japaneast/providers/Microsoft.Network/publicIPAddresses/99e14181-51fb-47db-a57e-8052fa5bd381",
"resourceGroup": "MC_rg-contoso-video_aks-contoso-video_japaneast"
}
],
"enableMultipleStandardLoadBalancers": null,
"idleTimeoutInMinutes": null,
"managedOutboundIPs": {
"count": 1,
"countIpv6": null
},
"outboundIPs": null,
"outboundIpPrefixes": null
},
"loadBalancerSku": "Standard",
"natGatewayProfile": null,
"networkDataplane": "azure",
"networkMode": null,
"networkPlugin": "azure",
"networkPluginMode": null,
"networkPolicy": null,
"outboundType": "loadBalancer",
"podCidr": null,
"podCidrs": null,
"serviceCidr": "10.0.0.0/16",
"serviceCidrs": [
"10.0.0.0/16"
]
},
"nodeResourceGroup": "MC_rg-contoso-video_aks-contoso-video_japaneast",
"oidcIssuerProfile": {
"enabled": false,
"issuerUrl": null
},
"podIdentityProfile": null,
"powerState": {
"code": "Running"
},
"privateFqdn": null,
"privateLinkResources": null,
"provisioningState": "Succeeded",
"publicNetworkAccess": null,
"resourceGroup": "rg-contoso-video",
"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": {
"adminPassword": null,
"adminUsername": "azureuser",
"enableCsiProxy": true,
"gmsaProfile": null,
"licenseType": null
},
"workloadAutoScalerProfile": {
"keda": null,
"verticalPodAutoscaler": null
}
}
Azure Cloud Shell
$ az aks create \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--node-count 2 \
--enable-addons http_application_routing \
--generate-ssh-keys \
--node-vm-size Standard_B2s \
--network-plugin azure
docker_bridge_cidr is not a known attribute of class <class 'azure.mgmt.containerservice.v2023_07_01.models._models_py3.ContainerServiceNetworkProfile'> and will be ignored
(OperationNotAllowed) Operation is not allowed: Another agentpool operation (nodepool1 - Creating) is in progress, please wait for it to finish before starting a new operation. See https://aka.ms/aks-pending-operation for more details
Code: OperationNotAllowed
Message: Operation is not allowed: Another agentpool operation (nodepool1 - Creating) is in progress, please wait for it to finish before starting a new operation. See https://aka.ms/aks-pending-operation for more details
- Solution 2: Get the current cluster status before you try an operation
とりあえず状態確認
Azure Cloud Shell
$ az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --output table
Name Location ResourceGroup KubernetesVersion CurrentKubernetesVersion ProvisioningState Fqdn
----------------- ---------- ---------------- ------------------- -------------------------- ------------------- -------------------------------------------------------------------
aks-contoso-video japaneast rg-contoso-video 1.26.6 1.26.6 Succeeded aks-contos-rg-contoso-video-a058ec-73ii5zkt.hcp.japaneast.azmk8s.io
Portalに出てこないからガラだけできた?
az aks updateに置き換えてやるのは難易度高すぎたので、おとなしく一回消します。
Azure Cloud Shell
$ az aks delete --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Are you sure you want to perform this operation? (y/n): y
終わったら、az aks createをもう一度実行します。
- 別のノード プールを追加します。
Azure Cloud Shell
$ az aks nodepool add \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--name userpool \
--node-count 2 \
--node-vm-size Standard_B2s
{
"availabilityZones": null,
"count": 2,
"creationData": null,
"currentOrchestratorVersion": "1.26.6",
"enableAutoScaling": false,
"enableEncryptionAtHost": false,
"enableFips": false,
"enableNodePublicIp": false,
"enableUltraSsd": false,
"gpuInstanceProfile": null,
"hostGroupId": null,
"id": "/subscriptions/xxxxxxxx-xxxxxxxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-contoso-video/providers/Microsoft.ContainerService/managedClusters/aks-contoso-video/agentPools/userpool",
"kubeletConfig": null,
"kubeletDiskType": "OS",
"linuxOsConfig": null,
"maxCount": null,
"maxPods": 30,
"minCount": null,
"mode": "User",
"name": "userpool",
"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,
"resourceGroup": "rg-contoso-video",
"scaleDownMode": "Delete",
"scaleSetEvictionPolicy": null,
"scaleSetPriority": null,
"spotMaxPrice": null,
"tags": null,
"type": "Microsoft.ContainerService/managedClusters/agentPools",
"typePropertiesType": "VirtualMachineScaleSets",
"upgradeSettings": {
"drainTimeoutInMinutes": null,
"maxSurge": null
},
"vmSize": "Standard_B2s",
"vnetSubnetId": null,
"workloadRuntime": null
}
Portal を見るとAKSができてます。
kubectl でリンクする
- Kubernetes クラスターをリンクします。
リンクってなに?
Windows Copilotに聞いてみた
この文書は、以下のことを説明しています。
- Kubernetes クラスターをリンクするとは何か:Kubernetes クラスターをリンクするとは、Azure Arc によって、Azure 以外の場所にある Kubernetes クラスターを Azure リソースとして管理できるようにすることです。これにより、Azure のツールやポリシーを使って、異なる環境のクラスターを一元的に監視や運用できます。
-
Kubernetes クラスターをリンクする方法:Kubernetes クラスターをリンクするには、次の手順が必要です。
- Azure CLI をインストールし、Azure にログインする
- Azure Arc を有効化する
- リンクしたい Kubernetes クラスターに接続し、必要なツールや設定をインストールする
- Azure CLI を使って、Kubernetes クラスターを Azure Arc に登録する
-
Kubernetes クラスターをリンクするメリット:Kubernetes クラスターをリンクすると、以下のメリットがあります。
- Azure Monitor や Azure Policy などの Azure のサービスを使って、クラスターのパフォーマンスやセキュリティを向上させることができる
- Azure Arc の GitOps 機能を使って、クラスターの構成やアプリケーションのデプロイメントを自動化し、一貫性や信頼性を高めることができる
- Azure Arc の拡張機能を使って、Azure Data Services や Azure Machine Learning などの Azure のソリューションをクラスター上で実行し、データや AI の活用を促進することができる
以上が、この文書の要約です。
ムズカシイネー
AKS前提で答えてくれたけど、普通のk8sにはない概念なんだろうか?
Azure Cloud Shell
$ az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Merged "aks-contoso-video" as current context in /home/user/.kube/config
- クラスターに接続できることを確認し、その構成を確かめます。
Azure Cloud Shell
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-nodepool1-25295292-vmss000000 Ready agent 23m v1.26.6
aks-nodepool1-25295292-vmss000001 Ready agent 22m v1.26.6
aks-userpool-04577067-vmss000000 Ready agent 14m v1.26.6
aks-userpool-04577067-vmss000001 Ready agent 14m v1.26.6
ユニット5: 演習 - Azure Kubernetes Service クラスターでアプリケーションをデプロイする
配置マニフェストを作成する
- マニフェスト ファイルを作成します。
Azure Cloud Shell
$ touch deployment.yaml
- Cloud Shell でVSCodeを開きます。
Azure Cloud Shell
$ code .
- deployment.yaml ファイルを開き、YAML の次のコード セクションを追加します。
deployment.yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: contoso-website
- マニフェスト ファイル内でポッド情報を定義します。(specの部分)
deployment.yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: contoso-website
spec:
template: # This is the template of the pod inside the deployment
metadata: # Metadata for the pod
labels:
app: contoso-website
- すべてのポッドに、そのポッド内のコンテナーを定義します。(containersの部分)
deployment.yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: contoso-website
spec:
template: # This is the template of the pod inside the deployment
metadata:
labels:
app: contoso-website
spec:
containers: # Here we define all containers
- name: contoso-website
- アプリでクラスターから使用できるリソースの最小量と最大量を定義します。(resourceの部分)
deployment.yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: contoso-website
spec:
template: # This is the template of the pod inside the deployment
metadata:
labels:
app: contoso-website
spec:
containers:
- image: mcr.microsoft.com/mslearn/samples/contoso-website
name: contoso-website
resources:
requests: # Minimum amount of resources requested
cpu: 100m
memory: 128Mi
limits: # Maximum amount of resources requested
cpu: 250m
memory: 256Mi
- 外部に公開されるポートを定義します。(portsの部分)
deployment.yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: contoso-website
spec:
template: # This is the template of the pod inside the deployment
metadata:
labels:
app: contoso-website
spec:
nodeSelector:
kubernetes.io/os: linux
containers:
- image: mcr.microsoft.com/mslearn/samples/contoso-website
name: contoso-website
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
ports:
- containerPort: 80 # This container exposes port 80
name: http # We named that port "http" so we can refer to it later
- セレクター セクションを追加して、デプロイによって管理されるワークロードを定義します。
deployment.yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: contoso-website
spec:
selector: # Define the wrapping strategy
matchLabels: # Match all pods with the defined labels
app: contoso-website # Labels follow the `name: value` template
template: # This is the template of the pod inside the deployment
metadata:
labels:
app: contoso-website
spec:
nodeSelector:
kubernetes.io/os: linux
containers:
- image: mcr.microsoft.com/mslearn/samples/contoso-website
name: contoso-website
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
ports:
- containerPort: 80
name: http
- ファイルを保存して閉じます。
マニフェストを適用する
- 配置マニフェストをクラスターに送信します。
Azure Cloud Shell
$ kubectl apply -f ./deployment.yaml
deployment.apps/contoso-website created
- デプロイが成功したかどうかを確認します。
Azure Cloud Shell
$ kubectl get deploy contoso-website
NAME READY UP-TO-DATE AVAILABLE AGE
contoso-website 0/1 1 0 40s
- ポッドが実行されているかどうかを確認します。
Azure Cloud Shell
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
contoso-website-b78cc877b-8wjrd 1/1 Running 0 76s
ユニット7: 演習 - アプリケーションへのネットワーク アクセスを有効にする
サービス マニフェストを作成する
- Kubernetes Service 用の service.yaml という名前のマニフェスト ファイルを作成します。
Azure Cloud Shell
$ touch service.yaml
- Cloud Shell でVSCodeを開きます。
Azure Cloud Shell
$ code .
- service.yaml ファイルを開き、YAML の次のコード セクションを追加します。
service.yaml
#service.yaml
apiVersion: v1
kind: Service
metadata:
name: contoso-website
- サービスの種類を追加します。
service.yaml
#service.yaml
apiVersion: v1
kind: Service
metadata:
name: contoso-website
spec:
type: ClusterIP # ここ
- サービスによってグループ化されてカバレッジが提供されるポッドを定義します。
service.yaml
#service.yaml
apiVersion: v1
kind: Service
metadata:
name: contoso-website
spec:
type: ClusterIP
selector: # ここ
app: contoso-website
- ポート転送ルールを定義します。
service.yaml
#service.yaml
apiVersion: v1
kind: Service
metadata:
name: contoso-website
spec:
type: ClusterIP
selector:
app: contoso-website
ports:
- port: 80 # SERVICE exposed port
name: http # SERVICE port name
protocol: TCP # The protocol the SERVICE will listen to
targetPort: http # Port to forward to in the POD
- VSCode を保存して閉じます。
サービスをデプロイする
- サービス マニフェストをクラスターに送信します。
Azure Cloud Shell
$ kubectl apply -f ./service.yaml
service/contoso-website created
- デプロイが成功したかどうかを確認します。
Azure Cloud Shell
$ kubectl get service contoso-website
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
contoso-website ClusterIP 10.0.126.127 <none> 80/TCP 32s
イングレス マニフェストを作成する
- ingress.yaml という名前のマニフェスト ファイルを作成します。
Azure Cloud Shell
$ touch ingress.yaml
- Cloud Shell でVSCodeを開きます。
Azure Cloud Shell
$ code .
- ingress.yaml ファイルを開き、YAML の次のコード セクションを追加します。
ingress.yaml
#ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: contoso-website
- このイングレスに対する HTTP application routing アドオンを使用するために呼び出されるマニフェスト ファイルの metadata セクションに annotations キーを作成します。
ingress.yaml
#ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: contoso-website
annotations:
kubernetes.io/ingress.class: addon-http-application-routing
- クラスターへのアクセスが許可されるホストの完全修飾ドメイン名 (FQDN) を設定します。
Azure Cloud Shell
$ az aks show \
-g $RESOURCE_GROUP \
-n $CLUSTER_NAME \
-o tsv \
--query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName
3bed7d8e4a5f4cbfa2d3.japaneast.aksapp.io # これをコピー
- <zone-name> プレースホルダーの値を、コピーした ZoneName の値に置き換えます。
ingress.yaml
#ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: contoso-website
annotations:
kubernetes.io/ingress.class: addon-http-application-routing
spec:
rules:
- host: contoso.3bed7d8e4a5f4cbfa2d3.japaneast.aksapp.io # 書き換え後
- バックエンド構成をイングレス規則に追加します。
ingress.yaml
#ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: contoso-website
annotations:
kubernetes.io/ingress.class: addon-http-application-routing
spec:
rules:
- host: contoso.3bed7d8e4a5f4cbfa2d3.japaneast.aksapp.io
http:
paths:
- backend: # How the ingress will handle the requests
service:
name: contoso-website # Which service the request will be forwarded to
port:
name: http # Which port in that service
path: / # Which path is this rule referring to
pathType: Prefix # See more at https://kubernetes.io/docs/concepts/services-networking/ingress/#path-types
- VSCode を保存して閉じます。
イングレスをデプロイする
- イングレス マニフェストをクラスターに送信します。
Azure Cloud Shell
$ kubectl apply -f ./ingress.yaml
ingress.networking.k8s.io/contoso-website created
- デプロイが成功したかどうかを確認します。
ADDRESS が空欄の場合はもう一度コマンドを実行する。ゾーンレコードの作成に時間がかかるみたい。
Azure Cloud Shell
$ kubectl get ingress contoso-website
NAME CLASS HOSTS ADDRESS PORTS AGE
contoso-website <none> contoso.3bed7d8e4a5f4cbfa2d3.japaneast.aksapp.io 20.210.77.253 80 72s
- ブラウザを開き、表示されたFQDNにアクセスする。
できました!
リソースのクリーンアップ
お金がかかるのでリソースを削除します。
-
Azure Portal から作成したリソースグループを特定して、『リソースグループの削除』をクリック
-
リソース グループの名前を入力して削除ボタンをクリックします。
-
削除されたクラスター コンテキストを削除します。
Azure Cloud Shell
$ kubectl config delete-context aks-contoso-video
warning: this removed your active context, use "kubectl config use-context" to select a different one
deleted context aks-contoso-video from /home/user/.kube/config
これで完了です。
終わりに
いろいろムズカシイですが頑張って慣れていこうと思います。。。👻
Discussion