容器化之路 - 面对一堆yml配置我很茫然

对于容器的配置文件, docker-compose的还好理解,但是一到k8s,就有很多对象, pods, nodes, services, deployment... 每个基本上都有个yml的定义,其中的参数一看一脸茫然。

还好找到这个:kubectl explain xxx 可以看它的定义

kubectl explain service --recursive 可以查看service定义的所有定段。
kubectl explain svc.metadata.uid 可以查看某个字段的定义

当然,k8s官方也有一些examples: https://github.com/kubernetes/examples

另外还有 helm,类似于yum这样的软件包管理工具,可以添加repo, 直接安装,省去修改yml的配置。
helm 的安装在墙内可以用国内的repo源
macos 先安装helm

brew install kubernetes-helm 
helm init --client-only --stable-repo-url https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts/
helm repo add incubator https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
helm repo update

也可以用这个https://hub.kubeapps.com/ 的源,算是很新的。

helm repo add bitnami https://charts.bitnami.com/bitnami

具体可以看https://github.com/kubeapps/kubeapps/blob/master/docs/user/getting-started.md

这里接下来helm install时有个坑
···
Error: could not find tiller
···
参考了这个https://stackoverflow.com/questions/51646957/helm-could-not-find-tiller


Try deleting your cluster tiller

$ kubectl get all --all-namespaces | grep tiller
$ kubectl delete deployment tiller-deploy -n kube-system
$ kubectl delete service tiller-deploy -n kube-system
$ kubectl get all --all-namespaces | grep tiller

Initialize it again

$ helm init

Now add the service account

$ kubectl create serviceaccount --namespace kube-system tiller
$ kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
$kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

这会还有个坑,就是国内下载不到那个tiller镜像,
kubectl get pods -n kube-system -o wide
找到tiller-deploy那个pod,状态那列可能已经是ErrImagePull,
kubectl describe pod tiller-deploy-9bf6fb76d-452dj -n kube-system
查看原因后"Failed to pull image "gcr.io/kubernetes-helm/tiller:v2.14.1": rpc error......"

这里可以看到是下载tiller:v2.14.1的镜像,办法就是在docker hub上找下,然后pull下来重命名。
docker pull jessestuart/tiller:v2.14.1

重新Init下
helm init --upgrade --tiller-image jessestuart/tiller:v2.14.1

kubectl get pods -n kube-system -o wide 过一会再次查看状态就是Running了。