k8s学习之helm自定义的Chart

我爱海鲸 2024-11-09 22:33:00 暂无标签

简介kubernetes

1、创建一个自定义的Chart

helm create mychart 【创建一个chart】

cd mychart/templates/

rm -rf * 【删除当前目录下所有的文件(慎用)】

kubectl create deployment web --image=nginx --dry-run -o yaml > deployment.yaml  【创建一个deployment资源文件并尝试运行(不是真正的运行)】

kubectl create deployment web --image=nginx【执行一个deployment】

也可以直接复制下面的 deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: web
  name: web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: web
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}
status: {}

kubectl get pod 【查看pod】

kubectl expose deployment web --port=80 --target-port=80 --type=NodePort --dry-run -o yaml > service.yaml 【创建一个svc的资源文件】

直接复制service.yaml:

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: web
  name: web
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: web
  type: NodePort
status:
  loadBalancer: {}

kubectl delete deployment web 【删除web这个pod】

cd ../..【返回到有mychart文件夹的这个目录】

helm install web mychart/  【构建一个helm】

kubectl get svc 【查看当前已经创建的svc】

直接访问:http://192.168.204.182:32580/

2、结构说明

mychart/
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── ingress.yaml
│ ├── NOTES.txt
│ └── service.yaml
└── values.yaml

Chart.yaml:用于描述这个 Chart 的基本信息,包括名字、描述信息以及版本等。

values.yaml :用于存储 templates 目录中模板文件中用到变量的值。

Templates: 目录里面存放所有 yaml 模板文件。

charts:目录里存放这个 chart 依赖的所有子 chart。

NOTES.txt :用于介绍 Chart 帮助信息, helm install 部署后展示给用户。例如:如何使用这个 Chart、列出缺省的设置等。

_helpers.tpl:放置模板助手的地方,可以在整个 chart 中重复使用

 

创建 Chart 后,接下来就是将其部署:

helm install web mychart/
也可以打包推送的 charts 仓库共享别人使用。
# helm package mychart/
mychart-0.1.0.tgz
helm install <release-name> ./mychart-0.1.0.tgz -n <namespace>

3、应用升级

helm upgrade 【helm名】 【helm相关配置的名称】

4、chart 模板

Helm 最核心的就是模板,即模板化的 K8S manifests 文件。

它本质上就是一个 Go 的 template 模板。Helm 在 Go template 模板的基础上,还会增加很

多东西。如一些自定义的元数据信息、扩展的库以及一些类似于编程形式的工作流,例如

条件语句、管道等等。这些东西都会使得我们的模板变得更加丰富。

有了模板,我们怎么把我们的配置融入进去呢?用的就是这个 values 文件。这两部分内容

其实就是 chart 的核心功能。

部署 nginx 应用,熟悉模板使用

# helm create nginx
# vi nginx/Chart.yaml
apiVersion: v2
name: nginx
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: 1.15

# vi nginx/values.yaml
replicas: 3
image: nginx
tag: 1.15
serviceport: 80
targetport: 80
label: nginx

# vi nginx/templates/NOTES.txt
hello

# vi nginx/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: {{ .Values.label }}
  name: {{ .Release.Name }}
spec:
  replicas: {{ .Values.replicas }}
  selector:
    matchLabels:
      app: {{ .Values.label }}
  template:
    metadata:
      labels:
        app: {{ .Values.label }}
    spec:
      containers:
      - image: {{ .Values.image }}:{{ .Values.tag }}
        name: web

# vi nginx/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: {{ .Values.label }}
  name: {{ .Release.Name }}
spec:
  ports:
  - port: {{ .Values.serviceport }}
    protocol: TCP
    targetPort: {{ .Values.targetport }}
  selector:
    app: {{ .Values.label }}
  type: NodePort

values.yaml配置文件可以删除一个没用的东西

上面那些配置好后,就使用

helm install web3 nginx/  【部署】

helm get manifest web3  【查看实际的模板被渲染过后的资源文件】

Helm 也提供了--dry-run --debug 调试参数,帮助你验证模板正确性。在执行 helm

install 时候带上这两个参数就可以把对应的 values 值和渲染的资源清单打印出来,而不

会真正的去部署一个 release。

比如我们来调试上面创建的 chart 包:

 helm install --dry-run web3 nginx/  【也可以尝试运行然后查看资源文件】

 

这个 deployment 就是一个 Go template 的模板,这里定义的 Release 模板对象属于 Helm

内置的一种对象,是从 values 文件中读取出来的。这样一来,我们可以将需要变化的地方

都定义变量。

内置对象

刚刚我们使用 {{.Release.Name}}将 release 的名称插入到模板中。这里的 Release 就

是 Helm 的内置对象,下面是一些常用的内置对象:

Release.Name

release 名称

Release.Name

release 名字

Release.Namespace

release 命名空间

Release.Service

release 服务的名称

Release.Revision

release 修订版本号,从 1 开始累加

 

Values

Values 对象是为 Chart 模板提供值,这个对象的值有 4 个来源:

chart 包中的 values.yaml 文件

父 chart 包的 values.yaml 文件

通过 helm install 或者 helm upgrade 的 -f 或者--values 参数传入的自定义的 yaml 文件

通过 --set参数传入的值

chart 的 values.yaml 提供的值可以被用户提供的 values 文件覆盖,而该文件同样可以被 --set 提供的参数所覆盖。

helm upgrade web3 --set replicas=5 nginx/

helm history web3  【查看历史】

升级、回滚和删除

发布新版本的 chart 时,或者当您要更改发布的配置时,可以使用该 helm upgrade 命令。

# helm upgrade --set imageTag=1.17 web nginx

# helm upgrade -f values.yaml web nginx

如果在发布后没有达到预期的效果,则可以使用 helm rollback 回滚到之前的版本。

例如将应用回滚到第一个版本:

helm rollback web3 1

卸载发行版,请使用以下 helm uninstall 命令:

helm uninstall web3

查看历史版本配置信息

helm get all --revision 1 web3

5、开发自己的 chart

1、先创建模板

2、修改 Chart.yaml,Values.yaml,添加常用的变量

3、 在 templates 目录下创建部署镜像所需要的 yaml 文件,并变量引用 yaml 里经常变动

的字段

 

 

 

 

你好:我的2025