[关闭]
@zhangyy 2020-12-15T17:53:31.000000Z 字数 3702 阅读 158

kubernetes 的helm 部署

kubernetes系列


  • 一:什么是 Helm

  • 二:Helm部署


一:什么是 Helm

  1. 在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deploymentsvc 等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制,很大程度上简化了 Kubernetes 应用的部署和管理
  2. Helm 本质就是让 K8s 的应用管理(Deployment,Service ) 可配置,能动态生成。通过动态生成 K8s 资源清
  3. 单文件(deployment.yamlservice.yaml)。然后调用 Kubectl 自动执行 K8s 资源部署
  4. Helm 是官方提供的类似于 YUM 的包管理器,是部署环境的流程封装。Helm 有两个重要的概念:chart release
  5. chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说
  6. 明等。chart 是应用部署的自包含逻辑单元。可以将 chart 想象成 aptyum 中的软件安装包
  7. release chart 的运行实例,代表了一个正在运行的应用。当 chart 被安装到 Kubernetes 集群,就生成
  8. 一个 releasechart 能够多次安装到同一个集群,每次安装都是一个 release

  1. Helm 包含两个组件:Helm 客户端和 Tiller 服务器,如下图所示

image_1e4ndjs8i5e8g1ihrq90lklf9.png-162.5kB

  1. Helm 客户端负责 chart release 的创建和管理以及和 Tiller 的交互。Tiller 服务器运行在 Kubernetes 集群
  2. 中,它会处理 Helm 客户端的请求,与 Kubernetes API Server 交互

二:Helm部署

  1. 越来越多的公司和团队开始使用 Helm 这个 Kubernetes 的包管理器,我们也将使用 Helm 安装 Kubernetes 的常用
  2. 组件。 Helm 由客户端命 helm 令行工具和服务端 tiller 组成,Helm 的安装十分简单。 下载 helm 命令行工具到
  3. master 节点 node1 /usr/local/bin 下,这里下载的 2.13. 1版本:

  1. wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz
  2. tar -zxvf helm-v2.13.1-linux-amd64.tar.gz
  3. cd linux-amd64/
  4. cp -p helm /usr/local/bin/
  5. chmod a+x /usr/local/bin/helm

image_1e4ndu9j7bj91bvdskq12kh15i3m.png-100.9kB

image_1e4ndv1aqrb21j2c1blu12251oh613.png-122.6kB


  1. 为了安装服务端 tiller,还需要在这台机器上配置好 kubectl 工具和 kubeconfig 文件,确保 kubectl 工具可以
  2. 在这台机器上访问 apiserver 且正常使用。 这里的 node1 节点以及配置好了 kubectl
  3. 因为 Kubernetes APIServer 开启了 RBAC 访问控制,所以需要创建 tiller 使用的 service account: tiller 并分
  4. 配合适的角色给它。 详细内容可以查看helm文档中的 Role-based Access Control 这里简单起见直接分配
  5. cluster- admin 这个集群内置的 ClusterRole 给它。创建 rbac-config.yaml 文件:

  1. vim rbac-tiller.yaml
  2. -----
  3. apiVersion: v1
  4. kind: ServiceAccount
  5. metadata:
  6. name: tiller
  7. namespace: kube-system
  8. ---
  9. apiVersion: rbac.authorization.k8s.io/v1beta1
  10. kind: ClusterRoleBinding
  11. metadata:
  12. name: tiller
  13. roleRef:
  14. apiGroup: rbac.authorization.k8s.io
  15. kind: ClusterRole
  16. name: cluster-admin
  17. subjects:
  18. - kind: ServiceAccount
  19. name: tiller
  20. namespace: kube-system
  21. ----
  22. 上传helm-tiller的镜像到所有 节点
  23. docker load -i helm-tiller.tar
  24. kubectl apply -f rbac-tiller.yaml
  25. helm init --service-account tiller --skip-refresh
  26. kubectl get pod -n kube-system
  27. helm version

image_1e4ng140c1crt1i3a14aq13hs1t1i1t.png-80.7kB

image_1e4ng2dgt1u8s1q3m1cd94o0mn12a.png-59.5kB

image_1e4ng2s1r1gs11jn11pn43ag1lv62n.png-86.2kB

image_1e4neh11k1il8mtj145a15kp941g.png-46.1kB

image_1e4ng3nh9clk4r3t3sg8a56534.png-200.2kB


helm 的自定义模板

  1. 创建自描述文件 Chart.yaml , 这个文件必须有 name version 定义
  2. cat <<'EOF' > ./Chart.yaml
  3. name: hello-world
  4. version: 1.0.0
  5. EOF

1.png-54.2kB


  1. 创建模板文件, 用于生成 Kubernetes 资源清单(manifests
  2. cat <<'EOF' > ./templates/deployment.yaml
  3. apiVersion: extensions/v1beta1
  4. kind: Deployment
  5. metadata:
  6. name: hello-world
  7. spec:
  8. replicas: 1
  9. template:
  10. metadata:
  11. labels:
  12. app: hello-world
  13. spec:
  14. containers:
  15. - name: hello-world
  16. image: wangyanglinux/myapp:v1
  17. ports:
  18. - containerPort: 80
  19. protocol: TCP
  20. EOF

  1. cat <<'EOF' > ./templates/service.yaml
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: hello-world
  6. spec:
  7. type: NodePort
  8. ports:
  9. - port: 80
  10. targetPort: 80
  11. protocol: TCP
  12. selector:
  13. app: hello-world
  14. EOF

  1. cd /root/hello-world
  2. helm install .

2.png-79.1kB

3.png-69.5kB

4.png-106.5kB

5.png-65.6kB

6.png-95.4kB


  1. 列出已经部署的 Release
  2. $ helm ls
  3. # 查询一个特定的 Release 的状态
  4. $ helm status RELEASE_NAME
  5. # 移除所有与这个 Release 相关的 Kubernetes 资源
  6. $ helm delete cautious-shrimp
  7. # helm rollback RELEASE_NAME REVISION_NUMBER
  8. $ helm rollback cautious-shrimp 1
  9. # 使用 helm delete --purge RELEASE_NAME 移除所有与指定 Release 相关的 Kubernetes 资源和所有这个
  10. Release 的记录
  11. $ helm delete --purge cautious-shrimp
  12. $ helm ls --deleted

7.png-188.2kB


  1. 配置体现在配置文件 values.yaml
  2. vim values.yaml
  3. ---
  4. image:
  5. repository: wangyanglinux/myapp
  6. tag: 'v2'
  7. ---

  1. cd templates
  2. vim deployment.yaml
  3. ---
  4. apiVersion: extensions/v1beta1
  5. kind: Deployment
  6. metadata:
  7. name: hello-world
  8. spec:
  9. replicas: 1
  10. template:
  11. metadata:
  12. labels:
  13. app: hello-world
  14. spec:
  15. containers:
  16. - name: hello-world
  17. image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
  18. ports:
  19. - containerPort: 80
  20. protocol: TCP
  21. ----
  22. cd /root/test
  23. helm ls
  24. helm upgrade knobby-terrier .

image_1e4nq7m4cf3tem71f15j3u1j2k9.png-111.9kB

image_1e4nq8e42n5cli2der7ek7inm.png-158.3kB

image_1e4nqas9k9f9csorm951dq213.png-31.7kB


  1. values.yaml 中的值可以被部署 release 时用到的参数 --values YAML_FILE_PATH --set key1=value1, key2=value2 覆盖掉
  2. helm install --set image.tag='v3'
  3. helm upgrade factual-swan --set image.tag='v2' .

image_1e4nqj9jq1l36va266bitf1b3i1g.png-122.4kB

image_1e4nr77shdeoeur1a791882bu11t.png-113.3kB


  1. helm ls --deleted
  2. helm deleted --purge falling-indri knobby-terrier messy-seastar roiling-sasquatch
  3. --- purge 表示彻底删除 release

image_1e4nres5h8eiah1abr1hmuu9r2a.png-145.9kB


  1. 关于回滚 还原
  2. helm rollback RELEASE_NAME REVISION_NUMBER
  3. ---
  4. helm install --name nginx1 .
  5. helm ls
  6. helm upgrade nginx1 .
  7. helm histroy nignx1
  8. helm rollback nginx1 1

image_1e4nstvcmuvb1qd7u27m6a10v241.png-169.2kB

image_1e4nsuf3evng1c93634tk1lgd4e.png-103.5kB

image_1e4nsv0kas327kk1ek31vli15ho4r.png-96.7kB

image_1e4nsp6quvgha5t162jc6v8tq2n.png-114.5kB

image_1e4nsql67e8itma177dn44v43k.png-257.2kB


  1. debug :
  2. # 使用模板动态生成K8s资源清单,非常需要能提前预览生成的结果。
  3. # 使用--dry-run --debug 选项来打印出生成的清单文件内容,而不执行部
  4. helm install . --dry-run --debug --set image.tag=latest
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注