Azure Kubernetes Service (AKS) での Helm を使用したアプリケーションのインストールInstall applications with Helm in Azure Kubernetes Service (AKS)

Helm は、Kubernetes アプリケーションのインストールとライフサイクルの管理に役立つオープン ソースのパッケージ化ツールです。Helm is an open-source packaging tool that helps you install and manage the lifecycle of Kubernetes applications. APTYum などの Linux パッケージ マネージャーと同様に、Helm は、構成済みの Kubernetes リソースのパッケージである Kubernetes チャートの管理に使用されます。Similar to Linux package managers such as APT and Yum, Helm is used to manage Kubernetes charts, which are packages of preconfigured Kubernetes resources.

この記事では、AKS 上の Kubernetes クラスターに Helm を構成して使用する方法を説明します。This article shows you how to configure and use Helm in a Kubernetes cluster on AKS.

開始する前にBefore you begin

この記事は、AKS クラスターがすでに存在していることを前提としています。This article assumes that you have an existing AKS cluster. AKS クラスターが必要な場合は、Azure CLI を使用してまたはAzure portal を使用して AKS のクイック スタートを参照してください。If you need an AKS cluster, see the AKS quickstart using the Azure CLI or using the Azure portal.

Helm CLI もインストールする必要があります。これは、開発システムで実行されるクライアントです。You also need the Helm CLI installed, which is the client that runs on your development system. Helm を使用してアプリケーションを起動、停止、管理することができます。It allows you to start, stop, and manage applications with Helm. Azure Cloud Shell を使用している場合、Helm CLI は既にインストールされています。If you use the Azure Cloud Shell, the Helm CLI is already installed. お使いのローカル プラットフォームでのインストール手順については、「Installing Helm (Helm のインストール)」をご覧ください。For installation instructions on your local platform see, Installing Helm.

重要

Helm は Linux ノードで実行するものです。Helm is intended to run on Linux nodes. クラスター内に Windows Server ノードがある場合、Helm ポッドが確実に Linux ノードでのみ実行されるようにスケジュールする必要があります。If you have Windows Server nodes in your cluster, you must ensure that Helm pods are only scheduled to run on Linux nodes. また、インストールする Helm チャートが確実に正しいノードで実行されるようにスケジュールする必要もあります。You also need to ensure that any Helm charts you install are also scheduled to run on the correct nodes. この記事のコマンドでは、node-selectors を使用し、ポッドが正しいノードにスケジュールされるが、一部の Helm チャートではノード セレクターが公開されないようにします。The commands in this article use node-selectors to make sure pods are scheduled to the correct nodes, but not all Helm charts may expose a node selector. taints などの、他のオプションをクラスターで使用することを検討することもできます。You can also consider using other options on your cluster, such as taints.

サービス アカウントの作成Create a service account

RBAC が有効になった AKS クラスターに Helm をデプロイする前に、Tiller サービスのサービス アカウントとロール バインディングが必要になります。Before you can deploy Helm in an RBAC-enabled AKS cluster, you need a service account and role binding for the Tiller service. RBAC 対応のクラスターの Helm / Tiller に関する詳細については、「Tiller, Namespaces, and RBAC」(Tiller、名前空間、および RBAC) を参照してください。For more information on securing Helm / Tiller in an RBAC enabled cluster, see Tiller, Namespaces, and RBAC. ご利用の AKS クラスターが RBAC に対応していない場合は、この手順をスキップしてください。If your AKS cluster is not RBAC enabled, skip this step.

helm-rbac.yaml という名前のファイルを作成し、そこに以下の YAML をコピーします。Create a file named helm-rbac.yaml and copy in the following YAML:

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 コマンドを使って、サービス アカウントとロール バインディングを作成します。Create the service account and role binding with the kubectl apply command:

kubectl apply -f helm-rbac.yaml

Tiller と Helm をセキュリティで保護するSecure Tiller and Helm

Helm クライアントと Tiller サービスは TLS/SSL を使用して互いに認証および通信を行います。The Helm client and Tiller service authenticate and communicate with each other using TLS/SSL. この認証方法では、Kubernetes クラスターをセキュリティで保護して、どのサービスをデプロイできるかを確認できます。This authentication method helps to secure the Kubernetes cluster and what services can be deployed. セキュリティを強化するために、独自の署名証明書を生成できます。To improve security, you can generate your own signed certificates. 各 Helm ユーザーは独自のクライアント証明書を受信し、Tiller は証明書が適用された Kubernetes クラスターで初期化されていました。Each Helm user would receive their own client certificate, and Tiller would be initialized in the Kubernetes cluster with certificates applied. 詳しくは、「Using TLS/SSL between Helm and Tiller」(Helm と Tiller 間での TLS/SSL の使用) を参照してください。For more information, see Using TLS/SSL between Helm and Tiller.

RBAC 対応の Kubernetes クラスターを使用している場合、Tiller のクラスターに対するアクセスのレベルを制御できます。With an RBAC-enabled Kubernetes cluster, you can control the level of access Tiller has to the cluster. Tiller のデプロイに使用される Kubernetes 名前空間を定義し、Tiller によるリソースのデプロイに使用できる名前空間を制限できます。You can define the Kubernetes namespace that Tiller is deployed in, and restrict what namespaces Tiller can then deploy resources in. この方法により、さまざまな名前空間の Tiller インスタンスを作成し、デプロイ境界を制限したり、Helm クライアントのユーザーの範囲を特定の名前空間に制限したりできます。This approach lets you create Tiller instances in different namespaces and limit deployment boundaries, and scope the users of Helm client to certain namespaces. 詳しくは、「Helm role-based access controls」(Helm でのロール ベースのアクセス制御) を参照してください。For more information, see Helm role-based access controls.

Helm の構成Configure Helm

基本的な Tiller を AKS にデプロイするには、helm init コマンドを使用します。To deploy a basic Tiller into an AKS cluster, use the helm init command. ご利用のクラスターが RBAC に対応していない場合は、--service-account 引数と値を削除します。If your cluster is not RBAC enabled, remove the --service-account argument and value. Tiller と Helm 用に TLS または SSL を構成した場合、この基本的な初期化手順はスキップし、次の例に示されているように必要な --tiller-tls- を指定します。If you configured TLS/SSL for Tiller and Helm, skip this basic initialization step and instead provide the required --tiller-tls- as shown in the next example.

helm init --service-account tiller --node-selectors "beta.kubernetes.io/os"="linux"

Helm と Tiller 間に TLS または SSL を構成した場合、次の例に示されているように、--tiller-tls-* パラメーターと独自の証明書の名前を指定します。If you configured TLS/SSL between Helm and Tiller provide the --tiller-tls-* parameters and names of your own certificates, as shown in the following example:

helm init \
    --tiller-tls \
    --tiller-tls-cert tiller.cert.pem \
    --tiller-tls-key tiller.key.pem \
    --tiller-tls-verify \
    --tls-ca-cert ca.cert.pem \
    --service-account tiller \
    --node-selectors "beta.kubernetes.io/os"="linux"

Helm チャートの検索Find Helm charts

Helm チャートは、Kubernetes クラスターにアプリケーションをデプロイするために使用されます。Helm charts are used to deploy applications into a Kubernetes cluster. 事前に作成されている Helm チャートを検索するには、helm search コマンドを使用します。To search for pre-created Helm charts, use the helm search command:

helm search

次の出力例の抜粋は、使用できる一部の Helm チャートを示しています。The following condensed example output shows some of the Helm charts available for use:

$ helm search

NAME                           CHART VERSION    APP VERSION  DESCRIPTION
stable/aerospike               0.1.7            v3.14.1.2    A Helm chart for Aerospike in Kubernetes
stable/anchore-engine          0.1.7            0.1.10       Anchore container analysis and policy evaluatio...
stable/apm-server              0.1.0            6.2.4        The server receives data from the Elastic APM a...
stable/ark                     1.0.1            0.8.2        A Helm chart for ark
stable/artifactory             7.2.1            6.0.0        Universal Repository Manager supporting all maj...
stable/artifactory-ha          0.2.1            6.0.0        Universal Repository Manager supporting all maj...
stable/auditbeat               0.1.0            6.2.4        A lightweight shipper to audit the activities o...
stable/aws-cluster-autoscaler  0.3.3                         Scales worker nodes within autoscaling groups.
stable/bitcoind                0.1.3            0.15.1       Bitcoin is an innovative payment network and a ...
stable/buildkite               0.2.3            3            Agent for Buildkite
stable/burrow                  0.4.4            0.17.1       Burrow is a permissionable smart contract machine
stable/centrifugo              2.0.1            1.7.3        Centrifugo is a real-time messaging server.
stable/cerebro                 0.1.0            0.7.3        A Helm chart for Cerebro - a web admin tool tha...
stable/cert-manager            v0.3.3           v0.3.1       A Helm chart for cert-manager
stable/chaoskube               0.7.0            0.8.0        Chaoskube periodically kills random pods in you...
stable/chartmuseum             1.5.0            0.7.0        Helm Chart Repository with support for Amazon S...
stable/chronograf              0.4.5            1.3          Open-source web application written in Go and R...
stable/cluster-autoscaler      0.6.4            1.2.2        Scales worker nodes within autoscaling groups.
stable/cockroachdb             1.1.1            2.0.0        CockroachDB is a scalable, survivable, strongly...
stable/concourse               1.10.1           3.14.1       Concourse is a simple and scalable CI system.
stable/consul                  3.2.0            1.0.0        Highly available and distributed service discov...
stable/coredns                 0.9.0            1.0.6        CoreDNS is a DNS server that chains plugins and...
stable/coscale                 0.2.1            3.9.1        CoScale Agent
stable/dask                    1.0.4            0.17.4       Distributed computation in Python with task sch...
stable/dask-distributed        2.0.2                         DEPRECATED: Distributed computation in Python
stable/datadog                 0.18.0           6.3.0        DataDog Agent
...

チャートの一覧を更新するには、helm repo update コマンドを使用します。To update the list of charts, use the helm repo update command. リポジトリ更新の成功例を次に示します。The following example shows a successful repo update:

$ helm repo update

Hold tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈ Happy Helming!⎈

Helm チャートの実行Run Helm charts

Helm を使用してチャートをインストールするには、helm install コマンドを使用して、インストールするチャートの名前を指定します。To install charts with Helm, use the helm install command and specify the name of the chart to install. Helm チャートのインストールを実際に確かめるために、Helm チャートを使用して基本的な nginx デプロイをインストールしてみましょう。To see installing a Helm chart in action, let's install a basic nginx deployment using a Helm chart. TLS/SSL を構成した場合は、--tls パラメーターを追加して Helm クライアント証明書を使用します。If you configured TLS/SSL, add the --tls parameter to use your Helm client certificate.

helm install stable/nginx-ingress \
    --set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
    --set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux

次の出力例の抜粋は、Helm チャートによって作成された Kubernetes リソースのデプロイ状態を示します。The following condensed example output shows the deployment status of the Kubernetes resources created by the Helm chart:

$ helm install stable/nginx-ingress --set controller.nodeSelector."beta\.kubernetes\.io/os"=linux --set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux

NAME:   flailing-alpaca
LAST DEPLOYED: Thu May 23 12:55:21 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/ConfigMap
NAME                                      DATA  AGE
flailing-alpaca-nginx-ingress-controller  1     0s

==> v1/Pod(related)
NAME                                                            READY  STATUS             RESTARTS  AGE
flailing-alpaca-nginx-ingress-controller-56666dfd9f-bq4cl       0/1    ContainerCreating  0         0s
flailing-alpaca-nginx-ingress-default-backend-66bc89dc44-m87bp  0/1    ContainerCreating  0         0s

==> v1/Service
NAME                                           TYPE          CLUSTER-IP  EXTERNAL-IP  PORT(S)                     AGE
flailing-alpaca-nginx-ingress-controller       LoadBalancer  10.0.109.7  <pending>    80:31219/TCP,443:32421/TCP  0s
flailing-alpaca-nginx-ingress-default-backend  ClusterIP     10.0.44.97  <none>       80/TCP                      0s
...

nginx-ingress-controller サービスの EXTERNAL-IP アドレスが設定され、Web ブラウザーでアクセスできるようになるまでに 1 分から 2 分かかります。It takes a minute or two for the EXTERNAL-IP address of the nginx-ingress-controller service to be populated and allow you to access it with a web browser.

Helm リリースの一覧表示List Helm releases

クラスターにインストールされているリリースの一覧を表示するには、helm list コマンドを使用します。To see a list of releases installed on your cluster, use the helm list command. 次の例は、前の手順でデプロイされた nginx-ingress リリースを示しています。The following example shows the nginx-ingress release deployed in the previous step. TLS/SSL を構成した場合は、--tls パラメーターを追加して Helm クライアント証明書を使用します。If you configured TLS/SSL, add the --tls parameter to use your Helm client certificate.

$ helm list

NAME                REVISION    UPDATED                     STATUS      CHART                 APP VERSION   NAMESPACE
flailing-alpaca   1         Thu May 23 12:55:21 2019    DEPLOYED    nginx-ingress-1.6.13    0.24.1      default

リソースのクリーンアップClean up resources

Helm グラフをデプロイすると、多数の Kubernetes リソースが作成されます。When you deploy a Helm chart, a number of Kubernetes resources are created. これらのリソースには、ポッド、デプロイ、およびサービスが含まれます。These resources include pods, deployments, and services. これらのリソースをクリーンアップするには、helm delete コマンドを使用し、上記の helm list コマンドで確認したリリース名を指定します。To clean up these resources, use the helm delete command and specify your release name, as found in the previous helm list command. 次の例では、flailing-alpaca という名前のリリースが削除されます。The following example deletes the release named flailing-alpaca:

$ helm delete flailing-alpaca

release "flailing-alpaca" deleted

次の手順Next steps

Kubernetes アプリケーションのデプロイの管理について詳しくは、Helm のドキュメントを参照してください。For more information about managing Kubernetes application deployments with Helm, see the Helm documentation.