このコネクタは実験的なものであり、実際のプロジェクトには使用しないでください。
一連の記事「コンテナについて語る」:
1. 高速展開コンテナ 。
2. KubernetesおよびVSTSを使用したDevOps。 パート1:ローカル履歴。
3. KubernetesおよびVSTSを使用したDevOps。 パート2:クラウド履歴。
4. Kubernetesの容量が無限大のノード。
このアプローチにより、必要なリソースをほぼ瞬時にクラスターに割り当てることができ、管理者がVMインフラストラクチャを管理する必要がなくなり、Kubernetes APIの使用を継続できます。 Kubernetesクラスターでは、仮想マシンとコンテナーインスタンスを同時に使用できるため、両方のテクノロジーを活用できます。
動作原理
大まかに言うと、ACIコネクタは次のようにKubeletインターフェイスを模倣します。
- リソースが無制限のノードとしてKubernetesに登録されている。
- 仮想マシン上のノードではなく、Azureコンテナインスタンスのサービスに実行するポッドを送信します。
コネクタがaci-connectorという名前のノードとして登録されたら、ハース設定でnodeName:aci-connectorを指定して、Azureコンテナインスタンスサービスを介して開始できます。 このノードが指定されていない構成のポッドは、通常モードのスケジュールに従って開始されます。 以下は、ACIコネクタとKubernetesスケジューラを汚染と許容で使用するための手順です。
必要条件
- 動作するazコマンドラインクライアントは、 Azure CLI 2.0をインストールすることです。
- 作業kubectlを使用したKubernetesクラスター -AzureでKubernetesクラスターを構成します 。
現在の機能
例に加えて 、ハースマニフェストで定義されている場合、次のKubernetes機能が現在サポートされています。 aci-connectorが展開されると、このリストは変更されます。
- 環境変数
- チーム
- ImagePullSecret
- ボリュームとして共有されるAzureファイル
現在の制限
現在、次のKubernetes機能はaci-connectorでサポートされていません。
- 構成マップ
- 秘密
- ServiceAccounts
- ボリューム
- kubectlログ
- kubectl exec
速く試す方法
- examples / aci-connector.yamlファイルを編集し、環境変数を指定します。
- kubectl create -f examples / aci-connector.yamlコマンドでACIコネクタを起動します。
- kubectl get nodesコマンドがaci-connectorノードを表示するのを待ちます。
- kubectl create -f examples / nginx-pod.yamlコマンドを使用して、ACI経由でNGINXで実行します。
- パブリックアドレスを使用してNGINXで開きます。
順を追った説明
リソースグループを作成する
ACIコネクタは、指定されたリソースグループに各コンテナインスタンスを作成します。 次のコマンドを使用して、新しいリソースグループを作成できます。
$ az group create -n aci-test -l westus { "id": "/subscriptions/<subscriptionId>/resourceGroups/aci-test", "location": "westus", "managedBy": null, "name": "aci-test", "properties": { "provisioningState": "Succeeded" }, "tags": null }
examples / aci-connector.yamlを編集し、環境変数ACI_RESOURCE_GROUPでリソースグループの名前を指定します。
サービスプリンシパルを作成する
ACIコネクタを使用してAzureサブスクリプションにリソースを作成するには、サービスプリンシパルが必要です。 以下の手順に従って、Azure CLIを使用してサービスプリンシパルを作成できます。
Azure CLIを使用してsubscriptionIdを見つけます。
$ az account list -o table Name CloudName SubscriptionId State IsDefault ----------------------------------------------- ----------- ------------------------------------ ------- ----------- Pay-As-You-Go AzureCloud 12345678-9012-3456-7890-123456789012 Enabled True
azを使用して、サブスクリプションで動作するサービスプリンシパルを作成します。
$ az ad sp create-for-rbac --role=Contributor --scopes /subscriptions/<subscriptionId>/ { "appId": "<redacted>", "displayName": "azure-cli-2017-07-19-19-13-19", "name": "http://azure-cli-2017-07-19-19-13-19", "password": "<redacted>", "tenant": "<redacted>" }
examples / aci-connector.yamlファイルを編集し、上記の値を使用して環境変数を入力します。
- AZURE_CLIENT_ID:appIdアプリケーション識別子を入力します。
- AZURE_CLIENT_KEY:パスワードを入力します。
- AZURE_TENANT_ID:テナントを指定します。
- AZURE_SUBSCRIPTION_ID:サブスクリプション識別子subscriptionIdを入力します。
Microsoft.ContainerInstanceが登録されていることを確認してください
$ az provider list -o table | grep ContainerInstance Microsoft.ContainerInstance NotRegistered
プロバイダーが登録されていない場合は、次のコマンドを使用して登録します:
$ az provider register -n Microsoft.ContainerInstance $ az provider list -o table | grep ContainerInstance Microsoft.ContainerInstance Registered
ACIコネクタをインストールする
$ kubectl create -f examples/aci-connector.yaml deployment "aci-connector" created $ kubectl get nodes -w NAME STATUS AGE VERSION aci-connector Ready 3s 1.6.6 k8s-agentpool1-31868821-0 Ready 5d v1.7.0 k8s-agentpool1-31868821-1 Ready 5d v1.7.0 k8s-agentpool1-31868821-2 Ready 5d v1.7.0 k8s-master-31868821-0 Ready,SchedulingDisabled 5d v1.7.0
Helmを使用したACIコネクタのインストール(オプション)
最初に、 / charts / aci-connectorディレクトリにあるvalues.yamlファイルで値を指定します。
次に、チャートを設定できます。
$ helm install --name my-release ./charts/aci-connector
コマンドラインから値を設定することもでき、values.yamlファイルで指定されたすべての値が上書きされます。
$ helm install --name my-release --set env.azureClientId=YOUR-AZURECLIENTID,env.azureClientKey=YOUR-AZURECLIENTKEY,env.azureTenantId=YOUR-AZURETENANTID,env.azureSubscriptionId=YOUR-AZURESUBSCRIPTIONID,env.aciResourceGroup=YOUR-ACIRESOURCEGROUP,env.aciRegion=YOUR-ACI-REGION ./charts/aci-connector
NGINXでサンプルをインストールする
$ kubectl create -f examples/nginx-pod.yaml pod "nginx" created $ kubectl get po -w -o wide NAME READY STATUS RESTARTS AGE IP NODE aci-connector-3396840456-v75q2 1/1 Running 0 44s 10.244.2.21 k8s-agentpool1-31868821-2 nginx 1/1 Running 0 31s 13.88.27.150 aci-connector
underはaci-connectorノードにデプロイされることに注意してください。 これで、指定したパブリックIPアドレスからアクセスできるようになります。
Kubernetes Schedulerを使用する
nginx-podの例では、ホスト名はハードコーディングされていますが、Kubernetesスケジューラーを使用することもできます。
aci仮想ホストには、デフォルトのNoSchedule効果を持つ(汚染)制約(azure.com/aci)があります。 つまり、デフォルトでは、ポッドは明示的にホストされていない限り、aciノードで起動しません。
ただし、Kubernetesスケジューラーは、ACIホストスケジュールにこの制限を許容するサブを含めることができます。
そのような寛容さを備えた炉床の例へのリンク 。
この囲炉裏の使用は簡単です。
$ kubectl create -f examples/nginx-pod-tolerations.yaml
クラスターに他のノードがある場合、これは必ずしもAzureコンテナーインスタンスサービスにあるとは限らないことに注意してください。
サービスでAzureコンテナインスタンスを強制的にデプロイするには、最初の例のようにNodeNameを明示的に指定するか、kubectl delete nodes <node name>コマンドで他のすべてのクラスターノードを削除します。 3番目のオプションは、クラスター内の他のワークロードをデプロイすることです。 この場合、スケジューラは、Azure Container Instance Services APIを介してタスクをスケジュールする必要があります。
カナリアビルドの使用
カナリアアセンブリは、メインブランチから定期的に作成されるコネクタバージョンです。 これらのアセンブリは公式リリースではないため、安定性は保証されていませんが、最新の機能をテストできます。
Canaryの最新バージョンを使用するには、aci-connectorの更新パッケージをインストールし、次のコマンドを使用してコンテナタグを更新できます。
$ kubectl set image deploy/aci-connector aci-connector=microsoft/aci-connector-k8s:canary