问题描述
是否可以使用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