このシリーズでは asp.net core アプリケーションを AKS にデプロイする方法について紹介していきます。今回は事前準備ということでソリューションの構成とリソースの作成を行います。
尚、シリーズはスすでに以下シリーズの知識がある前提とします。
ソリューションの構成
これから作成する構成は以下の通りです。
- Linux Node で構成された AKS
- 複数の Web サーバー
- SQL Server 2017 on Linux
- アプリは Azure Container Registry (ACR) から取得
- 外部からはロードバランサー経由でアクセス
- Web サーバーと SQL 間はクラスタ IP 経由
事前準備
以下の環境を用意してください。
- Visual Studio 2019 または dotnet core 3.0 が利用できる環境
- ローカル PC に Docker 最新版
- Azure が利用できる環境および Azure CLI
AKS のインストール
まず ACR と AKS をインストールします。詳細は AKS チュートリアルの深堀 を参照してください。既に環境がある場合はスキップしてください。
-
az コマンドでログインを実行。ウィザードに従ってログインを実施。
az login
-
利用するサブスクリプションをセット。
az account list az account set --subscription <subscription id> az account show
-
リソースグループと ACR を作成
az group create --name netcoresample --location japaneast az acr create -g netcoresample -n kenakamuacr --sku basic az acr login -n kenakamuacr
-
作成した ACR のAdmin 認証を有効化
az acr update -n kenakamuacr --admin-enabled true
-
AKS で使うサービスプリンシパル作成。
az ad sp create-for-rbac --skip-assignment
-
作成した ACR をリソースを取得。
az acr show --resource-group netcoresample --name kenakamuacr --query "id" --output tsv
-
ACR のリソースとサービスプリンシパルの AppId を使って ACR PULL 権限を設定。
az role assignment create --assignee <appId> --scope <acrId> --role acrpull
-
AKS の作成
az aks create -g netcoresample -n myaks -c 2 --service-principal <appId> --client-secret <password> --generate-ssh-keys
-
kubectl のインストールと認証。
az aks install-cli az aks get-credentials --resource-group netcoresample --name myaks
-
ノードを取得してインストールを確認。
>kubectl get nodes NAME STATUS ROLES AGE VERSION aks-nodepool1-23705949-0 Ready agent 4m14s v1.13.11 aks-nodepool1-23705949-1 Ready agent 4m16s v1.13.11
SQL Server 2017 のインストール
今回の asp.net core アプリではデータベースとして SQL Server 2017 をインストールします。詳細は SQL Server 2017 を AKS で使う を確認してください。ここでは手順のみ示します。
1. 以下内容で sql2017.yaml を作成。
- secret の値は
echo -n 'MyC0m9l&xP@ssw0rd' | base64
で取得したもの
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
---
apiVersion: v1
kind: Secret
metadata:
name: mssql
type: Opaque
data:
SA_PASSWORD: "TXlDMG05bCZ4UEBzc3cwcmQ="
---
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
2. apply コマンドで適用。
kubectl apply -f sql2017.yaml
3. デプロイの適用が完了したらサービスをポッドを確認。
> kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 11m
mssql-deployment LoadBalancer 10.0.228.137 52.243.63.3 1433:30488/TCP 3m5s
> kubectl get pods
NAME READY STATUS RESTARTS AGE
mssql-deployment-5b74bdb6f7-755wh 1/1 Running 0 4m16s
4. Azure Data Studio より外部ポートに接続確認。
まとめ
今回は ACR、AKS そして SQL の準備を行いました。また SQL はパブリックからアクセスできる状態にしてあります。これで Azure 側の準備が整いました。次回は asp.net core アプリをローカルで開発する方法を見ていきます。