一、自定义应用 Chart 的开发流程

1.1 安装 Helm

以下是基于Helm开发一个常规应用的步骤及YAML文件:

下载地址:https://github.com/helm/helm/releases

说明:我用的Kubernetes版本为1.26.9,考虑到后期会升级Kubernetes版本,所以helm版本为3.11

[root@master01 ~]# k get no
NAME       STATUS   ROLES           AGE   VERSION
master01   Ready    control-plane   11d   v1.26.9
master02   Ready    control-plane   11d   v1.26.9
master03   Ready    control-plane   11d   v1.26.9
node01     Ready    <none>          11d   v1.26.9
node02     Ready    <none>          11d   v1.26.9

下载二进制包

[root@master01 3]# wget https://get.helm.sh/helm-v3.11.3-linux-amd64.tar.gz

解压,改名并做软链接

[root@master01 3]# tar zxf helm-v3.11.3-linux-amd64.tar.gz  -C /opt/
[root@master01 3]# mv /opt/linux-amd64/  /opt/helm
[root@master01 3]# ln -s /opt/helm/helm  /bin/

验证软链接

[root@master01 3]# ll /bin/helm
lrwxrwxrwx 1 root root 14 Oct  5 22:00 /bin/helm -> /opt/helm/helm

测试,查看helm版本

[root@master01 3]# helm version
version.BuildInfo{Version:"v3.11.3", GitCommit:"323249351482b3bbfc9f5004f65d400aa70f9ae7", GitTreeState:"clean", GoVersion:"go1.20.3"}

1.2 创建 Helm Chart

执行以下命令创建一个新的Helm chart:

[root@master01 ~]# cd /root/3
[root@master01 3]# helm create nginx

其中, myapp 是chart的名称,可以根据需要进行修改

1.3 编辑 values.yaml

进入chart目录,编辑 values.yaml 文件,修改其中的配置项,例如应用名称、端口号、镜像名称等。

1.4 编辑 deployment.yaml

1、编辑 templates/deployment.yaml 文件,定义应用的Deployment。

以下是一个示例:

[root@master01 myapp]# vim /root/3/nginx/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.appName }}-deployment
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ .Values.appName }}
  template:
    metadata:
      labels:
        app: {{ .Values.appName }}
      spec:
        containers:
        - name: {{ .Values.appName }}
          image: {{ .Values.image.repository }}:{{ .Values.image.tag
}}
          ports:
            - containerPort: {{ .Values.containerPort }}
          env:
            - name: DB_HOST
              value: {{ .Values.db.host }}
            - name: DB_PORT
              value: {{ .Values.db.port }}
            - name: DB_USER
              value: {{ .Values.db.user }}
            - name: DB_PASSWORD
              value: {{ .Values.db.password }}

在这个示例中,我们定义了一个Deployment,使用了 values.yaml文件中定义的配置项。其中, replicas 表示副本数, selector 表示选择器,template 表示Pod的模板, containers 表示容器列表, env 表示环境变量。

1.5 编辑 service.yaml

编辑 templates/service.yaml文件,定义应用的Service。

[root@master01 myapp]# vim /root/3/nginx/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: {{ .Values.appName }}-service
spec:
  selector:
    app: {{ .Values.appName }}
  ports:
    - name: http
      port: {{ .Values.servicePort }}
      targetPort: {{ .Values.containerPort }}
  type: LoadBalancer

在这个示例中,我们定义了一个Service,使用了 values.yaml 文件中定义的配置项。

其中, selector 表示选择器, ports 表示端口映射, type 表示Service类型。

1.6 打包 Helm Chart

执行以下命令将Helm chart打包

[root@master01 ~]# cd /root/3/
[root@master01 3]# helm package nginx/
Successfully packaged chart and saved it to: /root/3/nginx-0.1.0.tgz

1.7 部署 Helm Chart

执行以下命令部署Helm chart:

$ helm install my-app /root/3/nginx-0.1.0.tgz

其中, my-app 是部署的名称,可以根据需要进行修改。

以上就是基于Helm开发一个常规应用的步骤及所用到的YAML文件。需要注意的是,这只是一个示例,实际开发中可能需要根据具体需求进行修改。