LoginSignup
4
3

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-04-27

概要

  • 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証明書を入れる

4
3
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
4
3