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 来做到这一点吗?
创建以下目录结构
首先我们需要创建基础。基础是默认模板,它提供了适用于双方的位。创建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/bob到k8s/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
| 归档时间: |
|
| 查看次数: |
2741 次 |
| 最近记录: |