使用Kustomize设置hostPath路径

问题描述

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

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

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

kustomization.yaml

kind: Kustomization

bases:
- ../../base

patchesStrategicMerge:
- my-service.yaml

my-service.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做到这一点?

解决方法

创建以下目录结构

  • k8s
  • k8s / base
  • k8s /叠加层
  • k8s / overlays / bob
  • k8s / overlays / 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

接下来在同一目录(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/bob中的两个文件复制到k8s/overlays/sue目录中,只需在volumes:位中更改路径即可。

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

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

kustomize build k8s/overlays/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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...