我正在尝试为特定环境示例构建清单文件:- 测试,我想重新使用基本清单文件,如下所述。
k8s/kustomize/overlays/test/kustomization.yaml
commonLabels:
variant: test
app: test-app
resources:
- ../../base/deployment.yaml
- ../../base/service.yaml
- ../../base/configmap.yaml
- ../../base/secret.yaml
- namespace.yaml
namespace: app-test
patchesStrategicMerge:
- secret.yaml
- configmap.yaml
Run Code Online (Sandbox Code Playgroud)
但是当我运行命令时出现以下错误 - kustomize build k8s/kustomize/overlay/test
2020/02/19 16:04:36 got file 'deployment.yaml', but 'path/k8s/kustomize/base/deployment.yaml' must be a directory to be a root
Error: accumulating resources: accumulating resources from '../../base/deployment.yaml': security; file 'path/k8s/kustomize/base/deployment.yaml' is not in or below 'path/k8s/kustomize/overlay/test'
Run Code Online (Sandbox Code Playgroud)
P.S: kustomize version is - Version: {KustomizeVersion:3.2.0 GitCommit:a3103f1e62ddb5b696daa3fd359bb6f2e8333b49 BuildDate:2019-09-18T18:31:04+01:00 GoOs:darwin GoArch:amd64}
Run Code Online (Sandbox Code Playgroud)
我是 kubernetes 和 kustomize 的新手。请帮帮我好吗?
目前我们正在使用 ${HOME}/bin/kustomize edit set nameprefix prefix1
但它正在向我们的所有资源(例如,deployment.yaml 和 service.yaml)添加 nameprefix。
我们只想将 nameprefix 应用于deployment.yaml,而不将其应用于service.yaml
我想使用Kustomize修补(覆盖) kubernetes清单中的列表。我正在使用 patchStrategicMerge 方法。当我修补不在列表中的参数时,修补会按预期工作 - 仅替换 patch.yaml 中的已寻址参数,其余部分保持不变。当我修补列表时,整个列表都会被替换。
如何仅替换列表中的特定项目,并且列表中项目的资源保持不变?
我找到了这两个资源:
https://github.com/kubernetes-sigs/kustomize/issues/581
https://github.com/kubernetes/community/blob/master/contributors/devel/sig-api-machinery/strategic -merge-patch.md
但无法做出所需的解决方案。
示例代码:orig-file.yaml
apiVersion: monitoring.coreos.com/v1alpha1
kind: AlertmanagerConfig
metadata:
name: alertmanager-slack-config
namespace: system-namespace
spec:
test: test
other: other-stuff
receivers:
- name: default
slackConfigs:
- name: slack
username: test-user
channel: "#alerts"
sendResolved: true
apiURL:
name: slack-webhook-url
key: address
Run Code Online (Sandbox Code Playgroud)
补丁.yaml:
apiVersion: monitoring.coreos.com/v1alpha1
kind: AlertmanagerConfig
metadata:
name: alertmanager-slack-config
namespace: system-namespace
spec:
test: brase-yourself
receivers:
- name: default
slackConfigs:
- name: slack
username: Karl
Run Code Online (Sandbox Code Playgroud)
自定义.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization …Run Code Online (Sandbox Code Playgroud) 所以我正在处理这样的结构:
\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 1\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 env-vars\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 2\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 env-vars\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 env-vars\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 shared\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 env-vars\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\nRun Code Online (Sandbox Code Playgroud)\n而每个级别内的环境变量都有一些环境变量并且
\n$cat kustomization.yaml\nbases:\n- 1/\n- 2/\n\nnamePrefix: toplevel-\n\nconfigMapGenerator:\n - name: env-cm\n behavior: merge\n envs:\n - env-vars\nRun Code Online (Sandbox Code Playgroud)\n$cat 1/kustomization.yaml\nbases:\n- ./../shared\n\nnamePrefix: first-\n\nconfigMapGenerator:\n - name: env-cm\n behavior: merge\n envs:\n - env-vars\nRun Code Online (Sandbox Code Playgroud)\n$cat 2/kustomization.yaml\nbases:\n- ./../shared\n\nnamePrefix: second-\n\nconfigMapGenerator:\n - name: env-cm\n behavior: merge\n envs:\n - env-vars\nRun Code Online (Sandbox Code Playgroud)\n$cat shared/kustomization.yaml\nconfigMapGenerator:\n - name: env-cm\n behavior: create\n envs:\n - env-vars\nRun Code Online (Sandbox Code Playgroud)\n我本质上是试图创建 2 个具有一些共享值的配置映射(它们是从不同的资源注入的:从shared目录和顶级目录)
使用kubectl apply -k,您可以覆盖资源配置(您已经定义)。你也可以创建资源吗?
在我的具体情况下,我想为开发环境创建一个本地卷。不过,我的基本文件夹中没有此资源。
\n\n我的文件夹结构是这样的:
\n\n\n\nRun Code Online (Sandbox Code Playgroud)\n~/someApp\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 base\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 deployment.yaml\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 service.yaml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 overlays\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 development\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cpu_count.yaml\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 replica_count.yaml\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 volume.yaml <--- *Is this possible*?\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 production\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cpu_count.yaml\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 replica_count.yaml\n
我正在尝试设置多行值(ca 证书文件的内容)来为特定密钥设置 kustomize 环境文件,如下面的代码所示。有办法实现这一点吗?
注意:向 some_params.env 中的值添加引号不起作用。
kustomize.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
commonLabels:
role: authentication
bases:
- ./somebase
configMapGenerator:
- name: some-parameters
env: some_params.env
vars:
- name: ca_contents
objref:
kind: ConfigMap
name: some-parameters
apiVersion: v1
fieldref:
fieldpath: data.ca_contents
configurations:
- some_params.yaml
Run Code Online (Sandbox Code Playgroud)
some_params.yaml
varReference:
- path: data/ca.pem
kind: ConfigMap
Run Code Online (Sandbox Code Playgroud)
some_params.env
ca_contents= |
-----BEGIN CERTIFICATE-----
YOUR CA CERTIFICATE CONTENTS
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
运行以下命令:
kustomize build base
返回:
Error: NewResMapFromConfigMapArgs: NewResMapFromConfigMapArgs: env source file: some_params.env: "-----BEGIN CERTIFICATE-----" is not a valid key name: a …
我有一个 kustomize 基础,我想在不编辑它的情况下重新使用它。不幸的是,它创建了一个我不想创建的命名空间。我想在编译清单时简单地从考虑中删除该资源并为我的添加一个资源,因为我无法修补命名空间来更改名称。
这能做到吗?如何?
我正在使用 k8s kustomize 设置图像并创建秘密文件
$(cd ./k8s/overlays/prod && kustomize edit set image gcr.io/PROJECT_ID/image:1.0)
这有效!
现在我尝试使用 来做kubectl kustomize同样的事情而不做cd . ./k8s/overlays/prod
是否可以将 Kustomize 插件内置到 kubectl 中?
与 kubectl相同,kustomize edit add secret而不执行cd进入目录?
Can you please help me figure out why kubectl apply fails?
When I try to run kubectl apply -k k8s/overlays/dev it fails with error message "error: rawResources failed to read Resources: Load from path ../../base failed: '../../base' must be a file"
But if I run kustomize build k8s/overlays/dev it works fine.
folder structure
|____k8s
| |____overlays
| | |____dev
| | | |____kustomization.yaml
| |____base
| | |____deployment.yaml
| | |____kustomization.yaml
Run Code Online (Sandbox Code Playgroud)
k8s/base/deployment.yaml
|____k8s
| |____overlays
| | |____dev
| | …Run Code Online (Sandbox Code Playgroud) 我在尝试使用 kustomize 来替换列表中项目的内容时遇到困难。
我的自定义文件
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- resource.yaml
patches:
- patch.yaml
Run Code Online (Sandbox Code Playgroud)
我的 patch.yaml 文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-service
spec:
template:
spec:
initContainers:
- name: web-service-migration
env:
- name: PG_DATABASE
value: web-pgdb
Run Code Online (Sandbox Code Playgroud)
我的资源.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-service
spec:
template:
spec:
initContainers:
- name: web-service-migration
env:
- name: PG_DATABASE
valueFrom:
secretKeyRef:
name: web-pgdb
key: database
Run Code Online (Sandbox Code Playgroud)
自定义构建返回
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-service
spec:
template:
spec:
initContainers:
- env:
- name: PG_DATABASE
value: …Run Code Online (Sandbox Code Playgroud)