このクイック スタートでは、次の方法について説明します。
- Azure CLIを使用して、OS Guard (プレビュー) AKS クラスターを使用して Azure Linux を作成します。
- kubectl を使用してクラスターに接続します。
- クラスターでサンプルのマルチコンテナー アプリケーションを実行します。
Important
2026 年 12 月 10 日から、Azure Kubernetes Service (AKS)は OS Guard for AKS (プレビュー) を使用Azure Linux をサポートしなくなりました。 その時点で、AKS は OS Guard ノード イメージを使用して新しい Azure Linux を生成したり、セキュリティ パッチを提供したりしなくなり、os Guard を使用して linux Azure新しいノード プールを作成できなくなります。 2027 年 3 月 10 日、AKS は、OS Guard ノード イメージを使用して既存の Azure Linux をすべて削除します。これにより、スケーリングと修復 (再イメージ化と再デプロイ) 操作が失敗します。 中断を回避するには、Azure Container Linux (ACL) に移行します。 この提供終了の詳細については、廃止GitHubの問題とAzure更新プログラムの提供終了に関する発表を参照してください。 お知らせや更新プログラムに関する最新情報を入手するには、 AKS のリリース ノートに従ってください。
Note
Azure Linux と OS Guard (プレビュー) は、Azure Container Linux (ACL) に置き換えられます。
Azure Container Linux は、Azure Kubernetes Service (AKS)用の長期的で不変のコンテナー最適化 Linux オペレーティング システム (OS) です。 コンテナー化されたワークロードを大規模に実行するように設計された、セキュリティで保護され、最小限かつ運用上一貫性のあるホスト OS が提供されます。
詳細については、Azure Container Linux (ACL) の概要を参照してください。
Prerequisites
-
Azure アカウントをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
Azure Cloud Shell で Bash 環境を使用します。 詳細については、Azure Cloud Shell の Bash のクイックスタートに関するページを参照してください。
CLI 参照コマンドをローカルで実行する場合は、 Azure CLIをインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
- ローカル インストールを使用している場合は、
az loginコマンドを使用してAzure CLIにサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。 - 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。
-
az versionを実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgradeを実行します。
- ローカル インストールを使用している場合は、
OS Guard 使用時の Azure Linux に関する考慮事項と制限事項
開始する前に、OS Guard (プレビュー) を使用した Azure Linux に関する次の考慮事項と制限事項を確認してください。
- Os Guard を使用する Azure Linux には、Kubernetes バージョン 1.32.0 以降が必要です。
- OS Guard イメージを使用するすべての Azure Linux では、 Federal Information Process Standard (FIPS) と Trusted Launch が有効になっています。
- Azure CLI と ARM テンプレートは、プレビュー段階の AKS 上の OS Guard を使用する Azure Linux でサポートされている唯一のデプロイ方法です。 PowerShell と Terraform はサポートされていません。
- Arm64 イメージは、プレビュー段階の AKS 上の OS Guard を使用した Azure Linux ではサポートされていません。
-
NodeImageとNoneは、AKS 上で OS Guard を使用する Azure Linux でサポートされている唯一のオペレーティング システム (OS) アップグレード チャネルです。UnmanagedおよびSecurityPatchは、変更できない /usr ディレクトリのため、OS Guard を使用する Azure Linux と互換性がありません。 - アーティファクト ストリーミング はサポートされていません。
- ポッドサンドボックス はサポートされていません。
- Confidential Virtual Machines (CVM) は サポートされていません。
- Gen 1 仮想マシン (VM) は サポートされていません。
aks-preview Azure CLI 拡張機能をインストールする
Important
AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は運用環境での使用を目的としていません。 詳細については、次のサポート記事を参照してください。
aks-preview コマンドを使用して az extension add 拡張機能をインストールします。
az extension add --name aks-preview
aks-preview コマンドを使用して、az extension update拡張機能を最新バージョンに更新します。
az extension update --name aks-preview
AzureLinuxOSGuardPreview フィーチャーフラグを登録する
AzureLinuxOSGuardPreviewコマンドを使用して、az feature register機能フラグを登録します。az feature register --namespace "Microsoft.ContainerService" --name "AzureLinuxOSGuardPreview"状態が [登録済み] と表示されるまでに数分かかります。
az feature showコマンドを使用して、登録の状態を確認します。az feature show --namespace "Microsoft.ContainerService" --name "AzureLinuxOSGuardPreview"状態が
Registered と反映されたら、Microsoft.ContainerService リソースプロバイダーをコマンドを使用して再登録します。 az provider register --namespace "Microsoft.ContainerService"
環境変数の設定
デプロイごとに一意のリソース名を作成するには、次の環境変数を設定します。
<your-resource-group-name>、<your-region>、および <your-cluster-name> を独自の値に置き換えます。 必要に応じて、 openssl rand -hex 3 コマンドを使用して、リソース グループとクラスター名 ( export RESOURCE_GROUP="myResourceGroup$RANDOM_ID" など) に追加するランダムな文字列を生成できます。
# Create random string
export RANDOM_ID="$(openssl rand -hex 3)"
# Set environment variables
export RESOURCE_GROUP="<your-resource-group-name>"
export REGION="<your-region>"
export CLUSTER_NAME="<your-cluster-name>"
リソース グループを作成します
Azure リソース グループは、Azure リソースが展開され管理される論理グループです。 Azureでリソース グループを作成する場合は、場所を指定する必要があります。 この場所は、リソース グループ メタデータのストレージの場所であり、リソースの作成時に別のリージョンを指定しない場合はAzureでリソースが実行されます。
az group create コマンドを使用して、リソース グループを作成します。
az group create --name $RESOURCE_GROUP --location $REGION
出力例:
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/$RESOURCE_GROUPxxxxxx",
"location": "$REGION",
"managedBy": null,
"name": "$RESOURCE_GROUPxxxxxx",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
OS Guard クラスターを使用して Azure Linux を作成する
az aks create パラメーターを指定して --os-sku コマンドを使用して AKS クラスターを作成し、AZURE Linux と OS Guard イメージを使用して AKS クラスターをプロビジョニングします。
az aks create --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --os-sku AzureLinuxOSGuard --node-osdisk-type Managed --enable-fips-image --enable-secure-boot --enable-vtpm
数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。
クラスターに接続する
Kubernetes クラスターを管理するには、Kubernetes のコマンドライン クライアントである kubectl を使用します。 Azure Cloud Shell を使用している場合、kubectl は既にインストールされています。
kubectl をローカルにインストールするには、az aks install-cli コマンドを使用します。
kubectlコマンドを使用して、Kubernetes クラスターに接続するようにaz aks get-credentialsを構成します。 このコマンドは、資格情報をダウンロードし、それを使用するように Kubernetes CLI を構成します。az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAMEkubectl getコマンドを使用して、ご利用のクラスターへの接続を確認します。 このコマンドでは、クラスター ノードの一覧が返されます。kubectl get nodes
アプリケーションをデプロイする
アプリケーションをデプロイするには、マニフェスト ファイルを使用して、AKS ストア アプリケーションの実行に必要なすべてのオブジェクトを作成します。 Kubernetes のマニフェスト ファイルでは、どのコンテナー イメージを実行するかなど、クラスターの望ましい状態を定義します。 マニフェストには、次の Kubernetes のデプロイとサービスが含まれています。
- ストア フロント: 顧客が製品を表示して注文するための Web アプリケーション。
- 製品サービス: 製品情報を表示します。
- 注文サービス: 注文を行います。
- Rabbit MQ: 注文キュー用のメッセージキュー。
Note
運用用の永続的なストレージを使用せずに、Rabbit MQ などのステートフル コンテナーを実行することはお勧めしません。 ここではわかりやすくするために使用しますが、Azure Cosmos DB や Azure Service Bus などのマネージド サービスを使用することをお勧めします。
aks-store-quickstart.yamlという名前のファイルを作成し、そこに次のマニフェストをコピーします。apiVersion: apps/v1 kind: StatefulSet metadata: name: rabbitmq spec: serviceName: rabbitmq replicas: 1 selector: matchLabels: app: rabbitmq template: metadata: labels: app: rabbitmq spec: nodeSelector: "kubernetes.io/os": linux containers: - name: rabbitmq image: mcr.microsoft.com/mirror/docker/library/rabbitmq:3.10-management-alpine ports: - containerPort: 5672 name: rabbitmq-amqp - containerPort: 15672 name: rabbitmq-http env: - name: RABBITMQ_DEFAULT_USER value: "username" - name: RABBITMQ_DEFAULT_PASS value: "password" resources: requests: cpu: 10m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: rabbitmq-enabled-plugins mountPath: /etc/rabbitmq/enabled_plugins subPath: enabled_plugins volumes: - name: rabbitmq-enabled-plugins configMap: name: rabbitmq-enabled-plugins items: - key: rabbitmq_enabled_plugins path: enabled_plugins --- apiVersion: v1 data: rabbitmq_enabled_plugins: | [rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0]. kind: ConfigMap metadata: name: rabbitmq-enabled-plugins --- apiVersion: v1 kind: Service metadata: name: rabbitmq spec: selector: app: rabbitmq ports: - name: rabbitmq-amqp port: 5672 targetPort: 5672 - name: rabbitmq-http port: 15672 targetPort: 15672 type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: name: order-service spec: replicas: 1 selector: matchLabels: app: order-service template: metadata: labels: app: order-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: order-service image: ghcr.io/azure-samples/aks-store-demo/order-service:latest ports: - containerPort: 3000 env: - name: ORDER_QUEUE_HOSTNAME value: "rabbitmq" - name: ORDER_QUEUE_PORT value: "5672" - name: ORDER_QUEUE_USERNAME value: "username" - name: ORDER_QUEUE_PASSWORD value: "password" - name: ORDER_QUEUE_NAME value: "orders" - name: FASTIFY_ADDRESS value: "0.0.0.0" resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi startupProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 20 periodSeconds: 10 readinessProbe: httpGet: path: /health port: 3000 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 initContainers: - name: wait-for-rabbitmq image: busybox command: ['sh', '-c', 'until nc -zv rabbitmq 5672; do echo waiting for rabbitmq; sleep 2; done;'] resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi --- apiVersion: v1 kind: Service metadata: name: order-service spec: type: ClusterIP ports: - name: http port: 3000 targetPort: 3000 selector: app: order-service --- apiVersion: apps/v1 kind: Deployment metadata: name: product-service spec: replicas: 1 selector: matchLabels: app: product-service template: metadata: labels: app: product-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: product-service image: ghcr.io/azure-samples/aks-store-demo/product-service:latest ports: - containerPort: 3002 env: - name: AI_SERVICE_URL value: "http://ai-service:5001/" resources: requests: cpu: 1m memory: 1Mi limits: cpu: 2m memory: 20Mi readinessProbe: httpGet: path: /health port: 3002 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: /health port: 3002 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 --- apiVersion: v1 kind: Service metadata: name: product-service spec: type: ClusterIP ports: - name: http port: 3002 targetPort: 3002 selector: app: product-service --- apiVersion: apps/v1 kind: Deployment metadata: name: store-front spec: replicas: 1 selector: matchLabels: app: store-front template: metadata: labels: app: store-front spec: nodeSelector: "kubernetes.io/os": linux containers: - name: store-front image: ghcr.io/azure-samples/aks-store-demo/store-front:latest ports: - containerPort: 8080 name: store-front env: - name: VUE_APP_ORDER_SERVICE_URL value: "http://order-service:3000/" - name: VUE_APP_PRODUCT_SERVICE_URL value: "http://product-service:3002/" resources: requests: cpu: 1m memory: 200Mi limits: cpu: 1000m memory: 512Mi startupProbe: httpGet: path: /health port: 8080 failureThreshold: 3 initialDelaySeconds: 5 periodSeconds: 5 readinessProbe: httpGet: path: /health port: 8080 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 3 livenessProbe: httpGet: path: /health port: 8080 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancerYAML ファイルをローカルに作成して保存する場合は、[ファイルのアップロード/ダウンロード] ボタンを選択し、ローカル ファイル システムからファイルを選択することで、CloudShell の既定のディレクトリにマニフェスト ファイルをアップロードできます。
kubectl applyコマンドを使用してアプリケーションをデプロイし、ご利用の YAML マニフェストの名前を指定します。kubectl apply -f aks-store-quickstart.yaml
アプリケーションをテストする
パブリック IP アドレスまたはアプリケーション URL にアクセスすることで、アプリケーションが実行されていることを確認できます。
以下のコマンドを使用してアプリケーション URL を取得します。
runtime="5 minutes"
endtime=$(date -ud "$runtime" +%s)
while [[ $(date -u +%s) -le $endtime ]]
do
STATUS=$(kubectl get pods -l app=store-front -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}')
echo $STATUS
if [ "$STATUS" == 'True' ]
then
export IP_ADDRESS=$(kubectl get service store-front --output 'jsonpath={..status.loadBalancer.ingress[0].ip}')
echo "Service IP Address: $IP_ADDRESS"
break
else
sleep 10
fi
done
curl $IP_ADDRESS
結果:
<!doctype html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="/favicon.ico">
<title>store-front</title>
<script defer="defer" src="/js/chunk-vendors.df69ae47.js"></script>
<script defer="defer" src="/js/app.7e8cfbb2.js"></script>
<link href="/css/app.a5dc49f6.css" rel="stylesheet">
</head>
<body>
<div id="app"></div>
</body>
</html>
echo "You can now visit your web server at $IP_ADDRESS"
クラスターを削除する
必要がなくなれば、不要なリソースをクリーンアップして、Azure の料金を抑えることができます。
az group delete コマンドを使用して、Azure リソース グループとすべての関連リソースを削除します。
az group delete --name $RESOURCE_GROUP --yes --no-wait
関連するコンテンツ
このクイック スタートでは、OS Guard クラスターを使用して Azure Linux をデプロイしました。 OS Guard を使用した Linux Azureの詳細については、次のリソースを参照してください。
- Azure Linux OS Guard チュートリアル シリーズ: パート 1
Azure Linux OS Guard for AKS