Azure Container Instances(ACI)を使用すると、インフラストラクチャを心配せずにコンテナーを実行できます。 コンテナのイメージを提供できます。ACIはコンテナを喜んで起動し、外部IPアドレスを提供します。 コンテナの起動時にのみ手動介入が必要な場合、これは「サーバーレスコンテナ」と呼ばれます。 ACIは、インフラストラクチャを扱いたくないバッチワークロードまたは長期コンテナに最適です。
ACIは、コンテナを実行するための低レベルのインフラストラクチャビルディングブロックを提供します。 VM(仮想マシン)と考えることができますが、仮想マシンイメージを起動する代わりに、コンテナイメージを起動します。
ACIをコンテナバンドと組み合わせて使用する方法の興味深い例の1つは、Kubernetes用の実験的なACIコネクタです。 Kubernetesクラスターにインストールされると、ACIコネクターはクラスター内に仮想ノードを作成します。 無制限の電力を持つノードのように動作します。 それらについては、ポッドの起動を計画できますが、実際にはそれらはACIのコンテナのグループとして実行されます。
おそらくいつか、ACIコネクタは「サーバーレスKubernetes」の基盤となり、物理ノードを持たないKubernetes Azure Container Service(AKS)でクラスターを構築するでしょう。
最近、WindowsコンテナのサポートがKubernetesのACIコネクタに追加されました。本日は、ACIコネクタを使用してWindowsコンテナを実行する方法について説明します。
Kubernetes Cluster(AKS)用のAzure Container Serviceを構成する
AKSを使用してAzureでKubernetes管理クラスターを作成するのは非常に簡単です。 次のAzure CLIコマンドを実行します。
$ az group create -n antchu-aks-temp $ az aks create -g antchu-aks-temp -n antchu-aks-temp -c 1 -l eastus -k 1.8.2
これにより、リソースグループとAKSリソースが作成されます。 エージェントプールサイズを1に設定し、その場所をeastus
Kubernetesバージョン1.8.2
ます。
クラスターの準備ができたら、Azure CLIを使用して最新のKubernetes CLI( kubectl
)をインストールし、クラスターの構成ファイルを読み込むことができます。
$ az aks install-cli $ az aks get-credentials -g antchu-aks-temp -n antchu-aks-temp
クラスター内に1つのノードが表示されます。
$ kubectl get nodes NAME STATUS ROLES AGE VERSION aks-agentpool1-16617890-0 Ready agent 2m v1.8.2
Kubernetes用のACIコネクタのインストール
リソースグループを作成する
ACIコネクタをインストールする前に、ACIリソースがデプロイされるリソースグループを作成する必要があります。
$ az group create -n antchu-aci-temp -l eastus { "id": "/subscriptions/<subscription-id>/resourceGroups/antchu-aci-temp", "location": "eastus", "managedBy": null, "name": "antchu-aci-temp", "properties": { "provisioningState": "Succeeded" }, "tags": null }
新しいリソースグループの識別子に注意してください。
プライマリサービスの作成
次に、プライマリサービスを作成する必要があります。これは、ACIコネクタがコンテナインスタンスを作成し、新しく作成されたリソースグループでそれらを管理および削除するために使用します。 プライマリサービスには、リソースグループの貢献者の役割を割り当てる必要があります。 プライマリサービスを作成してロールを割り当てるには、前の手順で完全なリソースグループ識別子を使用して次のコマンドを実行します。
$ az ad sp create-for-rbac -n antchu-aks-aci-temp --role contributor --scopes <resource-group-id> { "appId": "<app-id>", "displayName": "antchu-aks-aci-temp", "name": "http://antchu-aks-aci-temp", "password": "<password>", "tenant": "<tenant-id>" }
appId
、 password
およびappId
プロパティの戻り値に注意してください。
ACIコネクタをインストールする
ACIコネクタは、 Docker Hubでイメージとして使用できます。 Windowsサポートを取得するには、カナリアアセンブリを使用する必要があります。 次のaci-connector.yaml
ファイルを作成します。 microsoft/aci-connector-k8s:canary
からコンテナを起動する1つのコンテナでKubernetes deployment
を定義しmicrosoft/aci-connector-k8s:canary
。
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: aci-connector namespace: default spec: replicas: 1 template: metadata: labels: app: aci-connector spec: containers: - name: aci-connector image: microsoft/aci-connector-k8s:canary imagePullPolicy: Always env: - name: AZURE_CLIENT_ID value: <tenant-id> - name: AZURE_CLIENT_KEY value: <app-id> - name: AZURE_TENANT_ID value: <tenant-id> - name: AZURE_SUBSCRIPTION_ID value: <subscription-id> - name: ACI_RESOURCE_GROUP value: antchu-aci-temp
環境変数を前のコマンドから取得した値に置き換えます。 次に、Kubernetesでdeployment
を作成します。
$ kubectl create -f aci-connector.yaml
ここで、クラスターの状態を見ると、さらに2つの新しい仮想ノードが表示されます。
$ kubectl get nodes NAME STATUS ROLES AGE VERSION aci-connector-0 Ready <none> 10s v1.6.6 aci-connector-1 Ready <none> 10s v1.6.6 aks-agentpool1-16617890-0 Ready agent 9m v1.8.2
aci-connector-0
コンテナーを起動することを計画すると、Linuxコンテナーが起動します。 aci-connector-1
はWindowsコンテナを起動します。
Kubernetesがポッドを誤ってロードするのを防ぐため、ACIコネクターのノードにazure.com/aci:NoSchedule taint
が追加されました。 ノードのプロパティを見ると、これがわかります。
$ kubectl describe node aci-connector-1 Name: aci-connector-1 Roles: <none> Labels: beta.kubernetes.io/os=1 Annotations: node.alpha.kubernetes.io/ttl=0 Taints: azure.com/aci:NoSchedule …
ACIでWindowsコンテナを起動する予定です
次の内容でiis-pod.yaml
を作成しiis-pod.yaml
。 Windows microsoft/iis:windowsservercore
の内容を表示する単一のコンテナについて説明していmicrosoft/iis:windowsservercore
。
apiVersion: v1 kind: Pod metadata: name: iis-winsvrcore spec: containers: - image: microsoft/iis:windowsservercore imagePullPolicy: Always name: iis-winsvrcore dnsPolicy: ClusterFirst nodeName: aci-connector-1
注:Kubernetesに対して、これはaci-connector-1
という名前のノードで実行する必要があることを明示的に伝えaci-connector-1
。 以下で作成します:
$ kubectl create -f iis-pod.yaml pod "iis-winsvrcore" created
そして、囲炉裏のリストをリクエストすると、リストに表示されます:
$ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE aci-connector-54b97586f5-l96l9 1/1 Running 0 32m 10.244.0.10 aks-agentpool1-16617890-0 iis-winsvrcore 1/1 Running 0 2m 13.88.182.114 aci-connector-1
ACIがイメージをダウンロードして実行するのに数分かかります。 現在、ACIコネクタにエラーがあります。アンダーがまだ作成されている場合でも«Running»
状態でアンダーが表示されます。 Azure CLIコマンドを実行して、コンテナーインスタンスの状態を確認する必要があります。
$ az container list -o table Name ResourceGroup ProvisioningState Image IP:ports CPU/Memory OsType Location ----------------- --------------- ------------------- ------------------------------- ----------------- --------------- -------- ---------- iis-winsvrcore antchu-aci-temp Creating microsoft/iis:windowsservercore 13.88.182.114:80 1.0 core/1.5 gb Windows westus
ステータスが«Succeeded»
変わると、コンテナのIPアドレスに移動できます。 IPを取得するには、 kubectl get -o wide
または上記のaz
コマンドの出力を使用します。
更新-2017年11月21日
ACIおよびACIコネクタマネージャーのRia Bhatiaによるこのビデオをご覧ください。 私たちが話し合ったテクノロジーの素晴らしいデモ。
オリジナル: Kubernetes用のAzure Container Instances(ACI)コネクターを使用したWindowsコンテナーのデプロイ 。