helm在ocp中相当于catalog中的template
k8s中使用helm之前遇到的问题
1、很难管理、编辑和维护如此多的服务。每个服务都有若干配置,缺乏一个更高层次的工具将这些配置组织起来。 2、不容易将这些服务作为一个整体统一发布。部署人员需要首先理解应用都包含哪些服务,然后按照逻辑顺序依次执行 kubectl apply。即缺少一种工具来定义应用与服务,以及服务与服务之间的依赖关系。 3、不能高效地共享和重用服务。比如两个应用都要用到 MySQL 服务,但配置的参数不一样,这两个应用只能分别拷贝一套标准的 MySQL 配置文件,修改后通过 kubectl apply 部署。也就是说不支持参数化配置和多环境部署。 4、不支持应用级别的版本管理。虽然可以通过 kubectl rollout undo 进行回滚,但这只能针对单个 Deployment,不支持整个应用的回滚。 5、不支持对部署的应用状态进行验证。比如是否能通过预定义的账号访问 MySQL。虽然 Kubernetes 有健康检查,但那是针对单个容器,我们需要应用(服务)级别的健康检查。
helm由客户端和服务端组成,简单的讲:Helm 客户端负责管理 chart;Tiller 服务器负责管理 release。
安装 helm client version:Helm v2.14.2
#下载已编译好的二进制包 wget https://get.helm.sh/helm-v2.14.2-linux-arm64.tar.gz #解压 tar -zxf helm-v2.14.2-linux-arm64.tar.gz #设置PATH环境变量 cd linux-amd64 export PATH=$PATH:$(pwd)
配置k8s rbac
cat <<EOF > /tmp/helm-sa.yaml apiVersion: v1 kind: ServiceAccount metadata: labels: k8s-app: helm name: tiller namespace: kube-system
kubectl create -f /tmp/helm-sa.yaml
EOF
cat <<EOF > /tmp/helm-crb.yaml
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: helm-crb roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system
EOF
kubectl create -f /tmp/helm-sa.yaml
kubectl create -f /tmp/helm-crb.yaml
生成helm server: tiller
helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.0 --service-account=tiller --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
查看pod是否正常running
[root@node2 linux-amd64]# kubectl get pod | grep tiller tiller-deploy-6dd798686b-h9c9l 1/1 Running 0 25m