はじめに
Kubernetes魅力的です!
AzureにおけるKubernetesプラットフォームであるAzure Kubernetes Service(以下、AKS)を触ってみたので以下にまとめます。
Kubernetesとは
- コンテナ化されたアプリケーションのデプロイメント、スケーリング、および管理を自動化するオープンソースのコンテナオーケストレーションプラットフォームです。以下、k8sと記載します。
- クラウドではサーバ機器や回線など物理的な要素が抽象化されていますが、kubernetesでは負荷分散やIaaSとしてのサーバ、ルーティングテーブルなどのコンポーネントが抽象化されています(ServiceやNode、Podなど)。
- AKSの裏ではAzure Load Balancer、仮想マシンスケールセット(VMSS)、OSのiptablesなどのコンポーネントが組み合わさってk8sの機能が実装されています。
AKSとは
AKSはフルマネージドKubernetesサービスです。AKSは、Kubernetesクラスタのデプロイ、管理、スケーリングを簡素化することを目的としています。以下に、AKSの主な特徴をまとめます。
主な特徴
マネージドサービス
AKSはフルマネージドサービスであり、AzureがKubernetesクラスタの管理、監視、保守を行います。これには、Kubernetesのアップグレード、パッチ適用、バックアップが含まれています。
簡単なデプロイ
簡単なコマンドやAzureポータルを使用して、数分でKubernetesクラスタをデプロイできます。複雑なインフラストラクチャの設定が不要です。
スケーリング
AKSは自動スケーリング機能を提供しており、負荷に応じてクラスタのノード数を自動的に増減できます。これにより、リソースの効率的な利用が可能になります。ちなみに、裏ではVMSSの機能が使われています。
統合されたAzureサービス
Azure DevOps、Azure Monitor、Azure Policyなど、他のAzureサービスとシームレスに統合されています。これにより、CI/CDパイプラインの構築や、モニタリング、セキュリティポリシーの適用が容易になります。
高可用性とリソース分離
AKSは、複数の可用性ゾーンにわたるクラスタのデプロイをサポートしており、高可用性を確保します。また、ノードプール機能により、異なるタイプのVMを混在させて使用できます。
AKS環境セットアップ
AzureCLIのインストール
az login
az provider register -n Microsoft.Network
az provider register -n Microsoft.Compute
az provider register -n Microsoft.Storage
az provider register -n Microsoft.ContainerService
参考
kubectlコマンドのインストール
eksctlのインストール(chocolately)
choco install -y kubernetes-cli
バージョンの確認
kubectl version --client
参考
Azure Container Registry
Azure上のコンテナレジストリサービスです(Docker Hubのようなもの)。
ACRを作成
az acr create --resource-group $ACR_RES_GROUP --name $ACR_NAME --sku Standard --location japaneast
イメージのビルド
az acr build —registry $ACR_NAME —image sample-image:v1.0 .
上記のイメージはkubernetesクラスタ上でpullすることで動かすことができます。
サービスプリンシパルの設定
あるAzureリソースがまた別のAzureリソースに何らかの操作を行いたいとき「サービスプリンシパル」を作成してそのアカウント(のようなもの)に対して権限を付与します(閲覧者か共同作成者かなど)。
サービスプリンシパルの作成
az ad sp create-for-rbac —name sample-principal —role Reader —scope $SAMPLE_ACR_RESOURCE_ID
※リソースIDは以下のコマンドにて取得できる。
$SAMPLE_ACR_RESOURCE_ID=$(az acr show —name sample-acr —query id —output tsv)
サービスプリンシパル作成時のappIdとpasswordを控える(AKSにACRの参照権限を与えるときに使うため)。
なお、以下のようにするとそれぞれの値を変数に格納できる
$APP_ID=$(az ad sp list —display-name sample_principal —query ‘[].{ID.appId}’ —output tsv)
$SP_PWD=$(**az ad sp create-for-rbac —name sample-pricipal —role Reader —scope $SAMPLE_ACR_RESOURCE_ID **—query password —output tsv)
portal上でACRのIAMを見ると該当のサービスプリンシパルが作成されていることがわかる。
参考
AKSクラスターの作成
az aks create —name $AKS_NAME —resource-group AZ-foo —node-count 3 —kubernetes-version 1.11.4 —node-vm-size Standard_DS1_v2 —generate-ssh-keys —service-principal $APP_ID —client-secret $SP_PWD
K8sのVersion1.12以降でAzure VMSSがサポートされている。chatGPT曰くv1.12より前はVMの可用性セットを用いてAKSが構築されていたとのこと。
参考
AKSを作成するとリソースグループが自動的に作成されます。VMSS、ネットワーク系、およびストレージがここに含まれます。
VMSSには—node-countで指定した数のインスタンスが作成される(今回は3つ)。
kubectlを実行してみる
クラスターで動くノード一覧を表示する
kubectl get node
-wオプションで定期的に実行します。なお、実行間隔はexponential backoffというアルゴリズムに基づいており、繰り返すごとに間隔が長くなっていきます。
ノード数の確認をするとAzure portalからVMSSを確認したときと同じコンピュータ名のノードが3つ確認できます。
おわりに
皆様もよきAKSライフを!