新的kubernetes kustomize支持(自1.14.0起)中的变量替换:kubectl apply -k ./

时间:2019-04-23 09:25:49

标签: kubernetes customization kubectl declarative

我们通过这种方式将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,用1.7.9代替变量IMAGE_VERSION

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变量?

1 个答案:

答案 0 :(得分:2)

您必须创建一个包含自定义项的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