1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AKS + ASP.NET Core でHello Worldする

Posted at

概要

  • AKS(Azure Kubernetes Service)でASP.NET Core 2.1のコンテナを動かす
  • ACR(Azure Container Registry)にコンテナをpushする

使用環境

  • Ubuntu 16.04LTS
  • 前記事のminikubeの手順を既に踏んでいるものと想定
  • AzureのSubscriptionを所有していること
  • azコマンドがシェル上で利用可能なこと

環境準備

1. Azure PortalからAKSを作成

Docsはコマンドラインで作成するような手順となっているが、
6月27日現在で作成できるリージョンやインスタンスに大幅な制限があるため、
Portalから利用可能なリージョンを選ぶ。
(Japan Eastが利用可能になったとは言ってもインスタンスが作成出来るとは言ってない)

ここではEast USで作成する。
バージョンはKubernetesの利用可能な最新バージョンの1.10.3

基本的に必要な情報を入力してcreateボタンが押せればOK.
作成されるまでに結構時間がかかる。

2. Azure PortalからACRを作成

これも入力できる情報を入力してそのまま作成。
ここで作成したACRのリソースグループ名とインスタンス名を控えておく。
(ここでは便宜上AKSのリソースグループの名前を aksrg, ACRのリソースグループの名前を acr-rg-name, AKSのインスタンス名を aksinstancename, ACRの名前を acrnameとする)

3. ACRにコンテナのイメージをpush

以下のコマンドを実行

$ docker tag containerapp:v2 acrname.azurecr.io/containerapp:release
$ docker images
> containerapp:v2 ____ # 元からあったやつ
> acrname.azurecr.io/containerapp:release ____ # 今回作成されたpush用のイメージ
$ docker push acrname.azurecr.io/containerapp:release

ACRからAKSへデプロイ

1. ローカルからAKSに接続

Kubectlとazコマンドを使えるシェルで作業を行う。

$ az aks get-credentials --resource-group aksrg --name aksinstancename --subscription 'subscriotionname(optional)'
$ kubectl config get-contexts
> * minikube
>   aksinstancename
$ kubectl config use-context aksinstancename

これでローカルのkubectlがAKSに接続されたことになる。試しにgetコマンドを実行。

$ kubectl get nodes
$ kubectl get pods

2. ACRからイメージをpullするための設定

AKSからACRにアクセスしてコンテナイメージをひっぱってくるために、Azure内のユーザの設定が必要。
これはDocsにも書いてある。

$ az acr login --name acrname
$ az aks show --resource-group aksrg --name aksinstancename --query "servicePrincipalProfile.clientId" --output tsv
> xxxxx-xxx-xxxx-xxxx
$ az acr show --name acrname --resource-group acr-rg-name --query "id" --output tsv
>/subscriptions/xxx.../resourceGroups/acr-rg-name/providers/Microsoft.ContainerRegistry/registries/sample/providers/Microsoft.Authorization/roleAssignments/yyy-...
$ az role assignment create --assignee xxxxx-xxx-xxxx-xxxx --role Reader --scope /subscriptions/...
> { "canDelegate": null, "id": "..."...}  

3. あとはminikubeと同じ

$ kubectl run aspdeployment --image=acrname.azurecr.io/containerapp:development --port=8080
$ kubectl expose deployment aspdeployment --type=LoadBalancer --port=80
$ kubectl get service
> NAME            TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)        AGE
> aspdeployment   LoadBalancer   10.0.138.254   xx.xx.xxx.xx   80:30325/TCP   1m
> kubernetes      ClusterIP      10.0.0.1       <none>         443/TCP        1h

Externl IPがpendingから何かしらのip addressに変わったらアクセス可能。(AKSの場合ポートの指定なしで行ける)
もしダメそうな場合は以下のコマンドで確認する。

$ kubectl get pods
$ kubectl logs pod-name #<-Containerプルで失敗していたら大体この辺でわかる
$ kubectl get deploy #<-デプロイが怪しかったらここに警告がでる

最後に

  • azコマンドとkubectlがローカルで動けば、簡単にコンテナクラスタがいじれる(という気分に浸れる)
  • ACRにコンテナイメージを集約して管理することで、Kubernetesのデプロイとアプリの開発を切り分けることが可能。
  • 基本的にアプリ開発者はコンテナを作るところまで、そこから先はk8s好きな人がやればいいと思う。
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?