K8s helm

官方文档

仓库ArtifactHUB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#官方仓库
helm repo add stable https://charts.helm.sh/stable
#常用仓库
helm repo add elastic https://helm.elastic.co
helm repo add gitlab https://charts.gitlab.io
helm repo add harbor https://helm.goharbor.io
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com
helm repo add stable https://kubernetes-charts.storage.googleapis.com
#国内
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update
#仓库列表
helm repo list

常用命令

1
2
3
4
5
6
7
8
# mac 安装helm
brew install helm
#获取服务的配置
helm get values -n namespaseName server-name
# 查看服务的部署历史
helm history -n namespaseName server-name
# 回滚版本
helm rollback -n namespaseName server-name revision

charts模版

模版目录结构

1
2
3
4
5
6
7
8
9
10
mychart/
Chart.yaml # 文件包含了该chart的描述。你可以从模板中访问它。
values.yaml #父亲values.yml文件,会被-f命令覆盖,-f命令会被--set覆盖
charts/ #可以 包含其他的chart(称之为 子chart)。
templates/ #目录包括了模板文件,Helm会通过模板渲染引擎将所有文件发送到templates/目录中,然后收集模板的结果并发送给k8s。
NOTES.txt # chart的"帮助文本"。这会在你的用户执行helm install时展示给他们
deployment.yaml #创建Kubernetes 工作负载的基本清单
service.yaml #为你的工作负载创建一个 service终端基本清单。
_helpers.tpl #放置可以通过chart复用的模板辅助对象
...

helm upgrade

helm upgrade [RELEASE] [CHART] [flags]

常见参数:

  • -i, --install :如果版本不存在就运行安装
  • --history-max <int>:限制每个版本保存的最大修订数。使用 0 表示无限制(默认 10)
  • -n, --namespace <string>:指定命名空间范围
  • -f, --values <strings>:在 YAML 文件或 URL 中指定值(可以指定多个)
  • --set stringArray: 在命令行设置值(可以用逗号指定多个或单独的值:key1=val1,key2=val2)
1
2
3
4
5
6
7
8
9
10
#env环境变量
CHARTS_REPO = 'https://harbor.exxk.com/chartrepo/baseimage/charts'
CHARTS_NAME = 'appchart-uat-latest.tgz'
CICD_REGISTRY = 'harbor.exxk.com.cn'
HARBOR_NAMESPACE = 'dev-1'
#---示例
#获取当前镜像
CURRENT_IMAGE=`helm3 get values -n exxk exxk-server-v1 | grep repository | awk -F ': ' '{print \\$2}' `
#更新或安装服务
helm3 upgrade --install --history-max=5 exxk-server-v1 $CHARTS_REPO/$CHARTS_NAME -n exxk -f z-k8s-helm/uat/val-exxk-server.yaml --set image.repository=$CICD_REGISTRY/$HARBOR_NAMESPACE/exxk-server:$CICD_SEQUENCE,currentImage=$CURRENT_IMAGE

创建helm chrat

常见语法

1
2
3
4
{{- with .Values.nodeSelector }} #with可以指定变量范围
nodeSelector:
{{- toYaml . | nindent 8 }} #nindent 4 是指换行后加4个空格,toYaml是一个函数,指定映射路径并全部取出。
{{- end }}
1
2
3
4
5
6
#安装helm
brew install helm
#创建项目
helm create nginx-file-brower
#检查依赖
helm lint mychart

常见问题

  1. helm Error: UPGRADE FAILED: another operation (install/upgrade/rollback) is in progress

    错误原因:是因为历史更新有未成功的,导致一直Preparing upgrade

    解决:执行下面命令回退版本,然后重新跑流水线即可。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [root@k8s-master-242-10 ~]# helm history -n namespaseName server-name
    REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
    12 Wed Jun 1 07:00:04 2022 superseded appchart-uat-latest 1.16.0 Upgrade complete
    13 Thu Jun 2 02:01:17 2022 superseded appchart-uat-latest 1.16.0 Upgrade complete
    14 Thu Jun 2 02:23:25 2022 pending-upgrade appchart-uat-latest 1.16.0 Preparing upgrade
    [root@k8s-master-242-10 ~]# helm rollback -n namespaseName server-name 13
    Rollback was a success! Happy Helming!
    [root@k8s-master-242-10 ~]# helm history -n namespaseName server-name
    REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
    12 Wed Jun 1 07:00:04 2022 superseded appchart-uat-latest 1.16.0 Upgrade complete
    13 Thu Jun 2 02:01:17 2022 superseded appchart-uat-latest 1.16.0 Upgrade complete
    14 Thu Jun 2 02:23:25 2022 pending-upgrade appchart-uat-latest 1.16.0 Preparing upgrade
    15 Tue Jun 28 16:35:18 2022 deployed appchart-uat-latest 1.16.0 Rollback to 13
    [root@mh-k8s-master-242-10 ~]#