Azure Kubernetes Service(AKS)を使って、K8sクラスタを作成する

概要

  • Azure Kubernetes Service(AKS)を使って、K8sクラスタを作成する
  • ACR上のコンテナイメージを、AKS上のK8sクラスタからpullして動かす 今回はやらない。
  • AppId(Appアイディー)をAppldと打ち間違えないよう注意する
  • 使用できる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を入れる
    • sudo snap install helm --classic ではWSLに入らない
    • 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で現状を確認した方がよい
  • コンテナレジストリ名とコンテナレジストリ用のグループ名は区別できるように少し名前を変えた方がいいかも。

次は、Azure Kubernetes Service(AKS)にLet’s EncryptのSSL証明書を入れる

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です