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

 

posted @ 2022-04-28 12:23  不会跳舞的胖子  阅读(672)  评论(0)    收藏  举报