【问题标题】:Variable substitution in the new kubernetes kustomize support (since 1.14.0): kubectl apply -k ./新 kubernetes kustomize 支持中的变量替换(自 1.14.0 起):kubectl apply -k ./
【发布时间】:2019-04-23 09:25:49
【问题描述】:

我们以这种方式将 kustomize 用于我们的 kubernetes 部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:${IMAGE_VERSION}
        ports:
        - containerPort: 80

并部署此 yaml,将变量 IMAGE_VERSION 替换为 1.7.9

kustomize build ./nginx/overlays/dev/ | sed -e 's|${IMAGE_VERSION}'"|1.7.9|g" | kubectl apply -f -

因为 kubectl 1.14 支持 kustomize。

现在我们可以做一些非常棒的事情了

kubectl apply -k ./

但是如何用这个新命令替换 IMAGE_VERSION 变量?

【问题讨论】:

    标签: kubernetes customization kubectl declarative kustomize


    【解决方案1】:

    您必须创建一个包含自定义项的kustomization.yaml 文件。

    即:

    # kustomization.yaml
    bases:
    - ../base
    images:
      - name: nginx-pod
        newTag: 1.15
        newName: nginx-pod-2
    

    对于模板,您创建一个包含 kustomization.yaml 并参考部署和依赖项的基本文件夹,即:

    # ../base/kustomization.yaml
    resources:
    - deployment.yaml
    

    # ../base/deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx-pod
    

    运行命令:

    kubectl apply -k

    上面的命令将编译定制并生成以下 yaml 应用到集群:

    # Modified Base Resource
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: nginx
      name: nginx-deployment
    spec:
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          # The image image tag has been changed for the container
          - name: nginx
            image: nginx-pod-2:1.15
    

    【讨论】:

    • 感谢您的快速答复。在我们的用例中,我们需要在不同的地方使用这些变量:例如在集群自动缩放器spec:template:spec:containers:command:- --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/${CLUSTER_NAME} 中。另一个问题是这个版本每天都在变化。更改 kustomization.yaml 以在部署期间传递它并不方便
    • 对不起,我不明白自动缩放器和变量有什​​么问题