MS_AKS - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- æ»ãïŒAzureã®PaaSïŒCaaSïŒïŒ
- Azure Kubernetes Service (AKS)
- Azure Container Instances (ACI)
- Azure Web App for Containers
- Azure Functions on Docker
- Tools: Visual Studio Kubernetes Tools
- Container Registry: Azure Container Registry / Microsoft Container Registry
Azure ã® ãããŒãžã Kubernetes(k8s)ã
- Azure Kubernetes Service (AKS) 㯠k8s ã®ããŒãã®å©çšã«å¯ŸããŠã ã課éãè¡ãã
Azure ã®ãµãŒãã¹ã -
ãã¹ã¿ãŒããŒãã k8s ã®ããŒãžã§ã³ç®¡çãå¿
èŠãªããŒã«é¡ã®æäŸã¯
å šãŠ Azure ã®æ©èœãšçµ±åãã Microsoft ã管çããã
è£è¶³ïŒãããŒãžã k8s ã®äŸ¡å€ïŒ: k8s ã¯ãã³ã³ãããŒã« ãã¬ãŒã³ã®éçšã
æãé¢åããšããæ§è³ªããããAKS ã¯ããã Microsoft ãæã€ã
æ§æèŠçŽ èªå k8s AKS API Server / etcd / ã¹ã±ãžã¥ãŒã© èªåã§åé·åã»ããã¯ã¢ããã»æŽæ° Microsoft ã管çïŒç¡åïŒ ã¯ãŒã«ãŒ ããŒãïŒVMïŒ èªå èªåïŒVM åã®èª²éïŒ k8s ã®ããŒãžã§ã³ ã¢ãã èªåã§æé ãçµã az aks upgradeãç¡åãªã®ã¯ã³ã³ãããŒã« ãã¬ãŒã³ã ãããšããç¹ãè²»çšèšèšã®èŠç¹ã«ãªã
ïŒSLA ãä»ããå Žå㯠Standard 以äžã®æåãã£ã¢ãèŠãïŒã
以äžã倪åã®èŠåºãã¯ãªã¹ã¿ãŒãïŒåå®è¡ïŒãå¿
èŠãªæé ã瀺ã
ïŒå
ããŒãžã§ã¯æ±æžãã§è¡šçŸãããŠããïŒã
KubernetesïŒéçºåºç€éšäŒ WikiïŒãåç §ã
Kubernetes ã®ã¢ãŒããã¯ãã£ã«è¿œå ãããã¢ãŒããã¯ãã£ã
- Azure Virtual Machine Scale Sets (VMSS)
- AKS åºç€ã®å¶åŸ¡ãã¬ãŒã³åŽã«ãã
ïŒAKSãã»ãã¥ã¢ã«å©çšããããã®ãã¯ãã«ã«ãªãã¡ã¬ã³ã¹ïŒã - å®è¡ããŒãåŽã«æãåºãããŒãã®ããŒã«ã
- ããŒãããŒã«å
ã®ããŒãã¯
- ããŒãããŒã«ã«æå±ããã
- ç°ãªã VM ã§æ§æã§ããã
è£è¶³ïŒããŒãããŒã«ãåããçç±ïŒ: 1 ã¯ã©ã¹ã¿ã«è€æ°ã®ããŒãããŒã«ã
æãŠãããšã AKS ã®å®åäžã®åŒ·ã¿ã«ãªãã
åããèŠ³ç¹ äŸ OS Linux ããŒã« + Windows Server ã³ã³ããããŒã« ã¹ãã㯠éåžžã¯ãŒã¯ããŒãçš + GPU / ã¡ã¢ãªæé©åããŒã« åœ¹å² ã·ã¹ãã ããŒãããŒã«ïŒCoreDNS çïŒãš ãŠãŒã¶ãŒ ããŒãããŒã« 課é éåžž + ã¹ããã VMïŒäžæå¯ã®ãããçšïŒ ããŒãã®å²ãåœãŠã¯
nodeSelector/taintãštolerationã§å¶åŸ¡ããã
æ¬ããŒãžã® ASP.NET Core ã®äŸã«åºãŠãã
nodeSelector: "beta.kubernetes.io/os": linuxããã®æå°åœ¢ã§ããã
AKS ã®ã³ã³ããã»ã¬ãžã¹ããªïŒVisual Studio Tools for DockerïŒã¯ã
Azure Container Registry (ACR) ãšèšãã
- Azureãããã¯ãŒã¯ã®åºç€çãªæ
å ± â Azure /
Azureã®ä»®æ³ãããã¯ãŒã¯ - ãã¯ãã«ã«ãªãã¡ã¬ã³ã¹ïŒãããã¯ãŒã¯æ§æïŒ
- ACRïŒã³ã³ããã»ã¬ãžã¹ããªïŒããã©ã€ããŒãåããã
- Azure SQL Databaseããã©ã€ããŒãåããã
- AKSã®ã¢ãŠãããŠã³ããAzure Firewallã§å¶éããã
- ãã©ã€ããŒãAKSã¯ã©ã¹ã¿ãäœæããã
- â» OA-LANãšAzureã®VNETã®åé¢
- ãã¯ãã«ã«ãªãã¡ã¬ã³ã¹ïŒèªèšŒã»èªå¯ïŒ
-
ãµãŒãã¹ ããªã³ã·ãã«ãš
Managed ID - AKSã¯ã©ã¹ã¿äœæã»æäœã«å¿ èŠãªæš©é
- AzADã«ããæ¡ä»¶ä»ãã¢ã¯ã»ã¹æ©èœãæ§æããã
- AKS Master APIã«AzADèªèšŒãçµ±åããã
- AKSãŠãŒã¶ã»ã¢ããªããã®ãªãœãŒã¹ã»ã¢ã¯ã»ã¹
ç§»è¡ã¡ã¢ïŒææ°åïŒãµãŒãã¹ ããªã³ã·ãã«ãã Managed IDïŒ: æ¬ããŒãžã®
ãã¥ãŒããªã¢ã«ã¯--service-principal/--client-secretã§
ã¯ã©ã¹ã¿ãäœæããŠããããçŸåšã®æ¢å®ã¯
ãããŒãžã ID ã§ãã
ïŒaz aks createã¯æå®ããªããã°ãããŒãžã ID ã䜿ãïŒã
ãµãŒãã¹ ããªã³ã·ãã« ãããŒãžã ID ã·ãŒã¯ã¬ãã èªåã§ç®¡çã»å€±å¹å¯Ÿå¿ãå¿ èŠ äžèŠïŒAzure ã管çïŒ æéåã 1 幎ã§åããŠäºæ ã«ãªãïŒæ¢å®ïŒ ç¡ã ACR 飿º role assignmentãèªåã§--attach-acrã§èªåæ¬ããŒãžã§ããã¹ã¯ãŒããã¡ã¢ããŠãããªããšåå©çšãäžå¯èœããš
æžãããŠããæéãã®ãã®ãããããŒãžã ID ã§ã¯çºçããªãã
æ°èŠã«çµããªããããŒãžã ID äžæã§ãã
ïŒAzureã®ã¹ãã¬ãŒãžãKey Vaultãšåã倿ïŒã
- ãã¯ãã«ã«ãªãã¡ã¬ã³ã¹ïŒåºç€ä¿å®ïŒ
- AKSã®ããŒãžã§ã³ããµããŒããåºç€ä¿å®ã«ã€ããŠã
- ãã¯ãã«ã«ãªãã¡ã¬ã³ã¹ïŒéçºïœãããã€ïŒ
- ACRïŒã³ã³ããã»ã¬ãžã¹ããªïŒããã©ã€ããŒãåããã
- CI/CD
- K8sã®ãã€ã³ã / AKSã®ãã€ã³ã
ïŒAKSãã»ãã¥ã¢ã«å©çšããããã®ãã¯ãã«ã«ãªãã¡ã¬ã³ã¹ïŒ
- Docker for Windowsã䜿ããããã«ããŠããã
- Azure
- ãµãã¹ã¯ãªãã·ã§ã³ãå©çšå¯èœã«ããŠããã
- Azure CLIïŒã€ã³ã¹ããŒã« â ç¢ºèª â ãã°ã€ã³ïŒ
- Kubernetes CLI ã®ã€ã³ã¹ããŒã«
az aks install-cli- ç°å¢å€æ°ã®ç»é²
set PATH=%PATH%;C:\Users\nishi\.azure-kubectl- Kubernetes CLI ã®ç¢ºèª
kubectl version
Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.8", ...- git clone ã§ãœãŒã¹ã³ãŒããååŸã
git clone https://github.com/Azure-Samples/azure-voting-app-redis.git
cd azure-voting-app-redis- docker-compose ã§ã€ã¡ãŒãžãå®è¡ã
docker-compose up -d-
ãã©ãŠã¶ã§ã¢ã¯ã»ã¹ãæç¥šã¢ããªãåäœç¢ºèªã
http://localhost:8080 -
åäœç¢ºèªãå®äºãããã³ã³ãããçµäºã
docker-compose downã³ã³ããã»ã¬ãžã¹ã㪠â Azure Container Registry (ACR)
- ãã°ã€ã³
az login
You have logged in. Now let us find all the subscriptions to which you have access...- ãµãã¹ã¯ãªãã·ã§ã³ã確èªããŠéžæ
az account list # äžèЧ
az account set -s <subscription id> # éžæ
az account show # 確èª- ãªãœãŒã¹ã»ã°ã«ãŒãã®äœæ
az group create --name daisukenishino --location japaneast- ã³ã³ããã»ã¬ãžã¹ããªïŒACRïŒã®äœæ
az acr create --resource-group daisukenishino --name daisukenishinoacr --sku basic- ã³ã³ããã»ã¬ãžã¹ããªïŒACRïŒãžãã°ã€ã³
az acr login -n daisukenishinoacr
Login Succeeded- ã³ã³ããã»ã¬ãžã¹ããªïŒACRïŒã®ãã°ã€ã³ã»ãµãŒãåãååŸ
az acr list --resource-group daisukenishino --query "[].{acrLoginServer:loginServer}" --output table
AcrLoginServer
----------------------------
daisukenishinoacr.azurecr.io- ã³ã³ããã»ã€ã¡ãŒãžã®ç¢ºèª â ã¿ã°ãæŽæ° â ããã·ã¥
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
azure-vote-front latest 63465cde7b05 7 days ago 965MB
docker tag azure-vote-front daisukenishinoacr.azurecr.io/azure-vote-front:v1
docker push daisukenishinoacr.azurecr.io/azure-vote-front:v1- ããã·ã¥ããã€ã¡ãŒãžã確èª
az acr repository list --name daisukenishinoacr --output table
Result
----------------
azure-vote-front
az acr repository show-tags --name daisukenishinoacr --repository azure-vote-front --output table
Result
--------
v1- ãµãŒãã¹ã»ããªã³ã·ãã«ã®äœæ
az ad sp create-for-rbac --skip-assignment
{
"appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"displayName": "azure-cli-2019-12-12-08-08-32",
"name": "http://azure-cli-2019-12-12-08-08-32",
"password": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}ãã€ã³ã
- äžèšã®å€ã¯ä»¥äžã®ã³ãã³ããã確èªã§ãã
ïŒåºåãã¡ã€ã«ãdisplayNameã® "azure-cli-" ãé Œãã«æ€çŽ¢ïŒã
az ad sp list > sp_list.txt- äžåºŠäœæããããResourceGroup ãåé€ããŠãæ®ã£ãŠããã®ã§åå©çšå¯èœã
- ãã ããåè¿°ã®ãã¹ã¯ãŒãïŒã·ãŒã¯ã¬ããïŒãã¡ã¢ããŠãããªããšåå©çšãäžå¯èœã
- ãã®å Žåã以äžã®ã³ãã³ãã䜿çšããŠäžåºŠåé€ãåäœæããã
az ad sp delete --id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Removing role assignmentsç§»è¡ã¡ã¢ïŒã³ãã³ãã®å€æŽïŒ:
az ad sp create-for-rbacã®
--skip-assignmentã¯éæšå¥šãšãªããçŸåšã¯
--role/--scopesãæå®ããªããã°ããŒã«ãå²ãåœãŠãããªã
ïŒïŒæ¢å®ããå²ãåœãŠãªããã«ãªã£ãïŒã
ãŸãåºåã®nameããããã£ã¯å»æ¢ãããappIdã䜿ãã
- ACR ã«æš©éãä»äžããã
rem ACR ã®ãªãœãŒã¹åïŒãªãœãŒã¹ IDïŒãååŸ
az acr show --resource-group daisukenishino --name daisukenishinoacr --query "id" --output tsv
/subscriptions/xxxx.../resourceGroups/daisukenishino/providers/Microsoft.ContainerRegistry/registries/daisukenishinoacr
rem ãµãŒãã¹ã»ããªã³ã·ãã«ã« ACR ã® acrpull æš©éãä»äž
az role assignment create --assignee "<appId>" --scope "<acrId>" --role acrpull-
ã¯ã©ã¹ã¿ã®äœæ
äœææãSSH ããŒããŠãŒã¶ãŒãã£ã¬ã¯ããªã®.sshã«äœæãããã
az aks create --resource-group daisukenishino --name daisukenishinoaks --node-count 2 ^
--service-principal "<appId>" --client-secret "<password>" --generate-ssh-keys
SSH key files 'C:\Users\nishi\.ssh\id_rsa' and 'C:\Users\nishi\.ssh\id_rsa.pub' have been generated ...- ã¯ã©ã¹ã¿ãžã®æ¥ç¶ïŒåæ: Kubernetes CLI ãã€ã³ã¹ããŒã«ãããŠããããšïŒ
az aks get-credentials --resource-group daisukenishino --name daisukenishinoaks
Merged "daisukenishinoaks" as current context in C:\Users\nishi\.kube\config- æ¥ç¶ç¢ºèªïŒããŒããååŸïŒ
kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-nodepool1-nnnnnnnn-vmss000000 Ready agent 21m v1.13.12
aks-nodepool1-nnnnnnnn-vmss000001 Ready agent 21m v1.13.12
kubectl get nodes -o wide # ä»å æ
å ±
kubectl describe node <NodeName> # ããŒãæ
å ±- ããŒãžã§ã³ã®ç¢ºèªïŒServer ã衚瀺ãããããã«ãªãïŒ
kubectl version
Client Version: version.Info{Major:"1", Minor:"14", ...}
Server Version: version.Info{Major:"1", Minor:"13", ...}- ã¯ã©ã¹ã¿ã»åå空éã»ãµãŒãã¹ã®ç¢ºèª
kubectl cluster-info
kubectl config get-contexts # ã¯ã©ã¹ã¿ã®äžèЧïŒè€æ°ã¯ã©ã¹ã¿ããå ŽåïŒ
kubectl get namespaces
kubectl get services -o wide- K8s ããã·ã¥ããŒããã確èª
kubectl create clusterrolebinding kubernetes-dashboard ^
--clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard
az aks browse --resource-group daisukenishino --name daisukenishinoaks
Proxy running on http://127.0.0.1:8001/ç§»è¡ã¡ã¢ïŒææ°åïŒããã·ã¥ããŒãã¯å»æ¢ïŒ:
az aks browseãš
Kubernetes ããã·ã¥ããŒã ã¢ããªã³ã¯ AKS ããåé€ãããŠãã
ïŒk8s 1.19 以éã®ã¯ã©ã¹ã¿ã§ã¯å©çšäžå¯ïŒã
çŸåšã®ä»£æ¿ã¯æ¬¡ã®ãšããã
çšé ä»£æ¿ ã¯ã©ã¹ã¿ã®åç §ã»æäœ Azure ããŒã¿ã«ã®ãKubernetes ãªãœãŒã¹ããã¥ãŒ ã¡ããªãã¯ã»ãã° Container InsightsïŒAzure MonitorïŒ ããŒã«ã« GUI Lens / k9s ç ãªããæ¬ããŒãžã®ããã«
cluster-adminã
ããã·ã¥ããŒãã®ãµãŒãã¹ ã¢ã«ãŠã³ããžä»äžããæé ã¯ã
æ¬çªã§ã¯çµ¶å¯Ÿã«è¡ã£ãŠã¯ãªããªãïŒããã·ã¥ããŒãçµç±ã§
ã¯ã©ã¹ã¿å šæš©ãåãããå žåçãªäºæ ãã¿ãŒã³ã§ããïŒã
- Azure ããŒã¿ã«ãã確èª
ãããŸã§ãã£ãããAzure ããŒã¿ã«ãã resourceãresource-group ã
確èªããŠã¿ãŠãã€ã€ã
- ãããã€ã»ãããã§ã¹ããæŽæ°ïŒ
azure-vote-all-in-one-redis.yamlã®ç·šéïŒ
ã€ã¡ãŒãžã®åºæã ACR ã®ãã°ã€ã³ã»ãµãŒãåã«å€æŽããã
# 倿Žå
containers:
- name: azure-vote-front
image: microsoft/azure-vote-front:v1
# 倿ŽåŸ
containers:
- name: azure-vote-front
image: daisukenishinoacr.azurecr.io/azure-vote-front:v1- ãããã§ã¹ãã®é©çš
kubectl apply -f azure-vote-all-in-one-redis.yaml
deployment.apps/azure-vote-back created
service/azure-vote-back created
deployment.apps/azure-vote-front created
service/azure-vote-front createdãããã€ã»ãããã§ã¹ãã¯ä»¥äžã® 4 ã»ã¯ã·ã§ã³ã§æ§æãããŠããã
- ããã¯ãšã³ãïŒRedisïŒã®ãããã€ã¡ã³ãã®äœæ
- ããã¯ãšã³ãïŒRedisïŒã«å¯ŸãããµãŒãã¹ã®äœæ
- ããã³ããšã³ãã»ã¢ããªã®ãããã€ã¡ã³ãã®äœæ
- ããã³ããšã³ãã»ã¢ããªã«å¯ŸãããµãŒãã¹ã®äœæ
- ã¢ããªã±ãŒã·ã§ã³ããã¹ãããïŒé²è¡ç¶æ³ãç£èŠïŒ
kubectl get service azure-vote-front --watch
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-vote-front LoadBalancer 10.0.121.183 <pending> 80:31338/TCP 50sEXTERNAL-IP ãå²ãåœãŠãããããã©ãŠã¶ããã¢ã¯ã»ã¹ããã
- k8s ã§ã®åäœã確èªãã
kubectl get deployments -o wide
kubectl describe deployment azure-vote-front
kubectl describe replicaset azure-vote-front-xnnnnnnx
kubectl get pods -o wide
kubectl describe pods <PodName>
kubectl get services -o wide
kubectl describe service azure-vote-front- ããããæåã¹ã±ãŒãªã³ã°ïŒãããã€ã»ãããã§ã¹ãã«å¯ŸããŠãããæ°ãæç€ºçã«æå®ïŒ
kubectl scale --replicas=5 deployment/azure-vote-front
deployment.extensions/azure-vote-front scaled
kubectl get deployments -l app=azure-vote-front
kubectl get replicasets -l app=azure-vote-front
kubectl get pods -l app=azure-vote-front -o wideå
ã«æ»ãå Žå㯠--replicas=1 ã«å€æŽããã
- ããããèªåã¹ã±ãŒãªã³ã°ïŒéŸå€ãçšããŠãèªåã§ã®ã¹ã±ãŒã«ã¢ãŠãïŒ
rem CPU ã®äœ¿çšçãéŸå€ã«æå®
kubectl autoscale deployment azure-vote-front --cpu-percent=50 --min=3 --max=10
horizontalpodautoscaler.autoscaling/azure-vote-front autoscaled
rem èšå®ã®ç¢ºèªïŒhpa 㯠horizontal pod autoscalers ã®ç¥ïŒ
kubectl get hpa --watch
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
azure-vote-front Deployment/azure-vote-front 0%/50% 3 10 3 5m29sazure-vote-front ã® pod ãå¢ããŠããç
ïŒå¿
èŠã«å¿ããŠåŸè¿°ã®è² è·ãã¹ãã宿œïŒã
è£è¶³ïŒHPA ã«ã¯
resources.requestsãèŠãïŒ:--cpu-percentã¯
requests.cpuã«å¯Ÿããå²åã§ããããããã£ãŠã
Pod ã«resources.requestsãèšå®ããŠããªããš HPA ã¯åããªã
ïŒã¡ããªãã¯ã<unknown>ã®ãŸãŸã«ãªãïŒã
æ¬ããŒãžåŸåã® ASP.NET Core ã®ãããã§ã¹ãã§ã¯
requests: cpu: "250m"ãæå®ããŠããããã®åœ¢ãæ£ããã
ããããå¢ããå ŽåãããŒããäžè¶³ããã®ã§ãããŒãã远å ããå¿ èŠãããã
- ããŒãã®æåã¹ã±ãŒã«
az aks scale --resource-group daisukenishino --name daisukenishinoaks --node-count 3
kubectl get nodes- ããŒãã®èªåã¹ã±ãŒã«
ãã¬ãã¥ãŒãšããŠããŒãã®èªåã¹ã±ãŒã«ããµããŒãã
ç§»è¡ã¡ã¢ïŒææ°åïŒ: ã¯ã©ã¹ã¿ãŒ ãªãŒãã¹ã±ãŒã©ãŒã¯ GA æžã¿ã§ãã
ïŒaz aks update --enable-cluster-autoscaler --min-count --max-countïŒã
ããã«çŸåšã¯ãããŒãããŒã«ã®ç®¡çèªäœã Azure ã«ä»»ãã
ããŒãã®èªåããããžã§ãã³ã°ïŒNAP / Karpenter ããŒã¹ïŒ ãæäŸãããããªããPodïŒHPAïŒãšããŒãïŒCluster AutoscalerïŒã®2 段éã§ããç¹ã¯
æ¬ããŒãžã®æ§æã®ãšããã§ãçŸåšãå€ãããªãã
- ã¹ã±ãŒãªã³ã°ç¶æ³ãç£èŠ
kubectl get pods -o wide --watch- è² è·ãã¹ãïŒå¥çªããïŒ
kubectl run -i --tty load-generator --image=busybox /bin/sh
/ # while true; do wget -q -O- http://xxx.xxx.xxx.xxx/; done
rem çµäºããã«ã¯ ctrl+c ãæŒäžããã
/ # exit- ç Žæ£
kubectl delete deployments load-generator
deployment.extensions "load-generator" deleted-
ããŒã«ã«ã§ã®æŽæ°äœæ¥
azure-voteå ã®config_file.cfgã®ã¿ã€ãã«éšåãå€æŽ â
docker-compose up --build -dâdocker-compose up -dâ
http://localhost:8080 ã§ç¢ºèªã -
ACR ã«ç»é²
docker tag azure-vote-front daisukenishinoacr.azurecr.io/azure-vote-front:v2
az acr login -n daisukenishinoacr
docker push daisukenishinoacr.azurecr.io/azure-vote-front:v2
az acr repository show-tags --name daisukenishinoacr --repository azure-vote-front --output table
Result
--------
v1
v2- K8s ã§å®è¡ïŒv1 ãããã忢ãã v2 ããããèµ·åããïŒ
rem pods ã確èªãã€ã€
kubectl get pods -o wide --watch
rem ãããã€ã¡ã³ãã®ã€ã¡ãŒãžãæŽæ°ïŒå¥çªããïŒ
kubectl set image deployment azure-vote-front azure-vote-front=daisukenishinoacr.azurecr.io/azure-vote-front:v2
rem ïŒkubectl apply ã䜿çšããæ¹æ³ã§ãå¯ïŒ- v1, v2 ã®ã¬ããªã«ã確èªã§ããã
kubectl get replicasets -o wide -l app=azure-vote-front
NAME DESIRED CURRENT READY AGE IMAGES
azure-vote-front-xxxxxxxxxx 0 0 0 4h17m .../azure-vote-front:v1
azure-vote-front-yyyyyyyyyy 3 3 3 23m .../azure-vote-front:v2-
1 ã€ãã€åŠçãããçç±
ããŒãªã³ã°ã¢ããããŒãã®å®çŸ©ã以äžã®ããã«ãªã£ãŠããããã
kubectl describe deploy
...
RollingUpdateStrategy: 1 max unavailable, 1 max surge
...- ã¢ããã°ã¬ãŒãå¯èœããŒãžã§ã³ã®ç¢ºèª
az aks get-upgrades --resource-group daisukenishino --name daisukenishinoaks
{
"controlPlaneProfile": {
"kubernetesVersion": "1.13.12",
"upgrades": [ { "kubernetesVersion": "1.14.7" }, { "kubernetesVersion": "1.14.8" } ]
},
...
}- ã¢ããã°ã¬ãŒãã®å®è¡
az aks upgrade --resource-group daisukenishino --name daisukenishinoaks --kubernetes-version 1.14.7
Kubernetes may be unavailable during cluster upgrades.
Are you sure you want to perform this operation? (y/n): y
Since control-plane-only argument is not specified, this will upgrade the
control plane AND all nodepools to version 1.14.7. Continue? (y/N): y- ã¢ããã°ã¬ãŒãã®æ€èšŒïŒå床
az aks get-upgradesïŒâ
EXTERNAL-IPãç¢ºèª â ãã©ãŠã¶ã§ãã¹ãã
è£è¶³ïŒã¢ããã°ã¬ãŒãã¯ãã€ã㌠1 ã€ãã€ïŒ: k8s ã®
ãã€ã㌠ããŒãžã§ã³ã¯é£ã°ããªãïŒ1.13 â 1.15 ã¯äžå¯ã
1.13 â 1.14 â 1.15 ãšäžããïŒãæ¬ããŒãžã§ 1.13.12 ãã
1.14.7 ãžäžããŠããã®ã¯ãã®ããã§ããããŸã AKS ã®ãµããŒã ããªã·ãŒã¯ N-2ïŒææ°ãã 2 ãã€ããŒåãŸã§ïŒã§ã
ãããã幎 3 åã®ãã€ã㌠ãªãªãŒã¹ããããã€ãŸã
ã¯ã©ã¹ã¿ã¯æŸçœ®ã§ããã宿çãªã¢ããã°ã¬ãŒãéçšãåæã«ãªãã
ããŒãåŽã¯--control-plane-onlyã§åé¢ããŠæ®µé宿œã§ããã
- ã¯ã©ã¹ã¿ã®åé€
az group delete --name daisukenishino --yes --no-waitAzure ããŒã¿ã«ããã確èªãããšè¯ãã
-
MC_ããå§ãŸã ResourceGroup ãäœæãããŠãã
ïŒMC_ResourceGroupName_AKSName_AzureLocationNameïŒã - ããã«ã¯ãnodes ããã¹ããã VM ãå«ãŸãããããã
- äŸåé¢ä¿ããããããã
az group deleteãããšäžç·ã«æ¶ããã
- Azure Data Studio ãã€ã³ã¹ããŒã«ããŠããã
https://learn.microsoft.com/sql/azure-data-studio/download-azure-data-studio - ã(3) Kubernetesã¯ã©ã¹ã¿ãäœæããŸã§ãè¡ãã
ã³ã³ããã»ã¬ãžã¹ããªãš Kubernetes ã¯ã©ã¹ã¿ãäœæããŠããã
ç§»è¡ã¡ã¢ïŒææ°åïŒ: Azure Data Studio 㯠2026幎2æã«å»æ¢ããã
åŸç¶ã¯ Visual Studio Code ã® MSSQL æ¡åŒµæ©èœã§ãã
ïŒVisual Studio CodeïŒã
å
ãã¯ãã¹ãã¬ãŒãžãšããŠãæ°žç¶ããªã¥ãŒã ãäœæãã
ïŒéæ°žç¶ããªã¥ãŒã ã®ç¢ºèªã¯ãåŸè¿°ã® Qiita ã®èšäºã®æé ã確èªããã ãã«çããïŒã
以äžã®æ§ã«ãmssql-storage.yaml ãäœæããã
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
name: azure-disk
provisioner: kubernetes.io/azure-disk
parameters:
storageaccounttype: Premium_LRS
kind: Managed
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mssql-data
annotations:
volume.beta.kubernetes.io/storage-class: azure-disk
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi-
kind: StorageClassïŒååã¯ã¹ãã¬ãŒãžã»ã¯ã©ã¹çšïŒ-
metadata.name: azure-disk: ååã¯azure-disk -
provisioner: kubernetes.io/azure-disk:
ã¹ãã¬ãŒãžå®è¡ãµãŒãã¹ãšã㊠Azureã®ãã£ã¹ã¯ ã¹ãã¬ãŒãžãæå®- Azure Disk: 1 ã€ã®ãããã®ã¿ãã¢ã¯ã»ã¹ããå Žå
- Azure Files: è€æ°ã®ãããããã¢ã¯ã»ã¹ããå Žå
-
parameters: æž¡ããã©ã¡ã¿ãæå®-
kind: Managed: 管çãã£ã¹ã¯ -
storageaccounttype: Premium_LRS: ã¹ãã¬ãŒãžã® sku
-
- ãã®ä»:
ReclaimPolicyã®èšå®ããªããããæ¢å®ã®Deleteãé©çš
-
-
kind: PersistentVolumeClaimïŒåŸåã¯æ°žç¶ããªã¥ãŒã èŠæ±çšïŒ-
metadata.name: mssql-data/annotationsã§ã¹ãã¬ãŒãžã»ã¯ã©ã¹ãæå® -
spec.accessModes: ReadWriteOnce:
ããªã¥ãŒã ã«å¯Ÿããã¢ã¯ã»ã¹ïŒ1 ã€ã®ãããã®ã¿ãã¢ã¯ã»ã¹ïŒ -
spec.resources.requests.storage: 8Gi: 容éãæå®
-
ç§»è¡ã¡ã¢ïŒææ°åïŒAPI ãšããããžã§ããŒïŒ: æ¬ãããã§ã¹ãã¯
å·çåœæã®ãã®ã§ãçŸåšã¯æ¬¡ã®ããã«æžãæãã£ãŠããã
é ç® åœæ çŸåš API storage.k8s.io/v1beta1storage.k8s.io/v1ããããžã§ã㌠kubernetes.io/azure-diskïŒin-treeïŒdisk.csi.azure.comïŒCSI ãã©ã€ãïŒã¯ã©ã¹æå® annotationsã®storage-classspec.storageClassNamein-tree ã®ããªã¥ãŒã ãã©ã°ã€ã³ã¯ k8s æ¬äœããåé€ãããŠããã
AKS ã§ã¯ CSI ãã©ã€ããæ¢å®ã§ãã
ïŒmanaged-csi/managed-csi-premiumçã®çµèŸŒã¿ StorageClass ãããïŒã
èãæ¹ïŒStorageClass â PVC â PodïŒã¯åœæãšå€ãããªãã
- é©çšãšç¢ºèª
kubectl apply -f mssql-storage.yaml
storageclass.storage.k8s.io/azure-disk created
persistentvolumeclaim/mssql-data created
kubectl get pv # æ°žç¶ããªã¥ãŒã
kubectl get sc -o wide # ã¹ãã¬ãŒãžã»ã¯ã©ã¹
kubectl get pvc # æ°žç¶ããªã¥ãŒã èŠæ±
kubectl describe pvc mssql-dataAzure ããŒã¿ã«ããã¯ãMC_ ããå§ãŸã ResourceGroup ã®äžã«ã
ãkubernetes-dynamic-pvc-...ãã®ãã£ã¹ã¯ã確èªã§ããã
- åé€ïŒæ°žç¶ããªã¥ãŒã èŠæ±ãåé€ãããšãæ°žç¶ããªã¥ãŒã ãåé€ãããïŒ
kubectl delete pvc mssql-data
persistentvolumeclaim "mssql-data" deleted
kubectl get pv
No resources found.è£è¶³ïŒ
Deleteã®æãïŒ: äžèšã®ãšããReclaimPolicyãæ¢å®ã®
Deleteã ãšãPVC ãæ¶ããç¬éã« Azure ã®ãã£ã¹ã¯ããšæ¶ããã
æ€èšŒã§ã¯äŸ¿å©ã ããæ¬çªã§ã¯Retainãæå®ããŠ
ãPVC ãæ¶ããŠãããŒã¿ã¯æ®ããç¶æ ã«ããã®ãå®ç³ã§ãã
ïŒSQL Serverã®ããã¯ã¢ãããšäœµããŠèšèšããïŒã
ã·ãŒã¯ã¬ããã®äœæã SQL Server 2017 ã®é 眮ã
- ã·ãŒã¯ã¬ããã®äœæ
kubectl create secret generic mssql --from-literal=SA_PASSWORD="xxxxx"
secret/mssql created
rem 確èªïŒå€ã¯ Base64 ãšã³ã³ãŒããããŠããïŒ
kubectl get secret mssql -o yamlè£è¶³ïŒSecret ã¯æå·åã§ã¯ãªãïŒ:
kubectl get secret -o yamlã§
Base64 ãæ»ãã°å¹³æãèªãããSecret ã¯ã笊å·åãã§ãã£ãŠ
ãæå·åãã§ã¯ãªããå®éçšã§ã¯æ¬¡ã®ããããã䜿ãã
ææ®µ å 容 Key Vault ãããã€ããŒïŒCSIïŒ Key Vaultã®å€ã Pod ã«ããŠã³ã etcd æå·å AKS ã§ã¯æ¢å®ã§ä¿åææå·åããã RBAC Secret ã® getæš©éãçµãïŒãããæéèŠïŒç¹ã«ãåŸè¿°ã® ASP.NET Core ã®äŸã®ããã«
Base64 å€ã YAML ã«çŽæžãããŠãªããžããªã«å ¥ããã®ã¯é¿ãããã
- SQL Server 2017 ã®é
眮ïŒ
sqldeployment.yamlïŒ
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: mssql-deployment
spec:
replicas: 1
template:
metadata:
labels:
app: mssql
spec:
terminationGracePeriodSeconds: 10
containers:
- name: mssql
image: mcr.microsoft.com/mssql/server:2017-latest
ports:
- containerPort: 1433
env:
- name: MSSQL_PID
value: "Developer"
- name: ACCEPT_EULA
value: "Y"
- name: MSSQL_SA_PASSWORD
valueFrom:
secretKeyRef:
name: mssql
key: SA_PASSWORD
volumeMounts:
- name: mssqldb
mountPath: /var/opt/mssql
volumes:
- name: mssqldb
persistentVolumeClaim:
claimName: mssql-data
---
apiVersion: v1
kind: Service
metadata:
name: mssql-deployment
spec:
selector:
app: mssql
ports:
- protocol: TCP
port: 1433
targetPort: 1433
type: LoadBalancer-
containers.env: ã³ã³ããã«æž¡ãåçš®åŒæ°ãæå®-
MSSQL_PID="Developer"ïŒSQL Server Developer EditionïŒ -
ACCEPT_EULA="Y" -
MSSQL_SA_PASSWORD: äœæããã·ãŒã¯ã¬ããã¯valueFrom.secretKeyRefã§ååŸ
-
-
containers.volumeMounts: ããªã¥ãŒã ã/var/opt/mssqlã«ããŠã³ã -
spec.volumes: åé ã§äœæããæ°žç¶ããªã¥ãŒã èŠæ±ãæå® -
é©çšãšç¢ºèª
kubectl apply -f sqldeployment.yaml
deployment.apps/mssql-deployment created
service/mssql-deployment created
kubectl get services
kubectl get pods --watchç§»è¡ã¡ã¢ïŒ
apps/v1beta1ã¯å»æ¢ïŒ:apps/v1beta1ã¯
k8s 1.16 ã§åé€ãããŠãããçŸåšã¯apps/v1ã䜿çšãã
spec.selector.matchLabelsãå¿ é ã§ãã
ïŒæ¬ããŒãžåŸåã® ASP.NET Core ã®ãããã§ã¹ããapps/v1ã®æ£ãã圢ïŒã
- mssql ã«ã¢ã¯ã»ã¹ããŠã¿ãã
- Azure Data Studio ã§æ¥ç¶ïŒãã°ã€ã³ããã
- Connection Type: Microsoft SQL Server
- Server:
<External IP Address> - Authentication: SQL Login
- Account: UID =
SA/ PWD =xxxxxxx
- sqlcmd ãŠãŒãã£ãªãã£ ã§æ¥ç¶ïŒãã°ã€ã³ããã
- Azure Data Studio ã§æ¥ç¶ïŒãã°ã€ã³ããã
sqlcmd -S <External IP Address> -U SA -P "xxxxxxx"-
DDLãDMLïŒINSERTïŒå®è¡
åŸæã®ãinstnwnd.sqlãã䜿çšããŠSELECT * FROM SHIPPERSã§ãå®è¡ãã
ïŒexec sp_dboptionã®éšåã¯æ§ ver åã statement ãªã®ã§
ã³ã¡ã³ãã¢ãŠããããåé€ããïŒã
https://github.com/OpenTouryoProject/OpenTouryo/tree/develop/root/files/resource/Sql/sqlserver -
ãããåé 眮ãè¡ãïŒããã¯ãã¢ããªã§ã¯ãªã DB ã€ã³ã¹ã¿ã³ã¹ã®åèµ·åã«ãªãïŒã
kubectl get pods
kubectl delete pod mssql-deployment-xxxxxxxxxx-xxxxx
kubectl get pods --watchåé 眮åŸãmssql ã«ã¢ã¯ã»ã¹ã§ããïŒæ¥ç¶ïŒãã°ã€ã³ããSELECT ãå®è¡ïŒããšã確èªããã
- ãããã®åé 眮ïŒç°ãªãããŒããžåé 眮ïŒ
rem ããŒãã®äžæåæ¢
kubectl drain aks-nodepool1-nnnnnnnn-vmss000001 --ignore-daemonsets --delete-local-data
node/aks-nodepool1-nnnnnnnn-vmss000001 cordoned
rem 確èªïŒStatus ã« SchedulingDisabled ãšããæåã確èªã§ããïŒ
kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-nodepool1-nnnnnnnn-vmss000000 Ready agent 91m v1.14.8
aks-nodepool1-nnnnnnnn-vmss000001 Ready,SchedulingDisabled agent 91m v1.14.8
rem ããããåé€ããŠã¬ããªã«ã»ããã«ãã£ãŠåé
眮
kubectl delete pod mssql-deployment-yyyyyyyyyy-yyyyy
kubectl get pods -o wide --watchåé
眮åŸãmssql ã«ã¢ã¯ã»ã¹ã§ããããšã確èªããã
Azure ããŒã¿ã«ããã¯ããã£ã¹ã¯ãæ°ããããŒãã«ã¢ã¿ãããããŠããããšã
確èªã§ããïŒãææè
VMãã®æ¬ã«ã倿ŽåŸã® NODE ã® ID ã衚瀺ãããïŒã
- ããŒãã®äžæåæ¢ãè§£é€ïŒåã³åé 眮ããŠãã€ã€ïŒ
kubectl uncordon aks-nodepool1-nnnnnnnn-vmss000001
node/aks-nodepool1-nnnnnnnn-vmss000001 uncordoned- Azure CLI ããã¯ã©ã¹ã¿ã®åé€ãå®è¡
az group delete --name daisukenishino --yes --no-waitè£è¶³ïŒãã®æ€èšŒã瀺ããŠããããšïŒ: ããã§ç¢ºèªããŠããã®ã¯
ãAzure Disk ãå¥ããŒãã«ä»ãæ¿ãã£ãŠãããŒã¿ãæ®ã£ããŸãŸ
Pod ã埩垰ããããšããç¹ã§ããã
äºè±¡ åŸ©æ§ åæ¢æé Pod ã®ç°åžžçµäº ReplicaSet ãåããŒãã§åäœæ çã ããŒãé害 å¥ããŒãã§åäœæ + ãã£ã¹ã¯ä»ãæ¿ã æ°åïŒãã¿ããïŒã¢ã¿ããïŒ ãã ã Azure Disk ã¯
ReadWriteOnceïŒ1 ããŒãã®ã¿ïŒ ãªã®ã§ã
ããã¯åé·åã§ã¯ãªããã§ãŒã«ãªãŒããŒã§ãã
ïŒåé·åã¢ãŒããã¯ãã£ã®åé¡ã§ãã
Active/Standby ã«çžåœãããã®é DB ã¯åæ¢ããïŒã
ç¡åæ¢ãèŠä»¶ãªã Azure SQL Database ã® PaaS ã
SQL Server ã®å¯çšæ§ã°ã«ãŒããæ€èšããããšã«ãªãã
ãªã--delete-local-dataã¯çŸåš--delete-emptydir-dataã«æ¹ç§°ãããŠããã
- Visual Studio 2019 ãŸã㯠dotnet core 3.0 ãå©çšã§ããç°å¢
- ã(3) Kubernetesã¯ã©ã¹ã¿ãäœæããŸã§ãè¡ãã
ã³ã³ããã»ã¬ãžã¹ããªãš Kubernetes ã¯ã©ã¹ã¿ãäœæããŠããã
DB ãäœæããããå
容ã¯ãSQL Serverã®ãšããã³ã¹ããšåãã
以äžã®æ§ã«ãsql2017.yaml ãäœæããã
å·®ç°
- 2 ã€ã®ãããã€ã»ãããã§ã¹ãïŒStorage ãš RDBMSïŒãçµåããã
- DB ã®ã·ãŒã¯ã¬ããäœæåŠçãå«ãŸãã
ïŒ"MyC0m9l&xP@ssw0rd"ã Base64 åããå€ãæå®ããŠããïŒã
# ïŒStorageClass / PersistentVolumeClaim ã¯åè¿°ãšåãã以äžã远å åïŒ
apiVersion: v1
kind: Secret
metadata:
name: mssql
type: Opaque
data:
SA_PASSWORD: "TXlDMG05bCZ4UEBzc3cwcmQ="
---
# ïŒDeployment / Service ãåè¿°ãšåãïŒ- é©çšãšç¢ºèª
kubectl apply -f sql2017.yaml
rem mssql-deployment ã® EXTERNAL-IP ã®ç¢ºèª
kubectl get service --watch
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mssql-deployment LoadBalancer 10.0.100.250 52.156.45.201 1433:30117/TCP 4h19m-
Azure Data Studio ã§ããŒã¿ã远å ïŒåè¿°ïŒ
- IP ã¢ãã¬ã¹: SQL Server ã®ãµãŒãã¹åïŒ
mssql-deploymentïŒã«å€æŽ - ãã¹ã¯ãŒã: äœæããã·ãŒã¯ã¬ããïŒ
MyC0m9l&xP@ssw0rdïŒã«å€æŽ
- IP ã¢ãã¬ã¹: SQL Server ã®ãµãŒãã¹åïŒ
-
æåŸã®
type: LoadBalancerãåé€ããŠåé©çš
ïŒïŒ DB ãã¯ã©ã¹ã¿å€ã«å ¬éããªãããã«ããïŒ- ããŒã«ã«ã§ã¯
10.0.75.1ã§ããªããž
â Docker for Windowsã®ãããã¯ãŒã¯èšå®ã®ãšããã
Docker Desktop 2.2.0 ãã10.0.75.1ã¯äœ¿çšã§ããªããªã£ãŠããã - Docker Compose ã§ã¯ links åã䜿çšãã
ïŒlinks ã¯å€ãã®ã§ networks ã䜿çšããïŒã - AKS ã§ã¯ Service åã䜿çšããã
- ããŒã«ã«ã§ã¯
kubectl apply -f sql2017.yaml --force
rem EXTERNAL-IP ã <none> ã«å€æŽãããããšã確èª
kubectl get service --watch
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mssql-deployment ClusterIP 10.0.254.191 <none> 1433/TCP 6sè£è¶³ïŒåå解決ã®äœæ³ã 3 éãããïŒ: æ¬ããŒãžãæŒãããŠããã®ã¯ã
ãåãã¢ããªã 3 ã€ã®å®è¡ç°å¢ã§åãããšãã«ã
æ¥ç¶å ã®æžãæ¹ã ããå€ããã ãšããç¹ã§ããã
å®è¡ç°å¢ DB ã®æå® ããŒã«ã«ïŒDocker for WindowsïŒ ããªããžã® IP Docker Compose ãµãŒãã¹åïŒ linksânetworksïŒAKS / k8s Service åïŒ mssql-deploymentïŒãããããIP ãçŽæžãããªããããšãèŠç¹ã§ã
æ§æãã¡ã€ã«ïŒ.NET configïŒã§åãæ¿ããããããã«
ããŠããã°ãã³ãŒããå€ããã«ç§»éã§ããã
- ãã¥ãŒããªã¢ã«ã®ãµã³ãã«ã埮åŠãªã®ã§
Visual Studio Kubernetes Toolsã®ãã®ã䜿çšããã - ãã€ã³ã
- voting-app ãšåæ§ã« Redis ã䜿çšãã
ïŒãã¥ãŒããªã¢ã«ã§ã¯ãRedis ã䜿çšããŠããªãïŒã - DBMS ã¯ãSQL Server ã䜿çšãã
ïŒãã¥ãŒããªã¢ã«ã§ã¯ãK8s äžã® DB ãçŽåç §ããããåè¿°ã® 3 éãã®
åå解決ã䜿ãåããïŒã
- voting-app ãšåæ§ã« Redis ã䜿çšãã
- ããŒã«ã«ãDocker Compose ã§ãã¹ãããŠãããAKS ãžãããã€ããã
- 以äžã®æ¥ç¶æååã倿Žããã
- SQL Server
- IP ã¢ãã¬ã¹: SQL Server ã®ãµãŒãã¹åïŒ
mssql-deploymentïŒã«å€æŽ - ãã¹ã¯ãŒã: äœæããã·ãŒã¯ã¬ããïŒ
MyC0m9l&xP@ssw0rdïŒã«å€æŽ
- IP ã¢ãã¬ã¹: SQL Server ã®ãµãŒãã¹åïŒ
- Redis
- IP ã¢ãã¬ã¹: Redis ã®ãµãŒãã¹åïŒ
webapplication1-backïŒã«å€æŽ - ãã¹ã¯ãŒã: ãªã
- IP ã¢ãã¬ã¹: Redis ã®ãµãŒãã¹åïŒ
- SQL Server
services.AddDistributedRedisCache(option =>
{
option.Configuration = "webapplication1-back";
option.InstanceName = "redis";
});-
ã³ã³ããã»ã¬ãžã¹ããªãžã¢ããããŒã
- dotnet core ã®ã¿ãã³ã³ããã»ã¬ãžã¹ããªãžã¢ããããŒã
- Visual Studio ã®çºè¡ã§ãåºæ¥ããããªã®ã§ãã¡ãã䜿çšã
-
Visual Studio ã§çºè¡ïŒã³ã³ããã»ã¬ãžã¹ããªãžã¢ããããŒãïŒæé
- ãããžã§ã¯ããå³ã¯ãªãã¯ãçºè¡ãéžæããã
- ãæ¢åã® ACRããéžæããŠã以äžã®ãã€ã¢ãã°ããçºè¡ãããã

-
ãšã©ãŒãèµ·ããã®ã§ã以äžã®éçºçšã®èšå®ãããŠåå®è¡ã
éçºçšã®èšå®: ã¬ãžã¹ããªã®ç®¡çè ãŠãŒã¶ã®æå¹å
az acr update -n daisukenishinoacr --admin-enabled trueè£è¶³ïŒç®¡çè ãŠãŒã¶ã¯éçºçšã«çããïŒ: æ¬ããŒãžããéçºçšã®èšå®ããš
æèšããŠãããšãããACR ã®ç®¡çè ãŠãŒã¶ãŒã¯æ¬çªã§æå¹åããŠã¯ãªããªã
ïŒã¬ãžã¹ããªå šäœã«å¯Ÿããåäžã®ãŠãŒã¶ãŒåïŒãã¹ã¯ãŒãã§ããã
誰ã䜿ã£ãã远跡ã§ããªãïŒã
çšé æšå¥š AKS ããã® pull az aks update --attach-acrïŒãããŒãžã IDïŒCI/CD ããã® push ãµãŒãã¹ ããªã³ã·ãã« + AcrPushããŒã«éçºè ã®æå az acr loginïŒEntra ID ã®ããŒã¯ã³ïŒ
- ã€ã¡ãŒãžã確èªããã
rem ããŒã«ã«
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
daisukenishinoacr.azurecr.io:443/webapplication1 latest f8253a6af02f 17 minutes ago 354MB
webapplication1 latest f8253a6af02f 17 minutes ago 354MB
rem ãªã¢ãŒã
az acr repository list --name daisukenishinoacr --output table
az acr repository show-tags --name daisukenishinoacr --repository webapplication1 --output table- ã¿ã°ãèšå®ããã
çŽãã«çºè¡ããªãã§ãããã¡ã€ã«äœæãéžæãããšãååãããã¡ããéžæå¯èœã

- åé€
rem ããŒã«ã«
docker rmi <IMAGE ID> -f
rem ãªã¢ãŒã
az acr repository delete --name daisukenishinoacr --image webapplication1:latest- åçºè¡ããŠã€ã¡ãŒãžã確èªãããšãã¿ã°ã
latestãã
yyyymmddhhmmssã«ãªã£ãŠããããšã確èªã§ããã
è£è¶³ïŒ
latestã¿ã°ã䜿ããªãïŒ: ã¿ã°ãyyyymmddhhmmssã«ããã
ãšãããã®æé ã¯éèŠã§ãããlatestã®ãŸãŸã ãšã
- ã©ã®ã€ã¡ãŒãžãåããŠãããç¹å®ã§ããªã
kubectl applyããŠããããã§ã¹ãã®å 容ãå€ãããªããã
Pod ãæŽæ°ãããªãïŒimagePullPolicy: Alwaysã«é Œãããšã«ãªãïŒ- ããŒã«ããã¯å ãç¡ã
ãšããåé¡ãèµ·ãããã€ãã¥ãŒã¿ãã«ãªã¿ã°ïŒæ¥æã
ããã㯠Git ã®ã³ããã ããã·ã¥ïŒãä»ããã®ãå®ç³ã§ããã
以äžã®æ§ã«ãwebapplication1.yaml ãäœæããã
- 远å åïŒ
azure-vote-backãæµçšãã RedisïŒ
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: webapplication1-back
spec:
replicas: 1
template:
metadata:
labels:
app: webapplication1-back
spec:
nodeSelector:
"beta.kubernetes.io/os": linux
containers:
- name: webapplication1-back
image: redis
ports:
- containerPort: 6379
name: redis
---
apiVersion: v1
kind: Service
metadata:
name: webapplication1-back
spec:
ports:
- port: 6379
selector:
app: webapplication1-back- ãªãªãžãã«éšå
<Tag>ã¯åè¿°ã§èšããyyyymmddhhmmssãçžåœã§çœ®ãæããã
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapplication1
namespace: default
labels:
app: webapplication1
spec:
replicas: 1
selector:
matchLabels:
app: webapplication1
template:
metadata:
name: webapplication1
labels:
app: webapplication1
spec:
containers:
- name: webapplication1
image: daisukenishinoacr.azurecr.io/webapplication1:<Tag>
resources:
requests:
cpu: "250m"
memory: "512Mi"
limits:
cpu: "500m"
memory: "1Gi"
imagePullPolicy: Always
restartPolicy: Always
terminationGracePeriodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
name: webapplication1
labels:
app: webapplication1
spec:
type: LoadBalancer
ports:
- protocol: TCP
port: 80
selector:
app: webapplication1- é©çšãšç¢ºèª
kubectl apply -f webapplication1.yaml
kubectl get service --watch- éçºäžã«ã€ã¡ãŒãžãæŽæ°ããå Žåã
- åçºè¡ïŒåè¿°ïŒâ ã¿ã°ãç¢ºèª â
webapplication1.yamlã®<Tag>ãæŽæ° â
kubectl apply -f webapplication1.yaml --forceã§åé©çšããã
- åçºè¡ïŒåè¿°ïŒâ ã¿ã°ãç¢ºèª â
è£è¶³ïŒ
nodeSelectorã®ã©ãã«ãå€ãïŒ:beta.kubernetes.io/osã¯
éæšå¥šã§ãçŸåšã¯kubernetes.io/osã䜿çšãã
ïŒbeta.ä»ã㯠k8s 1.25 ã§å逿žã¿ïŒã
-
ã€ã³ã°ã¬ã¹ ã³ã³ãããŒã©ãŒïŒAKS ç¬èªïŒã®æ§æ
EXTERNAL-IPã FQDN ã«å€æŽã§ããã
rem HTTP ã¢ããªã±ãŒã·ã§ã³ã«ãŒãã£ã³ã° ã¢ããªã³ã®ã€ã³ã¹ããŒã«
rem ïŒAzure ããŒã¿ã«ãã DNS ãŸãŒã³ã远å ãããããšã確èªã§ããïŒ
az aks enable-addons --resource-group daisukenishino --name daisukenishinoacr --addons http_application_routing
rem ç»é²ãããŠãã DNS ãŸãŒã³åãååŸãã
az aks show --resource-group daisukenishino --name daisukenishinoacr ^
--query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName -o table
Result
----------------------------------------
xxxxxxxxxxxxxxxxxxxx.japaneast.aksapp.io-
webapplication1.yamlã®ç·šé- ãµãŒãã¹ã®ã¿ã€ãã倿ŽïŒ
LoadBalancerãåé€ïŒãã - ã€ã³ã°ã¬ã¹ ã³ã³ãããŒã©ãŒã远å
- ãµãŒãã¹ã®ã¿ã€ãã倿ŽïŒ
kubectl apply -f webapplication1.yaml --force
kubectl get svc # EXTERNAL-IP ã <none> ã«å€æŽãããããšã確èª
kubectl get ingress # FQDN åã®ç¢ºèªãã©ãŠã¶ãã
http://webapplication1.xxxxxxxxxxxxxxxxxxxx.japaneast.aksapp.io
ã«ã¢ã¯ã»ã¹ãããAzure ããŒã¿ã«ãã DNS ãŸãŒã³ã« A ã¬ã³ãŒãã
远å ãããããšã確èªã§ããã
ç§»è¡ã¡ã¢ïŒææ°åïŒHTTP ã¢ããªã±ãŒã·ã§ã³ ã«ãŒãã£ã³ã°ã¯å»æ¢ïŒ:
http_application_routingã¢ããªã³ã¯å»æ¢ïŒ2025幎3æã«ãµããŒãçµäºïŒ
ãããŠãããæ€èšŒçšã§ãããæ¬çªã§ã¯äœ¿çšããªãã¢ããªã³ã§ãã£ãã
çšé çŸåšã®éžæè¢ æšæºç㪠Ingress ã¢ããªã±ãŒã·ã§ã³ ã«ãŒãã£ã³ã° ã¢ããªã³ïŒmanaged NGINXïŒ Azure ãšçµ±å AGICïŒApplication Gateway Ingress ControllerïŒ æ°ãã API Gateway API DNS åã®èªåç»é²ãå¿ èŠãªã ExternalDNS ã䜵çšããã
- ã¢ããªã±ãŒã·ã§ã³ã®è€æ°å°æ§æ
- View ã§
@Environment.MachineNameã䜿çšããŠå®è¡äžã®ãããåã衚瀺 - åçºè¡ïŒåè¿°ïŒ
-
webapplication1.yamlã®ç·šéïŒã¿ã°ãæŽæ°ãreplicas: 2ã«å€æŽïŒ kubectl apply -f webapplication1.yaml --force- ãã©ãŠã¶ããã¢ããªã«ã¢ã¯ã»ã¹ããF5 ã§æŽæ°ããŠãããåãå€ããããšã確èªã
- View ã§
è£è¶³ïŒãããåã衚瀺ãããæå³ïŒ: ããã¯
ãè€æ°ãããã«åæ£ããŠããããšãã®ç¢ºèªã§ãããšåæã«ã
ã»ãã·ã§ã³ïŒASP.NET SessionïŒã
ã€ã³ããã»ã¹ã§ã¯æç«ããªãããšã®ç¢ºèªã§ãããã
æ¬ããŒãžã Redis ã䜿ã£ãŠããçç±ãããã«ãã
ïŒAddDistributedRedisCacheïŒã
ã¹ã±ãŒã«ã¢ãŠãããæ§æã§ã¯ãç¶æ ãããã»ã¹å€ã«åºãã®ãåæã«ãªãã
以äžã¯å ããŒãžã§ã¯ãããããã€ãäºïŒå®ïŒããšããŠæªçæã§ãã£ãã
- (5) è€æ°ããŒãããŒã«ã®æ§æ
- (6) ãããã¯ãŒã¯ã®æ§æ
- (7) Gateway ã®æ§æ
- (8) ã©ãã«ãã»ã¬ã¯ã¿ãŒãšåå空é
- (9) èªåã¹ã±ãŒã«
ããããåŸè¿°ã® Qiita ã®èšäºã«æé ãããã
- Azure Kubernetes Service ã¯ãŒã¯ã·ã§ãã
- AKSãã»ãã¥ã¢ã«å©çšããããã®ãã¯ãã«ã«ãªãã¡ã¬ã³ã¹
- Azure Kubernetes Service 2019 ãµãããã
https://www.slideshare.net/ToruMakabe/azure-kubernetes-service-2019
-
Kubernetes on Azure ã®ãã¥ãŒããªã¢ã«
https://learn.microsoft.com/azure/aks/tutorial-kubernetes-prepare-app- AKS çšã«ã¢ããªã±ãŒã·ã§ã³ãæºåãã
- ã³ã³ãã㌠ã¬ãžã¹ããªãäœæãã
- Kubernetes ã¯ã©ã¹ã¿ãŒãäœæãã
- ã¢ããªã±ãŒã·ã§ã³ãå®è¡ãã
- ã¢ããªã±ãŒã·ã§ã³ã®ã¹ã±ãŒã«ã倿Žãã
- ã¢ããªã±ãŒã·ã§ã³ãæŽæ°ãã
- ã¯ã©ã¹ã¿ãŒãã¢ããã°ã¬ãŒããã
-
Azure Kubernetes Services (AKS) ã䜿çšã㊠Kubernetes ã«
SQL Server ã³ã³ãããŒãé 眮ãã
https://learn.microsoft.com/sql/linux/tutorial-sql-server-containers-kubernetes -
Azure Kubernetes Service (AKS) ã®ãµããŒã ããªã·ãŒ
https://learn.microsoft.com/azure/aks/support-policies -
ãµããŒããããŠãã Kubernetes ããŒãžã§ã³
https://learn.microsoft.com/azure/aks/supported-kubernetes-versions
- Azure Kubernetes Service (AKS) ã䜿ãããªã : ç®æ¬¡
https://qiita.com/kenakamu/items/e155740aa60c85a3d867
äžèšã® Microsoft Docs ã®ãã¥ãŒããªã¢ã«ãæ·±å ããŠãã Qiita èšäºïŒMS 瀟å¡ïŒã
- Kubernetes ãš AKS æŠèŠ
https://qiita.com/kenakamu/items/8f43163d1a42aca62fb7 - ã¢ããªã±ãŒã·ã§ã³ã®æºå
https://qiita.com/kenakamu/items/50193c1b642cb3339b46 - ã³ã³ããã¬ãžã¹ããªãäœæãã
https://qiita.com/kenakamu/items/bb876f17e4f6ecaf370b - AKS ã¯ã©ã¹ã¿ãŒã®ãããã€
https://qiita.com/kenakamu/items/fb8adae1c5ddb906e0f2 - ã¢ããªã±ãŒã·ã§ã³ã®å®è¡
https://qiita.com/kenakamu/items/cac80a548b0b43a270fa - ã¢ããªã±ãŒã·ã§ã³ã®ã¹ã±ãŒãªã³ã°
https://qiita.com/kenakamu/items/af537527d4d899a8f80e - ã¢ããªã±ãŒã·ã§ã³ã®æŽæ°
https://qiita.com/kenakamu/items/f6b2de045b76cc05b809
- ã¹ãã¬ãŒãžã®æºå
https://qiita.com/kenakamu/items/8d584e6da3e93929b1d9 - SQL ã®ã€ã³ã¹ããŒã«ãšé害埩æ§ã®æ€èšŒ
https://qiita.com/kenakamu/items/a05843d8e5efd13eb009
- äºåæºå
https://qiita.com/kenakamu/items/20194ace476d873b2949 - ããŒã«ã«ã§éçºãã
https://qiita.com/kenakamu/items/f61ed635a77b673e8164 - ã¢ããªããããã€
https://qiita.com/kenakamu/items/c1ff282992bfc778000d - ã€ã³ã°ã¬ã¹ãšã¢ããªè€æ°ãããæ§æ
https://qiita.com/kenakamu/items/19b5eb067c9d40e47b0b - è€æ°ããŒãããŒã«ã®æ§æ
https://qiita.com/kenakamu/items/aee6748b6d15b8aab34f - Azure CNI ãããã¯ãŒã¯ ãš Application Gateway
https://qiita.com/kenakamu/items/f4c0fabea8044a6b28cb - Application Gateway ãš Application Gateway Ingress Controller
https://qiita.com/kenakamu/items/6997c894e6cce58f2ea2 - ã©ãã«ãã»ã¬ã¯ã¿ãŒãšåå空é
https://qiita.com/kenakamu/items/7003b6013779f1a5bdb6 - èªåã¹ã±ãŒã«
- æŠèŠãšãããã®æ°Žå¹³ã¹ã±ãŒã«
https://qiita.com/kenakamu/items/29acb5c79c6700eed814 - ã¯ã©ã¹ã¿ãŒã®ã¹ã±ãŒã«
https://qiita.com/kenakamu/items/a4fe3769605795c23c24 - Azure Container Instance ãšã®çµ±å
https://qiita.com/kenakamu/items/6f3ed4be598d1c2ea8c2
- æŠèŠãšãããã®æ°Žå¹³ã¹ã±ãŒã«
https://tech-lab.sios.jp/archives/category/azure/
- Azure Kubernetes Service ã§æé k8s
https://tech-lab.sios.jp/archives/18536 - Azure Kubernetes Service + Selenium ã§ãæè»œè² è·ãã¹ãç°å¢
https://tech-lab.sios.jp/archives/18591 - Azure Kubernetes Service ã§å®çŸããè¶
äœäºç®
ïŒ(ã»ãŒ)ãã«ãããŒãžãïŒæ¬æ Œç㪠WordPress ç°å¢
https://tech-lab.sios.jp/archives/18794
- Ingress ã«ããè² è·åæ£
https://tech-lab.sios.jp/archives/18638 - Ingress ã® SSL èšŒææžæŽæ°
https://tech-lab.sios.jp/archives/18657
- NFS Server on VM ç·š
https://tech-lab.sios.jp/archives/18739 - Azure Files ç·š
https://tech-lab.sios.jp/archives/18735 - Azure NetApp Files ç·š
https://tech-lab.sios.jp/archives/18741
- Kubernetes ã§ Deployment ã® Rollback
https://tech-lab.sios.jp/archives/18550 - Kubernetes ã§ Deployment ã®è²ã
ãªã¢ããããŒãæ¹æ³
https://tech-lab.sios.jp/archives/18553 - Kubernetes ã§ RollingUpdate ããããã® Pod ã®å®å
šãªçµäº
https://tech-lab.sios.jp/archives/18730
- Docker for Windows äžã§ Docker Compose ã§ãã¹ãããOpen PaaS ã«ãããã€ã§ãã
-
ãã€ã¯ããœããç³»æè¡æ å ± WikiïŒåœè©² WikiïŒ
-
.NET éçºåºç€éšäŒ Wiki
Tags: ç§»è¡, ã¯ã©ãŠã, ã³ã³ãã, Azure, AKS, IaC