Helm 与 Kustomize的思考与实践下

551 阅读2分钟

今天我们来进行实战演练,目录结构如下所示,主要演示deployment.yaml 文件的差异性

image.png

1、先通过helm 的values.yaml 文件填充模板

helm template base ./ --output-dir /root/demo

2、查看base files(主要以deployment为主)

base/templates/gateway-deploy.yaml

# Source: base/templates/gateway-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
  labels:
    app: demo
    version: v1
  name: demo
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: demo
      version: v1
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: demo
        version: v1
    spec:
      containers:
      - env:
        - name: SPRING_PROFILES_ACTIVE
          value: int
        - name: JAVA_OPTS
          value: ' -Xmx512m -Xms512m'
        image: aaa
        imagePullPolicy: Always
        name: demo
        ports:
        - containerPort: 7001
          name: http
          protocol: TCP
        resources:
          requests:
            cpu: 300m
            memory: 1000Mi
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      imagePullSecrets:
      - name: package
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30

base/kustomization.yaml

resources:
  - ./templates/gateway-deploy.yaml
  - ./templates/gateway-ing.yaml

3、查看overlay/dev files (主要以deployment为主)

overlay/dev/gateway-deploy.yaml,修改了环境变量和resourcesh中requests的大小

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
spec:
  replicas: 2
  template:
    spec:
      containers:
      - env:
        - name: SPRING_PROFILES_ACTIVE
          value: int
        - name: JAVA_OPTS
          value: ' -Xmx1024m -Xms1024m'
        name: demo
        resources:
          requests:
            cpu: 500m
            memory: 2000Mi

overlay/dev/kustomization.yaml

bases:
- ../../base
patchesStrategicMerge:
- gateway-deploy.yaml

检查生成的yaml文件

kustomize build overlay/dev

内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: demo
    version: v1
  name: demo
spec:
  progressDeadlineSeconds: 600
  replicas: 2
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: demo
      version: v1
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: demo
        version: v1
    spec:
      containers:
      - env:
        - name: SPRING_PROFILES_ACTIVE
          value: int
        - name: JAVA_OPTS
          value: ' -Xmx1024m -Xms1024m'
        image: aaa
        imagePullPolicy: Always
        name: demo
        ports:
        - containerPort: 7001
          name: http
          protocol: TCP
        resources:
          requests:
            cpu: 500m
            memory: 2000Mi
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      imagePullSecrets:
      - name: package
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30

把生成的yaml文件应用到kubernetes集群中

kubectl apply -k overlays/dev

4、stage 环境与dev类似,这里就不赘述了。

5、我们可以通过sed命令来组织想要的资源,比如我们不想把ingress部署到kubernete集群中去

sed -i 's/.*ing/#&/' base/kustomization.yaml