首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用kustomize设置hostPath路径

使用kustomize设置hostPath路径
EN

Stack Overflow用户
提问于 2020-09-03 11:39:50
回答 1查看 2.2K关注 0票数 4

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

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

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

kustomization.yaml

代码语言:javascript
复制
kind: Kustomization

bases:
- ../../base

patchesStrategicMerge:
- my-service.yaml

my-service.yaml

代码语言:javascript
复制
---
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,这样其他开发人员就可以轻松地在他们自己的环境中使用它了。

有可能用库斯托梅斯来做这个吗?

EN

回答 1

Stack Overflow用户

发布于 2020-09-04 16:32:18

创建以下目录结构

  • k8s
  • k8s/base
  • k8s/overlays
  • k8s/overlays/bob
  • k8s/overlays/sue

首先,我们需要建立基地。基是默认模板,它提供适用于两个人的位元。在k8s/base中,创建一个名为app.yaml的文件并填充以下内容(实际上将您的文件粘贴在这里。您可以在其中放置其他公共比特(也可以用---和新行分隔)。

代码语言:javascript
复制
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的文件,并填充:

代码语言:javascript
复制
resources:
 - app.yaml

接下来,我们将创建两个覆盖:一个用于Bob,另一个用于Sue。

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

代码语言:javascript
复制
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的文件,其内容如下:

代码语言:javascript
复制
resources:
  - ../../base
patchesStrategicMerge:
  - app.yaml

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

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

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

代码语言:javascript
复制
kustomize build k8s/overlays/bob

这将向您展示Bob的库口化将是什么样子:

代码语言:javascript
复制
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

若要应用该方法,您可以运行:

代码语言:javascript
复制
kustomize build k8s/overlays/bob | kubectl apply -f -

要应用Sue,可以运行:

代码语言:javascript
复制
kustomize build k8s/overlays/sue| kubectl apply -f -

Yaml对空格很敏感,我不确定这是否适用于堆栈溢出式的回答,所以我也使用了Github:https://github.com/just1689/kustomize-local-storage

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63722885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档