KubernetesのInfinite Capacityノード

数か月前、新しいAzure Container Instances(ACI)サービスのリリースについて説明しました。これにより、コンテナーの展開が可能な限り簡単になります。 今日は、KubernetesクラスターにAzure Container ServicesインスタンスをデプロイできるKubernetes用のAzure Container Instancesコネクターについて説明します。



このコネクタは実験的なものであり、実際のプロジェクトには使用しないでください。







一連の記事「コンテナについて語る」:



1. 高速展開コンテナ

2. KubernetesおよびVSTSを使用したDevOps。 パート1:ローカル履歴。

3. KubernetesおよびVSTSを使用したDevOps。 パート2:クラウド履歴。

4. Kubernetesの容量が無限大ノード。



このアプローチにより、必要なリソースをほぼ瞬時にクラスターに割り当てることができ、管理者がVMインフラストラクチャを管理する必要がなくなり、Kubernetes APIの使用を継続できます。 Kubernetesクラスターでは、仮想マシンとコンテナーインスタンスを同時に使用できるため、両方のテクノロジーを活用できます。



動作原理



大まかに言うと、ACIコネクタは次のようにKubeletインターフェイスを模倣します。





コネクタがaci-connectorという名前のノードとして登録されたら、ハース設定でnodeName:aci-connectorを指定して、Azureコンテナインスタンスサービスを介して開始できます。 このノードが指定されていない構成のポッドは、通常モードのスケジュールに従って開始されます。 以下は、ACIコネクタとKubernetesスケジューラを汚染と許容で使用するための手順です。



ACIコネクタk8s



必要条件



  1. 動作するazコマンドラインクライアントは、 Azure CLI 2.0インストールすることです。
  2. 作業kubectlを使用したKubernetesクラスター -AzureでKubernetesクラスターを構成します


現在の機能



に加え 、ハースマニフェストで定義されている場合、次のKubernetes機能が現在サポートされています。 aci-connectorが展開されると、このリストは変更されます。





現在の制限



現在、次のKubernetes機能はaci-connectorでサポートされていません。





速く試す方法



  1. examples / aci-connector.yamlファイルを編集し、環境変数を指定します。
  2. kubectl create -f examples / aci-connector.yamlコマンドでACIコネクタを起動します。
  3. kubectl get nodesコマンドがaci-connectorノードを表示するのを待ちます。
  4. kubectl create -f examples / nginx-pod.yamlコマンドを使用して、ACI経由でNGINXで実行します。
  5. パブリックアドレスを使用して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ファイルを編集し、上記の値を使用して環境変数を入力します。





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
      
      






All Articles