微服务和容器化给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的唯一开源子项目,作为Kubernetes应用的一个包管理工具,可理解为Kubernetes的apt-get / yum,由Deis 公司发起,该公司已经被微软收购。Helm通过软件打包的形式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用部署和管理的复杂性。
随着业务容器化与向微服务架构转变,通过分解巨大的单体应用为多个服务的方式,分解了单体应用的复杂性,使每个微服务都可以独立部署和扩展,实现了敏捷开发和快速迭代和部署。但任何事情都有两面性,虽然微服务给我们带来了很多便利,但由于应用被拆分成多个组件,导致服务数量大幅增加,对于Kubernetest编排来说,每个组件有自己的资源文件,并且可以独立的部署与伸缩,这给采用Kubernetes做应用编排带来了诸多挑战:
管理、编辑与更新大量的K8s配置文件
部署一个含有大量配置文件的复杂K8s应用
分享和复用K8s配置和应用
参数化配置模板支持多个环境
管理应用的发布:回滚、diff和查看发布历史
控制一个部署周期中的某一些环节
发布后的验证
Helm把Kubernetes资源(比如deployments、services或 ingress等) 打包到一个chart中,而chart被保存到chart仓库。通过chart仓库可用来存储和分享chart。Helm使发布可配置,支持发布应用配置的版本管理,简化了Kubernetes部署应用的版本控制、打包、发布、删除、更新等操作。
安装helm,解压后将二进制文件移动到环境变量目录中
tar zxf helm-v3.4.1-linux-amd64.tar.gz
cd linux-amd64/
cp helm /usr/local/bin/
echo "source <(helm completion bash)" >> ~/.bashrc
source ~/.bashrc
helm repo add bitnami httpS://charts.bitnami.com/bitnami
helm repo list
helm search repo redis
准备镜像
拉取应用到本地,编辑value文件,读取本地harbor仓库
helm pull bitnami/redis-cluster
tar zxf redis-cluster-6.3.2.tgz
cd redis-cluster/
vim values.yaml
imageRegistry: "reg.westos.org"
helm install redis-cluster .
kubectl get pod
helm list
helm uninstall redis-cluster
kubectl get pod
如果harbor仓库中没有chart 先将docker-compose down
然后执行安装 脚本
sh install.sh --with-chartmuseum
helm create mychart
tree mychart/
cd mychart/
编写mychart的应用描述信息
vim Chart.yaml
vim values.yaml
helm lint mychart/
helm package mychart/
helm repo add westos https://reg.westos.org/chartrepo/charts
cp /etc/docker/certs.d/reg.westos.org/ca.crt /etc/pki/ca-trust/source/anchors/
update-ca-trust
重新添加chart仓库
helm repo add westos https://reg.westos.org/chartrepo/charts
helm repo list
helm env
cd /root/.local/share/helm/plugins
mkdir -p /root/.local/share/helm/plugins
cd /root/.local/share/helm/plugins
mkdir push
helm push mychart-0.1.0.tgz westos --insecure -u admin -p westos
helm search repo mychart
helm repo update
helm search repo mychart
helm install mychart westos/mychart
kubectl get all
curl 10.96.14914
cd mychart/
vim Chart.yaml
vim values.yaml
helm lint mychart
helm package mychart
helm push mychart-0.2.0.tgz westos --insecure -u admin -p westoshelm repo update
helm upgrade mychart westos/mychart
kubectl get svc
curl 10.96.149.14
helm history mychart
helm rollback mychart 1
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner
helm repo add bitnami https://charts.bitnami.com/bitnami
创建工作目录
mkdir nfs-subdir-external-provisioner
helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner
tar zxf nfs-subdir-external-provisioner-4.0.12.tgz
cd nfs-subdir-external-provisioner/
vim values.yaml
cd volumes/nfs-client/
kubectl delete -f nfs-client-provisioner.yaml
kubectl delete pvc --all
kubectl delete pv --all
helm list --all-namespaces
helm uninstall mychart
helm list --all-namespaces
helm install nfs-client-provisioner . -n nfs-client-provisioner
helm list --all-namespaces
kubectl get sc
cat test-pvc.yaml
kubectl apply -f test-pvc.yaml
kubectl get pvc
kubectl delete -f components.yaml
kubectl top node
删除之前的metrics-server监控服务
kubectl delete -f components.yaml
kubectl top node
helm pull bitnami/metrics-server
解压并配置value
tar zxf metrics-server-5.9.2.tgz
cd metrics-server/
vim values.yaml
使用helm安装 会报错
helm install metrics-server . -n metrics-server
helm upgrade --namespace metrics-server metrics-server bitnami/metrics-server --set apiService.create=true
kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes"
kubectl -n metrics-server get all
kubectl top node