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 

Source: https://habr.com/ru/post/J338686/


All Articles