More Related Content
Similar to AKS と ACI を組み合わせて使ってみた (20)
More from Hideaki Aoyagi (18)
AKS と ACI を組み合わせて使ってみた
- 1. AKS と ACI を
組み合わせて使ってみた
青柳 英明
2018/06/23
JAZUG 熊本(くまあず)「九州JAZUG連動企画 Day2」
- 2. 自己紹介
青柳 英明
職業: 福岡で インフラSE やってます
(オンプレOnly)
経歴: アプリケーション開発 … 3年
インフラエンジニア … 17年
Azure歴: 約2年?
(久々に触りました・・・)
コアメンバー:
Fukuoka.NET
(ふくてん)
JAWS-UG福岡
- 3. AKS (Azure Kubernetes Service) とは
→ Azure が提供する 「マネージド」 な Kubernetes サービス
【 アンマネージド 】
API サーバ
管理サービス
データベース
Master ノード
(管理プロセスを動かす)
Worker ノード
(コンテナ実行ホスト)
【 マネージド 】
API サーバ
管理サービス
データベース
サーバ構築不要
サーバ管理不要 Worker ノード
(コンテナ実行ホスト)
- 4. ACI (Azure Container Instance) とは
→ Azure が提供する 「サーバレス」 なコンテナ実行環境
【 通常のコンテナ実行環境 】
Docker
サーバ (物理/仮想) をホストとして利用
→ 構築や管理が必要
【 サーバレスなコンテナ実行環境 】
Docker
ホスト/Docker はサービスとして提供
→ 構築・管理は不要
- 5. AKS と ACI を組み合わせて使う
【 標準の AKS 環境 】
API サーバ
管理サービス
データベース
サーバ構築不要
サーバ管理不要 Worker ノード
(Azure VM)
【 AKS with ACI 】
API サーバ
管理サービス
データベース
サーバ構築不要
サーバ管理不要
ACI 上で実行
サーバ構築不要
サーバ管理不要
→ 管理ノード・コンテナ実行ノード ともに構築・管理が不要になる
- 6. 「Virtual Kubelet」 ・・・ AKS with ACI を実現するためのソフトウェア
AKS
Kubelet Kubelet
Worker ノード
(Azure VM)
Virtual Kubelet
ACI ACI ACI
(実態の無いノード)
- 7. AKS 環境構築 (1/3)
使用するコマンドツールの準備
・ Azure CLI
・ Kubectl
・ Helm … Virtual Kubelet の導入で使用
Azure Cloud Shell を使う場合 → 上記は既に導入済み
PC / Mac を使う場合 → 適時導入
「Azure Cloud Shell」
→ Azure Portal の右上のアイコンから起動
- 8. AKS 環境構築 (2/3)
ASK クラスタの作成
・ リソースグループの作成
az group create –n myResourceGroup –l westus
AKS/ACI が利用できるリージョンに制限あり → 米国西部などを使用
・ AKS クラスタの作成
az aks create -n myAksCluster -g myResourceGroup
デフォルト (オプションを何もつけない) の場合
→ サイズ 「DS1v2」 のノードが 「3つ」 作成される (料金を確認しておきましょう)
- 9. AKS 環境構築 (3/3)
Kubectl コマンドツールの設定と確認
・ 作成した AKS クラスタへの接続情報 (資格情報) を取り込む
az aks get-credentials -n myAksCluster -g myResourceGroup
→ 「~/.kube/config」 へインポートされる
・ kubectl コマンドで接続できること (情報が取得できること) を確認
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-nodepool1-38988403-0 Ready agent 22m v1.9.6
aks-nodepool1-38988403-1 Ready agent 22m v1.9.6
aks-nodepool1-38988403-2 Ready agent 22m v1.9.6
- 10. Virtual Kubelet 環境構築 (1/3)
Helm コマンドツールの設定と確認
・ helm の初期化
helm init
・ 正常に初期化されたことを確認
$ helm version
Client: &version.Version{SemVer:“v2.9.1”, GitCommit:・・・
Server: &version.Version{SemVer:“v2.9.1”, GitCommit:・・・
「Server」 が上手く表示されない場合 → ここまでの設定を見直し
- 11. Virtual Kubelet 環境構築 (2/3)
Virtual Kubelet の導入
・ 「ACI コネクター」 を使った Virtual Kubelet のインストール
az aks install-connector -n myAksCluster -g myResourceGroup
--connector-name myconnector
※ 実際は1行
README の手順にある
「Manual set-up」
「Deployment of the ACI provider in your cluster」
は実施する必要なし
- 12. Virtual Kubelet 環境構築 (3/3)
環境構築の結果確認
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-nodepool1-38988403-0 Ready agent 1d v1.9.6
aks-nodepool1-38988403-1 Ready agent 1d v1.9.6
aks-nodepool1-38988403-2 Ready agent 1d v1.9.6
virtual-kubelet-myconnector-linux Ready agent 1d v1.8.3
$ kubectl get pods –o wide
NAME READY
myconnector-linux-virtual-kubelet-for-aks-68f6b94867-5z55f 1/1
STATUS RESTARTS AGE IP NODE
Running 0 1d 10.244.0.4 aks-nodepool1-38988403-0
- 13. 動作確認 (その1)
README の手順に従い、サンプル Pod (コンテナ) をデプロイ
apiVersion: v1
kind: Pod
metadata:
name: helloworld
spec:
containers:
- image: microsoft/aci-helloworld
imagePullPolicy: Always
name: helloworld
・・・(略)・・・
nodeName: virtual-kubelet-myconnector-linux
tolerations:
- key: azure.com/aci
effect: NoSchedule
この記述が必要
- 15. 展開した 3 つの Pod が、
Virtual Kubelet が管理する仮想ノード上で稼働している
$ kubectl get pods -o wide
NAME READY STATUS
myconnector-linux-virtual-kubelet-for-aks-68f6b94867-5z55f 1/1 Running
webserver-aci-deploy-7475c87d6f-8s57w 1/1 Running
webserver-aci-deploy-7475c87d6f-d5lg6 1/1 Running
webserver-aci-deploy-7475c87d6f-xrbdb 1/1 Running
RESTARTS AGE IP NODE
0 1d 10.244.0.4 aks-nodepool1-38988403-0
0 4m 104.42.50.138 virtual-kubelet-myconnector-linux
0 4m 104.210.53.227 virtual-kubelet-myconnector-linux
0 4m 104.42.119.65 virtual-kubelet-myconnector-linux
- 16. ACI のインスタンス一覧を確認
→ 1つの Pod につき、1つのコンテナインスタンスが作成されている
$ az container list -o table
Name Image
--------------------------------------------- ---------------------------------------------
default-webserver-aci-deploy-7475c87d6f-8s57w kumaazu2018.azurecr.io/go-webserver-sample:v1
default-webserver-aci-deploy-7475c87d6f-d5lg6 kumaazu2018.azurecr.io/go-webserver-sample:v1
default-webserver-aci-deploy-7475c87d6f-xrbdb kumaazu2018.azurecr.io/go-webserver-sample:v1
- 18. ACR (Azure Container Registry) の使用
公式コンテナイメージ
の場合
(動作確認 その1)
自作コンテナイメージ
の場合
(動作確認 その2)
Docker Hub
pull
認証なし
Docker
push
ACR
pull
認証が必要
AKS/ACI
- 20. サービスプリンシパルを作成し、資格情報を抽出する
$ ACR_NAME=KumaAzu2018
$ SERVICE_PRINCIPAL_NAME=acr-service-principal
$ ACR_LOGIN_SERVER=$(az acr show --name $ACR_NAME --query loginServer --output tsv)
$ ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv)
$ SP_PASSWD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME --role Reader --scopes $ACR_REGISTRY_ID
--query password --output tsv)
$ CLIENT_ID=$(az ad sp show --id http://$SERVICE_PRINCIPAL_NAME --query appId --output tsv)
$ echo $ACR_LOGIN_SERVER
$ echo $CLIENT_ID
$ echo $SP_PASSWD
- 21. 資格情報を Kubenetes の 「シークレット」 に格納する
$ kubectl create secret docker-registry acr-auth --docker-server $ACR_LOGIN_SERVER --docker-username $CLIENT_ID
--docker-password $SP_PASSWD --docker-email "foo@example.com"
secret "acr-auth" created
$ kubectl get secrets -o wide
NAME TYPE DATA AGE
acr-auth kubernetes.io/dockerconfigjson 1 24s
default-token-58jjl kubernetes.io/service-account-token 3 18h
myconnector-linux-virtual-kubelet-for-aks Opaque 3 18h
- 23. まとめ (所感)
・ 現状 (プレビュー) では、複数のコマンドツール (Azure CLI、kubectl、Helm) を
組み合わせて設定する必要あり
・ ACR の認証設定や、Kubernetes マニフェストファイルの記述など、
面倒な部分が多い
正式リリース時には、Azure CLI コマンド (az aks) に統合されたり、
GUI (ポータル) でも設定できるようになる・・・のかな?(期待)
ご清聴ありがとうございました