对于容器的配置文件, 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了。