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.

注意

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.

このドキュメントでは、AKS 上でコンテナー インスタンス用に Virtual Kubelet を構成する方法について詳しく説明します。This document details configuring the Virtual Kubelet for container instances on an AKS.

前提条件Prerequisite

このドキュメントでは、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.33 以降がインストールされている必要があります。You also need the Azure CLI version 2.0.33 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 をインストールするには、Helm も必要です。To install the Virtual Kubelet, Helm is also required.

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 myAKSCluster --name myAKSCluster --connector-name virtual-kubelet --os-type Both

これらの引数は aks install-connector コマンドに使用できます。These arguments are available for the 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. 使用できる値: Both、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-23443254-0                Ready     agent     16d       v1.9.6
aks-nodepool1-23443254-1                Ready     agent     16d       v1.9.6
aks-nodepool1-23443254-2                Ready     agent     16d       v1.9.6
virtual-kubelet-virtual-kubelet-linux   Ready     agent     4m        v1.8.3
virtual-kubelet-virtual-kubelet-win     Ready     agent     4m        v1.8.3

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-2559879000-8vmjw     1/1       Running   0          39s       52.179.3.180   virtual-kubelet-virtual-kubelet-linux

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-win ノードでスケジュールされています。Notice that the nanoserver-iis pod has been scheduled on the virtual-kubelet-virtual-kubelet-win node.

$ kubectl get pods -o wide

NAME                                READY     STATUS    RESTARTS   AGE       IP             NODE
nanoserver-iis-868bc8d489-tq4st     1/1       Running   8         21m       138.91.121.91   virtual-kubelet-virtual-kubelet-win

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 myAKSCluster --name myAKSCluster --connector-name virtual-kubelet

注意

両方の 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.