Helm (Kubernetes) vol.1
環境
Helm
そう、helm。 Emacserにはお馴染み、違う。 そのhelmじゃないw
xxx.sh
っていうドメイン(・∀・)イイネ!!
Helm is the best way to find, share, and use software built for Kubernetes.
そう、k8s上で動かすソフトウェアをパッケージ管理する為の物
k8sにMySQL入れたり、とかとか、楽にできるようにするやつ。
installation
kubernetes
まずは、兎にも角にもk8sが必要だ。
https://qiita.com/taishin/items/920d62a641c9cd58f289
gcloudコマンド経由でkubectlインストールしてると競合する… ので、先に消しとく
gcloud components remove kubectl
which kubectl
して
/usr/local/bin/kubectl
を参照してればOK
❯ kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE docker-for-desktop docker-for-desktop-cluster docker-for-desktop
いっぱいあるーね。 でもちゃんと、GKEのcontextも読めてるのでOK
docker-for-desktop
がローカルのやつ。
さぁ、contextを切り替えておこう。
❯ kubectl config use-context docker-for-desktop Switched to context "docker-for-desktop". ❯ kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE * docker-for-desktop docker-for-desktop-cluster docker-for-desktop
OK
helm
今時のツールはdocumentがしっかりしてるし、構築は楽にできるようになってるね。 homebrewで終了。
brew install kubernetes-helm
Helmを使う
Init
まずは、K8sがHelmを使えるようにする為にinitする必要がある。
~ ❯ helm init $HELM_HOME has been configured at /Users/xxx/.helm. Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster. Happy Helming!
$HELM_HOME
が設定されるTiller
ってやつがk8sにinstallされたらしい
~ ❯ kubectl get po --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE docker compose-5d4f4d67b6-5d7d8 1/1 Running 0 20m docker compose-api-7bb7b5968f-8fwmw 1/1 Running 0 20m kube-system etcd-docker-for-desktop 1/1 Running 0 20m kube-system kube-apiserver-docker-for-desktop 1/1 Running 0 20m kube-system kube-controller-manager-docker-for-desktop 1/1 Running 0 20m kube-system kube-dns-6f4fd4bdf-lpjhf 3/3 Running 0 21m kube-system kube-proxy-sf4n4 1/1 Running 0 21m kube-system kube-scheduler-docker-for-desktop 1/1 Running 0 21m kube-system tiller-deploy-5bd98cbb68-skrqn 1/1 Running 0 1m
kube-system tiller-deploy-5bd98cbb68-skrqn 1/1 Running 0 1m
↑これ
パッケージを見てみよう
helmではパッケージをChartsと呼ぶ(海図らしい)
~ ❯ helm search NAME VERSION DESCRIPTION stable/acs-engine-autoscaler 2.1.0 Scales worker nodes within agent pools stable/artifactory 6.1.0 Universal Repository Manager supporting all maj... stable/aws-cluster-autoscaler 0.3.1 Scales worker nodes within autoscaling groups. stable/buildkite 0.2.0 Agent for Buildkite …
長いので、省略するけど、結構いろいろある。 デフォルトのレポジトリ。
Helm使って何か動かしてみるか
手始めにk8sのダッシュボードを入れてみるかな GKEはデフォルトではいってる
stable/kubernetes-dashboard
これ。
~ ❯ helm inspect stable/kubernetes-dashboard appVersion: 1.7.1 description: General-purpose web UI for Kubernetes clusters keywords: - kubernetes - dashboard maintainers: - email: Kevin.Fox@pnnl.gov name: kfox1111 name: kubernetes-dashboard version: 0.4.1 --- # Default values for kubernetes-dashboard # This is a YAML-formatted file. # Declare name/value pairs to be passed into your templates. # name: value image: gcr.io/google_containers/kubernetes-dashboard-amd64 imageTag: "v1.7.1" imagePullPolicy: "IfNotPresent" nodeSelector: {} httpPort: 80 serviceType: ClusterIP resources: limits: cpu: 100m memory: 50Mi requests: cpu: 100m memory: 50Mi ingress: ## If true, Kubernetes Dashboard Ingress will be created. ## enabled: false ## Kubernetes Dashboard Ingress annotations ## # annotations: # kubernetes.io/ingress.class: nginx # kubernetes.io/tls-acme: 'true' ## Kubernetes Dashboard Ingress hostnames ## Must be provided if Ingress is enabled ## # hosts: # - kubernetes-dashboard.domain.com ## Kubernetes Dashboard Ingress TLS configuration ## Secrets must be manually created in the namespace ## # tls: # - secretName: kubernetes-dashboard-tls # hosts: # - kubernetes-dashboard.domain.com rbac: ## If true, create & use RBAC resources # create: false ## Ignored if rbac.create is true # serviceAccountName: default
Default values for kubernetes-dashboard
って書いてある所以下が、パラメータになっていて、
Ansibleの defaults/main.yml
みたいな感じで、設定を外から渡せるようになっている。
ひとまず、そのまま立ち上げてみよう。
~ ❯ helm install stable/kubernetes-dashboard NAME: brown-whippet LAST DEPLOYED: Sat Mar 3 22:26:48 2018 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1beta1/Deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE brown-whippet-kubernetes-dashboard 1 1 1 0 0s ==> v1/Service NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE brown-whippet-kubernetes-dashboard 10.107.90.189 <none> 80/TCP 0s NOTES: ********************************************************************************* *** PLEASE BE PATIENT: kubernetes-dashboard may take a few minutes to install *** ********************************************************************************* Get the Kubernetes Dashboard URL by running: export POD_NAME=$(kubectl get pods -n default -l "app=kubernetes-dashboard,release=brown-whippet" -o jsonpath="{.items[0].metadata.name}") echo http://127.0.0.1:9090/ kubectl -n default port-forward $POD_NAME 9090:9090 ~ ❯ helm ls NAME REVISION UPDATED STATUS CHART NAMESPACE brown-whippet 1 Sat Mar 3 22:26:48 2018 DEPLOYED kubernetes-dashboard-0.4.1 default
瞬殺。
~ ❯ kubectl get po NAME READY STATUS RESTARTS AGE brown-whippet-kubernetes-dashboard-6c546f54f8-tmccq 1/1 Running 0 3m
ちゃんと動いてる じゃあ、画面見てみるか。
Get the Kubernetes Dashboard URL by running: export POD_NAME=$(kubectl get pods -n default -l "app=kubernetes-dashboard,release=brown-whippet" -o jsonpath="{.items[0].metadata.name}") echo http://127.0.0.1:9090/ kubectl -n default port-forward $POD_NAME 9090:9090
丁寧に書いてくれてるね。
http://localhost:9090
でアクセスできる。
てか、なんか大分いろいろ見やすくなってる… 進化してるな。 こんどモニタリングでdashboard使ってみよう。
installしたChartsを落とす
helm delete
してみる。
~ ❯ helm delete stable/kubernetes-dashboard Error: invalid release name, must match regex ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])+$ and the length must not longer than 53
Charts名じゃ消せないらしい。 デプロイしたChartsに対してnameが振られているので、そっちで消す。 (同じChartsでもname分けて複数デプロイできるようになっている)
~ ❯ helm ls NAME REVISION UPDATED STATUS CHART NAMESPACE brown-whippet 1 Sat Mar 3 22:26:48 2018 DEPLOYED kubernetes-dashboard-0.4.1 default ~ ❯ helm delete brown-whippet release "brown-whippet" deleted ~ ❯ helm ls ~ ❯ kubectl get po No resources found.
消えました。
今日はここまで。
TODO
- 独自Chartsを書いてみる
- PrivateRepositoryは使えるのか?
- 独自repositoryを作る
- etc…