概要
- Azure Kubernetes Service(AKS)を使って、K8sクラスタを作成する
-
ACR上のコンテナイメージを、AKS上のK8sクラスタからpullして動かす今回はやらない。 - AppId(Appアイディー)をAppldと打ち間違えないよう注意する
- 使用できるKubernetesのバージョンを確認してから構築する
- 作り直した時は、認証情報も忘れずに設定(上書き)する
課金が発生する
- 稼働中は課金が発生する。必要に応じて作成/削除すること。
参考書籍
-
しくみがわかるKubernetes Azureで動かしながら学ぶコンセプトと実践知識
阿佐志保 著
- 2.4 Azureを使ったKubernetesクラスター作成
- 説明が分かりやすいので、迷ったら上記を読み返す。
- 2.4 Azureを使ったKubernetesクラスター作成
AKSクラスタの構築
ACRとAKSの連携
- ACRとAKS間で認証を行う
サービスプリンシパル=Azureのリソースを操作するアプリケーションのためのID(?)
-
ACRのリソースIDを環境変数に入れる
ACR_ID=$(az acr show --name $ACR_NAME --query id --output tsv)
-
サービスプリンシパル名を環境変数に入れる
SP_NAME=sample-acr-service-principal
-
ACRのリソースIDに「Reader」(表示のみ)の権限を付与する
- (ACRを消さなければ、一度だけやればよい?)
SP_PASSWD=$(az ad sp create-for-rbac --name $SP_NAME --role Reader --scopes $ACR_ID --query password --output tsv)
-
作成したサービスプリンシパルのIDを環境変数に入れる
APP_ID=$(az ad sp show --id http://$SP_NAME --query appId --output tsv)
クラスタの作成
- クラスタ名をつける。サンプル通り「AKSCluster」にする。
AKS_CLUSTER_NAME=AKSCluster
- クラスタを作成するAzureのリソースグループ名をつける
AKS_RES_GROUP=$AKS_CLUSTER_NAME
-
リソースグループを作成する
az group create --resource-group $AKS_RES_GROUP --location japaneast
-
使用できるKubernetesのバージョンを確認する
az aks get-versions -l eastus -o table
- 使えないバージョンを指定すると、
The value of parameter orchestratorProfile.OrchestratorVersion is invalid.
とエラーが出る。 - 2019-04-27現在、Azureで使えるのは以下のバージョン。
KubernetesVersion Upgrades
------------------- ------------------------
1.13.5 None available
1.12.7 1.13.5
1.12.6 1.12.7, 1.13.5
1.11.9 1.12.6, 1.12.7
1.11.8 1.11.9, 1.12.6, 1.12.7
1.10.13 1.11.8, 1.11.9
1.10.12 1.10.13, 1.11.8, 1.11.9
1.9.11 1.10.12, 1.10.13
1.9.10 1.9.11, 1.10.12, 1.10.13
- クラスタを作成する
- ノード3つ、サイズはStandard_DS1_v2
- Kubernetesのバージョンは1.11.9を使用
- 「- Running ..」のまま、構築に7分かかった
az aks create \
--name $AKS_CLUSTER_NAME \
--resource-group $AKS_RES_GROUP \
--node-count 3 \
--kubernetes-version 1.11.9 \
--node-vm-size Standard_DS1_v2 \
--generate-ssh-keys \
--service-principal $APP_ID \
--client-secret $SP_PASSWD
- Azureポータルから「すべてのリソース」-「AKSCluster」で「状態」欄が「Creating」から「Succeeded」になればOK。
クラスタに接続するための認証情報を設定する
-
.kube
ディレクトリに接続情報を入れる-
az aks get-credentials --admin --resource-group $AKS_RES_GROUP --name $AKS_CLUSTER_NAME
- Kindle版の書籍では、「admin」が「adomin」になっているので注意。
-
kubectlでクラスタを操作する
- kubectlの構文は、
kubectl [コマンド] [タイプ] [名前] [フラグ]
- [コマンド]は、get/create/apply/deleteなど。logsやdescribeもある。
- [タイプ]は、リソースのタイプ。pod, deploymentなど。
- [名前]は、リソースの識別子。大文字と小文字の区別がある。
- [フラグ]は、-o tsvや-o wideなど。
- 例:クラスタ情報の表示は、
kubectl cluster-info
- 例:ノード一覧は、
kubectl get node
- 以下を設定すると、タブ補間できるようになる。
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
helm(パッケージマネージャ)を入れる
helmのインストール
- Ubuntu側にhelmを入れる
-
ではWSLに入らないsudo snap install helm --classic
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-arm64.tar.gz
tar zxvf helm-v2.13.1-linux-arm64.tar.gz
sudo cp linux-arm64/helm /usr/local/bin/
helm repo update
helm version
-
稼働中のKubernetesクラスターにtillerを入れる
kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
helmの初期化
-
helmの初期化(kubernetesクラスタにTillerが入るので、クラスタに接続するための認証情報を設定しておく必要がある)
-
kubectl cluster-info
-
Unable to connect to the server:
やno such host
になったら、接続情報が無いor古いので、上述のやり方で接続情報を設定する
-
mkdir ~/helm-wrk
cd ~/helm-wrk
helm init --service-account tiller
-
-
helm Tillerが動くか確認
- Tillerは、Kubernetesクラスタ側に入れるデプロイ用のコンポーネント
-
kubectl -n kube-system get pod | grep tiller
-
tiller-deploy-1234567890-abcde 1/1 Running
のような表示が出ればOK。
-
-
helmのがクライアントにもサーバにも入っている事の確認
helm version
- 下記のように、ClientもServerもバージョン番号が出ればOK。
Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
helmを使ったインストールとアンインストール
- パッケージのことを「リリース」と呼ぶ
- 基本操作
-
helm install helloworld
でインストール -
helm list
でインストール済みパッケージのリストを表示 -
helm delete --purge cert-manager-v0.6.6
のように--purge
を付けると、付随する設定やデータも一緒に消せる
-
レジストリ、AKSクラスタの削除
- 課金が気になるので、使い終わったら削除する
AKSクラスタの削除
-
az aks delete --resource-group $AKS_RES_GROUP --name $AKS_CLUSTER_NAME
- 環境変数未設定の場合、
az aks delete --resource-group AKSCluster --name AKSCluster
で直書きで消す
- 環境変数未設定の場合、
レジストリの削除
- 下記で消えないので、Azureポータルから削除。
- Kindle版の書籍では、
$AKS_RES_GROUP
が$AKS_RESOURCE_GROUP
になっているので注意。az group list
az group delete -name $ACR_RES_GROUP
az group delete -name $AKS_RESOURCE_GROUP
az ad sp delete --id=$(az ad sp show --id http://$SP_NAME --query appId --output tsv)
感想メモ
- 何をしているのか理解せずにコピペしている状態なので、コマンドリファレンスぐらい見る
- 削除や変更前にlistで現状を確認した方がよい
- コンテナレジストリ名とコンテナレジストリ用のグループ名は区別できるように少し名前を変えた方がいいかも。