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 をインストールする必要があります。Helm CLI は、開発システムで実行されるクライアントで、Helm を使用してアプリケーションを起動、停止、管理することができます。You also need the Helm CLI installed, the client that runs on your development system and 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.

サービス アカウントの作成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

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

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 チャートを使用して基本的な Wordpress デプロイをインストールしてみましょう。To see this in action, let's install a basic Wordpress 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/wordpress

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

$ helm install stable/wordpress

NAME:   wishful-mastiff
LAST DEPLOYED: Wed Mar  6 19:11:38 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1beta1/Deployment
NAME                       DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE
wishful-mastiff-wordpress  1        1        1           0          1s

==> v1beta1/StatefulSet
NAME                     DESIRED  CURRENT  AGE
wishful-mastiff-mariadb  1        1        1s

==> v1/Pod(related)
NAME                                        READY  STATUS   RESTARTS  AGE
wishful-mastiff-wordpress-6f96f8fdf9-q84sz  0/1    Pending  0         1s
wishful-mastiff-mariadb-0                   0/1    Pending  0         1s

==> v1/Secret
NAME                       TYPE    DATA  AGE
wishful-mastiff-mariadb    Opaque  2     2s
wishful-mastiff-wordpress  Opaque  2     2s

==> v1/ConfigMap
NAME                           DATA  AGE
wishful-mastiff-mariadb        1     2s
wishful-mastiff-mariadb-tests  1     2s

==> v1/PersistentVolumeClaim
NAME                       STATUS   VOLUME   CAPACITY  ACCESS MODES  STORAGECLASS  AGE
wishful-mastiff-wordpress  Pending  default  2s

==> v1/Service
NAME                       TYPE          CLUSTER-IP   EXTERNAL-IP  PORT(S)                     AGE
wishful-mastiff-mariadb    ClusterIP     10.1.116.54  <none>       3306/TCP                    2s
wishful-mastiff-wordpress  LoadBalancer  10.1.217.64  <pending>    80:31751/TCP,443:31264/TCP  2s
...

Wordpress サービスの EXTERNAL-IP アドレスが設定され、Web ブラウザーでアクセスできるようになるまでに 1 分から 2 分かかります。It takes a minute or two for the EXTERNAL-IP address of the Wordpress 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. 次の例は、前の手順でデプロイされた Wordpress リリースを示しています。The following example shows the Wordpress 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
wishful-mastiff   1         Wed Mar  6 19:11:38 2019    DEPLOYED    wordpress-2.1.3  4.9.7          default

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

Helm グラフをデプロイすると、多数の Kubernetes リソースが作成されます。When you deploy a Helm chart, a number of Kubernetes resources are created. これらのリソースには、ポッド、デプロイ、およびサービスが含まれます。These resources includes 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. 次の例では、wishful mastiff という名前のリリースを削除しています。The following example deletes the release named wishful mastiff:

$ helm delete wishful-mastiff

release "wishful-mastiff" deleted

次の手順Next steps

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