2019年6月7日金曜日

helm 超入門

概要

helm は k8s で使えるパッケージマネージです
k8s 上にコンテナをデプロイするのを支援してくれます
apt や yum と同じ感覚で k8s にコンテナをデプロイできます
今回はインストールから実際に helm を使ってコンテナをデプロイするところまでやってみました

環境

  • macOS 10.14.5
  • minikube 1.10.0
  • helm 2.14.0

インストール

Mac であれば homebrew でインストールできます

  • brew install kubernetes-helm

初期化

ホームディレクトリ配下に .helm ディレクトリを作成します
必要な情報はこの配下に保存されていきます

  • helm init --history-max 200

パッケージ (charts) の一覧確認

パッケージは charts と呼ばれる単位で管理されています
インストール可能な charts の一覧を表示します

  • helm search
  • helm search redis

charts (redis) のインストール

今回は redis の charts をインストール (デプロイ) してみましょう

  • helm install stable/mysql

charts の確認

インストールが完了したら一覧を確認してみましょう

  • helm list
NAME                    REVISION        UPDATED                         STATUS          CHART           APP VERSION     NAMESPACE
invincible-lobster      1               Mon Jun  3 15:09:41 2019        DEPLOYED        redis-8.0.5     5.0.5           default

helm ls でも同じ情報が確認できます

charts の詳細確認

helm status コマンドを使ってインストールした charts の詳細を確認できます

  • helm status invincible-lobster
LAST DEPLOYED: Mon Jun  3 15:09:41 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/ConfigMap
NAME                             DATA  AGE
invincible-lobster-redis         3     4m34s
invincible-lobster-redis-health  3     4m34s

==> v1/Pod(related)
NAME                               READY  STATUS   RESTARTS  AGE
invincible-lobster-redis-master-0  1/1    Running  0         4m34s
invincible-lobster-redis-slave-0   1/1    Running  0         4m34s
invincible-lobster-redis-slave-1   1/1    Running  0         3m51s

==> v1/Secret
NAME                      TYPE    DATA  AGE
invincible-lobster-redis  Opaque  1     4m34s

==> v1/Service
NAME                               TYPE       CLUSTER-IP     EXTERNAL-IP  PORT(S)   AGE
invincible-lobster-redis-headless  ClusterIP  None           <none>       6379/TCP  4m34s
invincible-lobster-redis-master    ClusterIP  10.96.98.68    <none>       6379/TCP  4m34s
invincible-lobster-redis-slave     ClusterIP  10.99.138.160  <none>       6379/TCP  4m34s

==> v1beta2/StatefulSet
NAME                             READY  AGE
invincible-lobster-redis-master  1/1    4m34s
invincible-lobster-redis-slave   2/2    4m34s


NOTES:
** Please be patient while the chart is being deployed **
Redis can be accessed via port 6379 on the following DNS names from within your cluster:

invincible-lobster-redis-master.default.svc.cluster.local for read/write operations
invincible-lobster-redis-slave.default.svc.cluster.local for read-only operations


To get your password run:

    export REDIS_PASSWORD=$(kubectl get secret --namespace default invincible-lobster-redis -o jsonpath="{.data.redis-password}" | base64 --decode)

To connect to your Redis server:

1. Run a Redis pod that you can use as a client:

   kubectl run --namespace default invincible-lobster-redis-client --rm --tty -i --restart='Never' \
    --env REDIS_PASSWORD=$REDIS_PASSWORD \
   --image docker.io/bitnami/redis:5.0.5-debian-9-r14 -- bash

2. Connect using the Redis CLI:
   redis-cli -h invincible-lobster-redis-master -a $REDIS_PASSWORD
   redis-cli -h invincible-lobster-redis-slave -a $REDIS_PASSWORD

To connect to your database from outside the cluster execute the following commands:

    kubectl port-forward --namespace default svc/invincible-lobster-redis 6379:6379 &
    redis-cli -h 127.0.0.1 -p 6379 -a $REDIS_PASSWORD

はじめに k8s に展開された各種リソースの情報が表示れます
そのあとで redis-server へのアクセス方法が表示されます
helm でインストールした場合パスワードが設定されているようです
またデフォルトだとホストからのアクセスはできないようです

実際にアクセスする

port-forward を使ってホストからアクセスできるようにします
port-forward はフォアグラウンドで動作するので別のターミナルを開きます

  • kubectl port-forward --namespace default svc/invincible-lobster-redis-master 6379:6379

パスワードを変数に設定し、redis-cli で接続できれば OK です

  • export REDIS_PASSWORD=$(kubectl get secret --namespace default invincible-lobster-redis -o jsonpath="{.data.redis-password}" | base64 --decode)
  • redis-cli -a $REDIS_PASSWORD

この他にもアクセス用の Pod を作ったり別の type NodePort の Service を新規で作ってアクセスしても良いと思います

charts 削除

  • helm delete invincible-lobster

ConfigMap, Pod, Secret, Service, StatefulSet がすべて削除されます

おまけ: charts から YAML ファイルの定義を取得する

charts の詳細を確認したい場合に使います

  • helm fetch stable/redis

redis-8.0.5.tgz という圧縮ファイルが取得できます

  • helm template redis-8.0.5.tgz

とすると標準出力に圧縮ファイル内にある k8s 用の各リソースが定義された YAML ファイルの内容が表示されます
これを使って直接 kubectl を使ってインストールした charts を制御することもできます

最後に

helm に入門してみました
charts と呼ばれるパッケージをインストールするだけで k8s 上に必要なリソースをデプロイできるので複雑な k8s の仕組みがわからなくても簡単に使えると思います

ただ charts の設定通りにデプロイされてしまうので自分の好きなリソースを使ってデプロイしたり管理したい場合には template で YAML ファイルを確認してそれをカスタマイズする感じになると思います

参考サイト

0 件のコメント:

コメントを投稿