tjtjtjのメモ

自分のためのメモです

helm ってみたがまた失敗

tiller を作り直す

tiller 作成(helm init)のオプションはいろいろあるようだ。どれがいいのか悩まず前進を優先。ココを参考にした。

qiita.com

備考) RBAC環境にインストールする場合は のところ

$ helm reset --force
Tiller (the Helm server-side component) has been uninstalled from your Kubernetes Cluster.
$ kubectl -n kube-system create serviceaccount tiller
serviceaccount/tiller created
$ kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
clusterrolebinding.rbac.authorization.k8s.io/tiller created
$ helm init --service-account=tiller
$HELM_HOME has been configured at /home/core/.helm.

Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.

Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation

ls しても問題なくなった。

$ helm ls
$ helm version
Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}

install an Example Chart

helm repo update と ‘helm install`。長いがあとで見返したいのでそのまま載せる。

$ helm repo update
Hang 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.

$ helm install stable/mysql
NAME:   eerie-lobster
LAST DEPLOYED: Tue Aug 13 20:13:43 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/ConfigMap
NAME                      DATA  AGE
eerie-lobster-mysql-test  1     1s

==> v1/PersistentVolumeClaim
NAME                 STATUS   VOLUME  CAPACITY  ACCESS MODES  STORAGECLASS  AGE
eerie-lobster-mysql  Pending  1s

==> v1/Pod(related)
NAME                                  READY  STATUS   RESTARTS  AGE
eerie-lobster-mysql-7d46967994-txtxk  0/1    Pending  0         0s

==> v1/Secret
NAME                 TYPE    DATA  AGE
eerie-lobster-mysql  Opaque  2     1s

==> v1/Service
NAME                 TYPE       CLUSTER-IP     EXTERNAL-IP  PORT(S)   AGE
eerie-lobster-mysql  ClusterIP  10.97.180.130  <none>       3306/TCP  1s

==> v1beta1/Deployment
NAME                 READY  UP-TO-DATE  AVAILABLE  AGE
eerie-lobster-mysql  0/1    1           0          1s


NOTES:
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
eerie-lobster-mysql.default.svc.cluster.local

To get your root password run:

    MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default eerie-lobster-mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo)

To connect to your database:

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

    kubectl run -i --tty ubuntu --image=ubuntu:16.04 --restart=Never -- bash -il

2. Install the mysql client:

    $ apt-get update && apt-get install mysql-client -y

3. Connect using the mysql cli, then provide your password:
    $ mysql -h eerie-lobster-mysql -p

To connect to your database directly from outside the K8s cluster:
    MYSQL_HOST=127.0.0.1
    MYSQL_PORT=3306

    # Execute the following command to route the connection:
    kubectl port-forward svc/eerie-lobster-mysql 3306

    mysql -h ${MYSQL_HOST} -P${MYSQL_PORT} -u root -p${MYSQL_ROOT_PASSWORD}

sevice, deployment が作成されたがpending。

$ kubectl get svc
NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
eerie-lobster-mysql   ClusterIP   10.97.180.130   <none>        3306/TCP   56s
kubernetes            ClusterIP   10.96.0.1       <none>        443/TCP    13d
$ kubectl get deploy
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
eerie-lobster-mysql   0/1     1            0           4m57s
$ kubectl get pod
NAME                                   READY   STATUS    RESTARTS   AGE
eerie-lobster-mysql-7d46967994-txtxk   0/1     Pending   0          98s

pod を見ると PersistentVolumeClaims をバインドできてない。

$ kubectl describe pod eerie
Name:           eerie-lobster-mysql-7d46967994-txtxk
Namespace:      default
Priority:       0
Node:           <none>
Labels:         app=eerie-lobster-mysql
                pod-template-hash=7d46967994
Annotations:    <none>
Status:         Pending


Events:
  Type     Reason            Age                  From               Message
  ----     ------            ----                 ----               -------
  Warning  FailedScheduling  31s (x6 over 6m29s)  default-scheduler  pod has unbound immediate PersistentVolumeClaims (repeated 2 times)

うーん、また失敗。アンインストールする。helm ls -a したところ残っていた。

$ helm ls
NAME            REVISION        UPDATED                         STATUS          CHART           APP VERSION NAMESPACE
eerie-lobster   1               Tue Aug 13 20:13:43 2019        DEPLOYED        mysql-1.3.0     5.7.14      default

$ helm delete eerie-lobster
release "eerie-lobster" deleted
$ helm ls
$ helm ls -a
NAME            REVISION        UPDATED                         STATUS  CHART           APP VERSIONNAMESPACE
eerie-lobster   1               Tue Aug 13 20:13:43 2019        DELETED mysql-1.3.0     5.7.14     default

delete で残るのは rollback で元に戻すのだそうだ。rollbackしてみる。rollbackはnameとrevisionを指定する。するとrevision:2になった。

$ helm rollback
Error: This command needs 2 arguments: release name, revision number
$ helm rollback eerie-lobster 1
Rollback was a success.
$ helm ls
NAME            REVISION        UPDATED                         STATUS          CHART           APP  VERSION NAMESPACE
eerie-lobster   2               Tue Aug 13 20:36:15 2019        DEPLOYED        mysql-1.3.0     5.7. 14      default

今度は purge

$ helm delete --purge eerie-lobster
release "eerie-lobster" deleted
$ helm ls -a

なかなか進まない

なかなか前進しないが、概念学習とコマンド練習にはなっている。
PersistentVolumeClaims は未経験。PersistentVolumeClaims のチュートリアルがあるようなので試そうと思う。