使用 kustomize 设置 hostPath 路径

Cod*_*nes 5 kubernetes kustomize

是否可以使用 kustomize 从环境变量指定卷主机路径?

我有一个 Kubernetes 清单,它描述了由容器组成的部署。在开发过程中,我使用不同的映像(包含开发工具)并将代码从主机装载到容器中。这样我就可以更改代码而无需重新部署。

我正在使用 patchStategicMerge 来替换生产映像,即我想在开发期间使用的映像并将代码安装到容器中,即

自定义.yaml

kind: Kustomization

bases:
- ../../base

patchesStrategicMerge:
- my-service.yaml
Run Code Online (Sandbox Code Playgroud)

我的服务.yaml

---
apiVersion: apps/v1
...
...
    spec:
      containers:
        - name: myservice
          image: myservice-dev-image:1.0.0
          command: ['CompileDaemon',  '--build=make build', '--command=./myservice']
          volumeMounts:
          - name: code
            mountPath: /go/src/app
      volumes:
      - name: code
        hostPath:
          path: /source/mycodepath/github.com/myservice
Run Code Online (Sandbox Code Playgroud)

我想做的是通过环境变量使路径可配置,这样我就不必将我的特定路径(/source/mycodepath/)检查到git中,以便其他开发人员可以轻松地在他们的项目中使用它自己的环境。

可以用 kustomize 来做到这一点吗?

Jus*_*lyn 5

创建以下目录结构

  • k8s
  • k8s/基础
  • k8s/覆盖
  • k8s/覆盖/鲍勃
  • k8s/覆盖/sue

首先我们需要创建基础。基础是默认模板,它提供了适用于双方的位。创建k8s/base一个名为的文件app.yaml并填充以下内容(实际上将您的粘贴到此处。您也可以将其他常见位放在那里,也用---新行分隔)。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: myservice
  namespace: default
spec:
  strategy:
    type: RollingUpdate
  replicas: 1
  template:
    metadata:
      labels:
        name: myservice
        app: myservice
    spec:
      containers:
        - name: myservice
          image: myservice-dev-image:1.0.0
          command: ['CompileDaemon',  '--build=make build', '--command=./myservice']
          volumeMounts:
          - name: code
            mountPath: /go/src/app
      volumes:
      - name: code
        hostPath:
          path: /xxx
Run Code Online (Sandbox Code Playgroud)

接下来在同一目录 ( k8s/base) 中创建另一个名为kustomization.yaml并填充的文件:

resources:
 - app.yaml
Run Code Online (Sandbox Code Playgroud)

接下来,我们将创建两个叠加层:一个用于 Bob,一个用于 Sue。

k8s/overlays/bob我们创建 Bob 的自定义更改app.yaml并填充以下内容:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: myservice
  namespace: default
spec:
  template:
    spec:
      volumes:
      - name: code
        hostPath:
          path: /users/bob/code
Run Code Online (Sandbox Code Playgroud)

现在还要k8s/overlays/bob创建另一个文件,名称kustomization.yaml如下:

resources:
  - ../../base
patchesStrategicMerge:
  - app.yaml
Run Code Online (Sandbox Code Playgroud)

我们可以将这两个文件复制k8s/overlays/bobk8s/overlays/sue目录中,只需更改位中的路径即可volumes:

接下来我们需要生成kustomize build结果版本 - bob 和 sue。

如果该k8s目录位于您的代码目录中,请打开终端(安装了 Kustomize 并运行:

kustomize build k8s/overlays/bob
Run Code Online (Sandbox Code Playgroud)

这应该向您展示 Bob 的定制化会是什么样子:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: myservice
  namespace: default
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: myservice
        name: myservice
    spec:
      containers:
      - command:
        - CompileDaemon
        - --build=make build
        - --command=./myservice
        image: myservice-dev-image:1.0.0
        name: myservice
        volumeMounts:
        - mountPath: /go/src/app
          name: code
      volumes:
      - hostPath:
          path: /users/bob/code
        name: code
Run Code Online (Sandbox Code Playgroud)

要应用它,您可以运行:

kustomize build k8s/overlays/bob | kubectl apply -f -
Run Code Online (Sandbox Code Playgroud)

要应用 Sue,您可以运行:

kustomize build k8s/overlays/sue| kubectl apply -f -
Run Code Online (Sandbox Code Playgroud)

Yaml 对空格很敏感,我不确定这是否适合 Stackoverflow 答案,所以我也放在了 Github 上: https: //github.com/just1689/kustomize-local-storage