k8sのパッケージマネージャーHelmを使う - sambaiz-net
$ helm version
Client: &version.Version{SemVer:"v2.8.2", GitCommit:"a80231648a1473929271764b920a8e346f6de844", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.8.2", GitCommit:"a80231648a1473929271764b920a8e346f6de844", GitTreeState:"clean"}
GKEで helm init して helm install したところ以下のエラーが返ってきた。
Error: release my-locust failed: namespaces "default" is forbidden: User "system:serviceaccount:kube-system:default" cannot get namespaces in the namespace "default": Unknown user "system:serviceaccount:kube-system:default"
GKEではデフォルトでK8sのRBAC(Role-Based Access Control)が有効になっているため、Tillerインスタンスに権限を与える必要がある。
ということでTiller用にnamespaceを切って、その中では好きにできるRoleと、Tillerが使うServiceAccountを作成し、RoleBindingで紐づける。
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: tiller-manager
namespace: tiller-world
rules:
- apiGroups: ["", "extensions", "apps"]
resources: ["*"]
verbs: ["*"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: tiller-world
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: tiller-binding
namespace: tiller-world
subjects:
- kind: ServiceAccount
name: tiller
namespace: tiller-world
roleRef:
kind: Role
name: tiller-manager
apiGroup: rbac.authorization.k8s.io
Roleを追加するため、自分自身にsuper-user相当のcluster-admin roleをbindする。
$ kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --user=<email>
$ kubectl create namespace tiller-world
$ kubectl create -f tiller-rbac.yaml
helm init時に作ったServiceAccountを渡す。
$ helm init --tiller-namespace tiller-world --service-account tiller
$ kubectl get deployment -n tiller-world
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
tiller-deploy 1 1 1 1 1m
Prometheusをinstallしてみる。
$ helm install --name my-prometheus stable/prometheus --tiller-namespace tiller-world --namespace tiller-world
$ kubectl get pods -n tiller-world
NAME READY STATUS RESTARTS AGE
my-prometheus-prometheus-alertmanager-85f75879db-9r9z2 2/2 Running 0 1m
my-prometheus-prometheus-kube-state-metrics-65dfc57897-95ts7 1/1 Running 0 1m
my-prometheus-prometheus-server-7c98fb8ffb-s7jpq 2/2 Running 0 1m
tiller-deploy-57dbcb6bbc-6srlt 1/1 Running 0 2m
ただ、実際のところHelmが特定のnamespaceしか触れないのは不便だし、roleをあとから増やすのも面倒なので最初からcluster-adminのRoleを付けておいてもよいかもしれない。
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system