Azure Kubernetes Service (AKS) での Virtual Kubelet の使用Use Virtual Kubelet with Azure Kubernetes Service (AKS)

Azure Container Instances (ACI) には Azure 内でコンテナーを実行するためのホスト環境が用意されています。Azure Container Instances (ACI) provide a hosted environment for running containers in Azure. ACI を使用する場合、Azure がユーザーに代わって管理を担当するので、基礎となるコンピューティング インフラストラクチャを管理する必要はありません。When using ACI, there is no need to manage the underlying compute infrastructure, Azure handles this management for you. ACI でコンテナーを実行すると、実行中の各コンテナーについて秒単位で課金されます。When running containers in ACI, you are charged by the second for each running container.

Azure Container Instances に Virtual Kubelet プロバイダーを使用する場合、標準の Kubernetes ノードであるかのように、コンテナー インスタンス上で Linux と Windows 両方のコンテナーをスケジュールすることができます。When using the Virtual Kubelet provider for Azure Container Instances, both Linux and Windows containers can be scheduled on a container instance as if it is a standard Kubernetes node. この構成では、Kubernetes の機能と、コンテナー インスタンスの管理値とコスト上の利点の両方を活用できます。This configuration allows you to take advantage of both the capabilities of Kubernetes and the management value and cost benefit of container instances.

注意

AKS では、ACI でコンテナーをスケジュールするための "仮想ノード" と呼ばれる組み込みサポートを利用できるようになりました。AKS now has built-in support for scheduling containers on ACI, called virtual nodes. これらの仮想ノードでは、現在、Linux コンテナー インスタンスがサポートされています。These virtual nodes currently support Linux container instances. Windows コンテナー インスタンスをスケジュールする必要がある場合は、引き続き Virtual Kubelet を使用できます。If you need to schedule Windows container instances, you can continue using Virtual Kubelet. それ以外の場合は、この記事に記載されている手動の Virtual Kubelet の手順ではなく、仮想ノードを使用する必要があります。Otherwise, you should use virtual nodes instead of the manual Virtual Kubelet instructions noted in this article. 仮想ノードを使い始めるには、Azure CLI または Azure portal を使用します。You can get started with virtual nodes using the Azure CLI or Azure portal.

Virtual Kubelet は実験的なオープン ソース プロジェクトなので、その点を考慮して使用する必要があります。Virtual Kubelet is an experimental open source project and should be used as such. Virtual Kubelet に関する投稿、問題の提起、詳細情報については、Virtual Kubelet GitHub プロジェクトに関するページを参照してください。To contribute, file issues, and read more about virtual kubelet, see the Virtual Kubelet GitHub project.

開始する前にBefore you begin

このドキュメントでは、AKS クラスターがあることを前提としています。This document assumes that you have an AKS cluster. AKS クラスターが必要な場合は、Azure Kubernetes Service (AKS) のクイック スタートに関するページを参照してください。If you need an AKS cluster, see the Azure Kubernetes Service (AKS) quickstart.

また、Azure CLI バージョン 2.0.65 以降がインストールされている必要があります。You also need the Azure CLI version 2.0.65 or later. バージョンを確認するには、az --version を実行します。Run az --version to find the version. インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。If you need to install or upgrade, see Install Azure CLI.

Virtual Kubelet をインストールするには、AKS クラスターに Helm をインストールして構成します。To install the Virtual Kubelet, install and configure Helm in your AKS cluster. 必要に応じて、Tiller が Kubernetes RBAC で使用するために構成されていることを確認します。Make sure that your Tiller is configured for use with Kubernetes RBAC, if needed.

Container Instances 機能プロバイダーを登録するRegister Container Instances feature provider

以前に Azure コンテナー インスタンス (ACI) サービスを使用していない場合は、ご使用のサブスクリプションでサービス プロバイダーを登録します。If you have not previously used the Azure Container Instance (ACI) service, register the service provider with your subscription. ACI プロバイダーの状態は、次の例で示すように az provider list コマンドを使用して確認できます。You can check the status of the ACI provider registration using the az provider list command, as shown in the following example:

az provider list --query "[?contains(namespace,'Microsoft.ContainerInstance')]" -o table

Microsoft.ContainerInstance プロバイダーは、次の出力の例で示すように Registered としてレポートします。The Microsoft.ContainerInstance provider should report as Registered, as shown in the following example output:

Namespace                    RegistrationState
---------------------------  -------------------
Microsoft.ContainerInstance  Registered

プロバイダーが NotRegistered として示される場合は、次の例で示すように az provider register を使用してプロバイダーを登録します。If the provider shows as NotRegistered, register the provider using the az provider register as shown in the following example:

az provider register --namespace Microsoft.ContainerInstance

RBAC 対応クラスターの場合For RBAC-enabled clusters

AKS クラスターが RBAC に対応している場合、Tiller で使用するためのサービス アカウントとロール バインディングを作成する必要があります。If your AKS cluster is RBAC-enabled, you must create a service account and role binding for use with Tiller. 詳細については、Helm でのロール ベースのアクセス制御に関する説明を参照してください。For more information, see Helm Role-based access control. サービス アカウントとロールのバインドを作成するには、rbac-virtual-kubelet.yaml という名前のファイルを作成して次の定義を貼り付けます。To create a service account and role binding, create a file named rbac-virtual-kubelet.yaml and paste the following definition:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

次の例に示すように、kubectl apply でサービス アカウントとバインドを適用し、rbac-virtual-kubelet.yaml ファイルを指定します。Apply the service account and binding with kubectl apply and specify your rbac-virtual-kubelet.yaml file, as shown in the following example:

$ kubectl apply -f rbac-virtual-kubelet.yaml

clusterrolebinding.rbac.authorization.k8s.io/tiller created

Tiller サービス アカウントを使用するように Helm を構成する:Configure Helm to use the tiller service account:

helm init --service-account tiller

続けて、AKS クラスターに Virtual Kubelet をインストールすることができます。You can now continue to installing the Virtual Kubelet into your AKS cluster.

インストールInstallation

Virtual Kubelet をインストールするには、az aks install-connector コマンドを使用します。Use the az aks install-connector command to install Virtual Kubelet. 次の例では、Linux と Windows 両方のコネクタを展開します。The following example deploys both the Linux and Windows connector.

az aks install-connector \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --connector-name virtual-kubelet \
    --os-type Both

これらの引数は、az aks install-connector コマンドに使用できます。These arguments are available for the az aks install-connector command.

引数:Argument: 説明Description 必須Required
--connector-name ACI コネクタの名前。Name of the ACI Connector. はいYes
--name -n--name -n マネージド クラスターの名前。Name of the managed cluster. はいYes
--resource-group -g--resource-group -g リソース グループの名前。Name of resource group. はいYes
--os-type コンテナー インスタンスのオペレーティング システムのタイプ。Container instances operating system type. 使用できる値は以下の通りです。両方、Linux、Windows。Allowed values: Both, Linux, Windows. 既定値はLinux。Default: Linux. いいえNo
--aci-resource-group ACI コンテナー グループを作成するリソース グループ。The resource group in which to create the ACI container groups. いいえNo
--location -l--location -l ACI コンテナー グループを作成する場所。The location to create the ACI container groups. いいえNo
--service-principal Azure API に対する認証に使用されるサービス プリンシパル。Service principal used for authentication to Azure APIs. いいえNo
--client-secret サービス プリンシパルに関連付けられているシークレット。Secret associated with the service principal. いいえNo
--chart-url ACI Connector をインストールする Helm チャートの URL。URL of a Helm chart that installs ACI Connector. いいえNo
--image-tag Virtual Kubelet コンテナー イメージのイメージ タグ。The image tag of the virtual kubelet container image. いいえNo

Virtual Kubelet を検証するValidate Virtual Kubelet

Virtual Kubelet がインストールされていることを検証するには、kubectl get nodes コマンドを使用して Kubernetes ノードの一覧を返します。To validate that Virtual Kubelet has been installed, return a list of Kubernetes nodes using the kubectl get nodes command:

$ kubectl get nodes

NAME                                             STATUS   ROLES   AGE   VERSION
aks-nodepool1-56577038-0                         Ready    agent   11m   v1.12.8
virtual-kubelet-virtual-kubelet-linux-eastus     Ready    agent   39s   v1.13.1-vk-v0.9.0-1-g7b92d1ee-dev
virtual-kubelet-virtual-kubelet-windows-eastus   Ready    agent   37s   v1.13.1-vk-v0.9.0-1-g7b92d1ee-dev

Linux コンテナーを実行するRun Linux container

virtual-kubelet-linux.yaml という名前のファイルを作成し、そこに以下の YAML をコピーします。Create a file named virtual-kubelet-linux.yaml and copy in the following YAML. ノード上のコンテナーをスケジュールするために nodeSelectortoleration が使用されている点に気を付けてください。Take note that a nodeSelector and toleration are being used to schedule the container on the node.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: aci-helloworld
spec:
  replicas: 1
  selector:
    matchLabels:
      app: aci-helloworld
  template:
    metadata:
      labels:
        app: aci-helloworld
    spec:
      containers:
      - name: aci-helloworld
        image: microsoft/aci-helloworld
        ports:
        - containerPort: 80
      nodeSelector:
        beta.kubernetes.io/os: linux
        kubernetes.io/role: agent
        type: virtual-kubelet
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Equal
        value: azure
        effect: NoSchedule

kubectl create コマンドを使用してアプリケーションを実行します。Run the application with the kubectl create command.

kubectl create -f virtual-kubelet-linux.yaml

-o wide 引数を指定して kubectl get pods コマンドを使用し、スケジュールされたノードがあるポッドの一覧を出力します。Use the kubectl get pods command with the -o wide argument to output a list of pods with the scheduled node. aci-helloworld ポッドは virtual-kubelet-virtual-kubelet-linux ノードでスケジュールされています。Notice that the aci-helloworld pod has been scheduled on the virtual-kubelet-virtual-kubelet-linux node.

$ kubectl get pods -o wide

NAME                              READY   STATUS    RESTARTS   AGE     IP               NODE
aci-helloworld-7b9ffbf946-rx87g   1/1     Running   0          22s     52.224.147.210   virtual-kubelet-virtual-kubelet-linux-eastus

Windows コンテナーを実行するRun Windows container

virtual-kubelet-windows.yaml という名前のファイルを作成し、そこに以下の YAML をコピーします。Create a file named virtual-kubelet-windows.yaml and copy in the following YAML. ノード上のコンテナーをスケジュールするために nodeSelectortoleration が使用されている点に気を付けてください。Take note that a nodeSelector and toleration are being used to schedule the container on the node.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nanoserver-iis
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nanoserver-iis
  template:
    metadata:
      labels:
        app: nanoserver-iis
    spec:
      containers:
      - name: nanoserver-iis
        image: microsoft/iis:nanoserver
        ports:
        - containerPort: 80
      nodeSelector:
        beta.kubernetes.io/os: windows
        kubernetes.io/role: agent
        type: virtual-kubelet
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Equal
        value: azure
        effect: NoSchedule

kubectl create コマンドを使用してアプリケーションを実行します。Run the application with the kubectl create command.

kubectl create -f virtual-kubelet-windows.yaml

-o wide 引数を指定して kubectl get pods コマンドを使用し、スケジュールされたノードがあるポッドの一覧を出力します。Use the kubectl get pods command with the -o wide argument to output a list of pods with the scheduled node. nanoserver-iis ポッドは virtual-kubelet-virtual-kubelet-windows ノードでスケジュールされています。Notice that the nanoserver-iis pod has been scheduled on the virtual-kubelet-virtual-kubelet-windows node.

$ kubectl get pods -o wide

NAME                              READY   STATUS    RESTARTS   AGE     IP               NODE
nanoserver-iis-5d999b87d7-6h8s9   1/1     Running   0          47s     52.224.143.39    virtual-kubelet-virtual-kubelet-windows-eastus

Virtual Kubelet を削除するRemove Virtual Kubelet

Virtual Kubelet を削除するには、az aks remove-connector コマンドを使用します。Use the az aks remove-connector command to remove Virtual Kubelet. 引数の値を、コネクタ、AKS クラスター、および AKS クラスター リソース グループの名前に置き換えます。Replace the argument values with the name of the connector, AKS cluster, and the AKS cluster resource group.

az aks remove-connector \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --connector-name virtual-kubelet \
    --os-type Both

注意

両方の OS コネクタを削除する際にエラーが発生した場合、または Windows または Linux OS コネクタのみを削除する場合は、手動で OS の種類を指定できます。If you encounter errors removing both OS connectors, or want to remove just the Windows or Linux OS connector, you can manually specify the OS type. 前の az aks remove-connector コマンドに --os-type パラメーターを追加し、Windows または Linux を指定します。Add the --os-type parameter to the previous az aks remove-connector command, and specify Windows or Linux.

次の手順Next steps

Virtual Kubelet で考えられる問題については、既知の問題と回避策に関する記事を参照してください。For possible issues with the Virtual Kubelet, see the Known quirks and workarounds. Virtual Kubelet の問題を報告するには、GitHub の問題を開きますTo report problems with the Virtual Kubelet, open a GitHub issue.

Virtual Kubelet GitHub プロジェクトのページで Virtual Kubelet の詳細について参照してください。Read more about Virtual Kubelet at the Virtual Kubelet GitHub project.