K8S-Helm安装
前言:
随着容器技术和微服务架构逐渐被企业接受,在kubernetes上已经可以便捷的部署服务了,但对于复杂的应用或者中间件系统,在k8s上部署并非易事,通常需要研究docker镜像的运行需求,环境变量等内容,为容器配置依赖的存储、网络等资源,并设计编写deployment,configmap,service,volume,ingress等yaml文件,再将其一次提交给kubernetes管理部署。总之,微服务架构和容器化给复杂应用的部署和管理都带来了很大的挑战。
Helm用于需要在kubernetes部署的复杂应用进行定义,安装和更新,Helm将kubernetes的yaml资源进行打包为chart,而chart被保存到chart 仓库,由chart仓库存储,分发和共享;
Herlm支持应用的chart版本管理,简化了kubernetes用用部署的应用定义,打包和部署,更新,删除和回滚等操作。
Helm主要包含以下组件:
Chart:Helm软件包,包含一个用用所需资源对象的YAML文件,通常以tar.gz压缩包提供,也可以是文件夹形式。
Repository(仓库):用于存放和共享chart的仓库。
config(配置数据):部署时设置到chart中的配置数据。
release:基于chart和config部署到kubernetes集群中运行的一个实例,一个chart可以被部署多次,每次的release不同。
基于Helm的工作流程如下:
1. 开发人员将开发好的chart上传到chart仓库。
2. 运维人员基于chart的定义,设置必要的配置数据(configmap),使用Helm命令行工具将应用一键部署到kubernetes集群中,以release概念管理后续的更新,回滚等。
3. chart仓库中的chart可以用于共享和开发。
部署
3.x的helm与apiserver交互方式:
- Helm 3.x 会自动使用当前 Kubernetes 环境中的用户凭证来访问 API 服务器。
- 这些凭证通常是从
~/.kube/config
文件或环境变量中获取的。
安装3.x
https://github.com/helm/helm/releases
添加阿里云的repo源
helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts //添加阿里云的repo源
安装指定的mysql软件包,并命名为mysql
helm install stable/mysql -n mysql
查看当前安装的Chart包
helm list -n namespace
查看mysql的状态信息
helm status mysql
helm 其他常用命令
helm ls //列出已经部署的 Release helm status RELEASE_NAME //查询一个特定的 Release 的状态 helm delete cautious-shrimp //移除所有与这个 Release 相关的 Kubernetes 资源 helm rollback RELEASE_NAME REVISION_NUMBER //回滚到指定版本 helm rollback cautious-shrimp 1 helm search mysql //查看与mysql相关的chart包 helm fetch stable/mysql //将mysql软件包下载到本地 helm inspect stable/mysql //查看该软件包的详细信息 helm delete --purge mysql //删除mysql,并将本地的缓存也进行删除 helm repo update //更新repo仓库资源 helm create helm_charts //创建一个chart,名称为helm_charts cd helm_charts/ && helm lint //测试charts语法 helm package helm_charts //打包charts helm template helm_charts-0.1.0.tgz //查看该软件包生成的yaml文件
配置体现在配置文件 values.yaml
cat <<'EOF' > ./values.yaml image: repository: gcr.io/google-samples/node-hello tag: '1.0' EOF
这个文件中定义的值,在模板文件中可以通过 .VAlues对象访问到
cat <<'EOF' > ./templates/deployment.yaml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: hello-world spec: replicas: 1 template: metadata: labels: app: hello-world spec: containers: - name: hello-world image: {{ .Values.image.repository }}:{{ .Values.image.tag }} //调用values.yml的image.repository与tag ports: - containerPort: 8080 protocol: TCP EOF
在 values.yaml 中的值可以被部署 release 时用到的参数 --values YAML_FILE_PATH 或 --set key1=value1, key2=value2 覆盖掉
升级版本
helm install --set image.tag='v2' .
升级版本
helm upgrade -f values.yaml test .
Debug
使用模板动态生成K8s资源清单,非常需要能提前预览生成的结果。
使用--dry-run --debug 选项来打印出生成的清单文件内容,而不执行部署
helm install . --dry-run --debug --set image.tag=latest
目录结构
mychart ├── Chart.yaml ├── charts # 该目录保存其他依赖的 chart(子 chart) ├── templates # chart 配置模板,用于渲染最终的 Kubernetes YAML 文件 │ ├── NOTES.txt # 用户运行 helm install 时候的提示信息 │ ├── _helpers.tpl # 用于创建模板时的帮助类 │ ├── deployment.yaml # Kubernetes deployment 配置 │ ├── ingress.yaml # Kubernetes ingress 配置 │ ├── service.yaml # Kubernetes service 配置 │ ├── serviceaccount.yaml # Kubernetes serviceaccount 配置 │ └── tests │ └── test-connection.yaml └── values.yaml # 定义 chart 模板中的自定义配置的默认值,可以在执行 helm install 或 helm update 的时候覆盖
helm chart的升级与回滚
要想升级 chart 可以修改本地的 chart 配置并执行: helm upgrade [RELEASE] [CHART] [flags] helm upgrade redis ./redis -n namespace 使用 helm ls 的命令查看当前运行的 chart 的 release 版本,并使用下面的命令回滚到历史版本: helm rollback <RELEASE> [REVISION] [flags]
回滚
查看历史版本
# 查看历史 helm history redis # 回退到上一版本 helm rollback redis # 回退到指定版本 helm rollback redis 3
查看实例加载的清单
helm get manifest [releasename] -n namespace helm get manifest ingressclass -n default
本文来自博客园,作者:不会跳舞的胖子,转载请注明原文链接:https://www.cnblogs.com/rtnb/p/16202379.html