2

是否可以使用 kustomize 从环境变量中指定卷 hostPath?

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

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

自定义.yaml

kind: Kustomization

bases:
- ../../base

patchesStrategicMerge:
- my-service.yaml

我的服务.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

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

是否可以使用 kustomize 做到这一点?

4

1 回答 1

3

创建以下目录结构

  • k8s
  • k8s/基础
  • k8s/叠加层
  • k8s/覆盖/鲍勃
  • k8s/覆盖/起诉

首先,我们需要创建基础。基础是默认模板,它提供适用于两个人的位。在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

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

resources:
 - app.yaml

接下来我们将创建两个叠加层:一个给 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

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

resources:
  - ../../base
patchesStrategicMerge:
  - app.yaml

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

接下来我们需要执行 akustomize build来生成结果版本 - bob and sue。

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

kustomize build k8s/overlays/bob

这应该向您展示 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

要应用它,您可以运行:

kustomize build k8s/overlays/bob | kubectl apply -f -

要申请 Sue,您可以运行:

kustomize build k8s/overlays/sue| kubectl apply -f -

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

于 2020-09-04T16:32:18.293 回答