使用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 …
我想知道是否可以从私有 GitHub 存储库中的kustomize获取资源,我已经尝试过类似的操作但没有成功
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- git@github.com:gituser/kustomize.git/kustomize/main/nginx.yaml
- ssh://github.com/gituser/kustomize.git/kustomize/main/nginx.yaml
Run Code Online (Sandbox Code Playgroud)
错误
Error: accumulating resources: accumulation err='accumulating resources from 'ssh://github.com/diego1277/kustomize.git//kustomize/main/nginx.yaml': evalsymlink failure on '/Users/diego/Desktop/estudo/kustomize/see/base/ssh:/github.com/diego1277/kustomize.git/kustomize/main/nginx.yaml' : lstat /Users/diego/Desktop/estudo/kustomize/see/base/ssh:: no such file or directory': evalsymlink failure on '/private/var/folders/qq/mk6t7dpd5435qm78_zsfdjvm0000gp/T/kustomize-056937086/kustomize/main/nginx.yaml' : lstat /private/var/folders/qq/mk6t7dpd5435qm78_zsfdjvm0000gp/T/kustomize-056937086/kustomize: no such file or directory
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) 我正在使用 kustomize 将清单通过管道传输到新 k8s 集群 (v1.17.2) 上的 kubectl。这包括 CRD,但其他对象无法找到它们。例如:
unable to recognize "STDIN": no matches for kind "Certificate" in version "cert-manager.io/v1alpha2"
unable to recognize "STDIN": no matches for kind "IngressRoute" in version "traefik.containo.us/v1alpha1"
Run Code Online (Sandbox Code Playgroud)
CRD 在resources我的 kubectl 部分中定义,它们显示在我通过管道传输到 kubectl 的输出中,并且我确信这种将所有内容放入一个文件的方法在我上次执行此操作时有效。
如果我先应用 CRD,然后单独应用主清单,那么一切都会顺利进行。我可以同时做所有这些吗?如果是这样,我做错了什么?如果没有,为什么它之前有效?
谁能指出我问题可能出在哪里?
CRD 定义示例:
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: ingressroutetcps.traefik.containo.us
spec:
group: traefik.containo.us
names:
kind: IngressRouteTCP
plural: ingressroutetcps
singular: ingressroutetcp
scope: Namespaced
version: v1alpha1
Run Code Online (Sandbox Code Playgroud) 在我的kustomization.yaml我有:
...\nsecretGenerator:\n - name: db-env\n behavior: create\n envs:\n - my.env\npatchesStrategicMerge:\n - app.yaml\nRun Code Online (Sandbox Code Playgroud)\n然后在我的app.yaml(补丁)中我有:
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: app-deployment\nspec:\n template:\n spec:\n containers:\n - name: server\n envFrom:\n - secretRef:\n name: db-env\nRun Code Online (Sandbox Code Playgroud)\n当我尝试通过构建这个时,kustomize build k8s/development我退出了:
apiVersion: apps/v1\nkind: Deployment\n...\n spec:\n containers:\n - envFrom:\n - secretRef:\n name: db-env\n name: server\nRun Code Online (Sandbox Code Playgroud)\n什么时候应该是:
\n - envFrom:\n - secretRef:\n name: db-env-4g95hhmhfc\nRun Code Online (Sandbox Code Playgroud)\n如何让secretGenerator名称哈希也适用patchesStrategicMerge?
或者,将一些环境变量注入到特定覆盖的部署中的正确方法是什么?
\n这是为了发展。
\n我的文件结构是这样的:
\n\xe2\x9d\xaf …Run Code Online (Sandbox Code Playgroud) 我在下面给出的文件夹结构中有一个资源 yaml 文件
根据
---- 首先.yaml
主要的
---- kustomization.yaml
在 kustomization.yaml 中,我将 first.yaml 称为
资源:
- ../base/first.yaml
但是当我应用 kubectl apply -f kustomizatio.yaml 时出现错误
accumulating resources: accumulating resources from '../base/first.yaml': security; file '../base/first.yaml' is not in or below '../base'
Run Code Online (Sandbox Code Playgroud)
如何从文件夹库调用first.yaml资源到主文件夹中的kustomization?
我有一个像这样的 StatefulSet:
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: myns
name: myapp
spec:
replicas: 3
template:
spec:
containers:
- name: mycontainer
image: ...
...
env:
- name: MY_ENV1
value: "1"
Run Code Online (Sandbox Code Playgroud)
现在我想通过 Kustomize 添加第二个环境变量,因为它仅在开发环境中使用。我做了这样的事情:
namespace: myns
resources:
...
patches:
- patch: |-
- op: add
path: "/spec/template/spec/containers/0/env/-"
value:
- name: MY_ENV2
value: "2"
target:
kind: StatefulSet
namespace: myns
name: myapp
Run Code Online (Sandbox Code Playgroud)
问题是它不起作用。如果我运行,kustomize build我看不到这个附加变量(我看到其他变体)。
谁能帮助我了解如何实施它?
我正在使用 Kustomize 来管理同一集群的多个变体。我正在使用nameSuffix选项为我的所有资源添加后缀:
nameSuffix: -mysfx
Run Code Online (Sandbox Code Playgroud)
我的问题是一切正常,但仅将此后缀添加到一个服务资源会给我带来问题。我的问题是应用程序(Patroni)与必须调用的服务交互:
CLUSTER-NAME-config
Run Code Online (Sandbox Code Playgroud)
所以我想从nameSuffix. 我知道由于此功能的设计方式,这是不可能的。我在 StackOverflow 和网络上阅读了几篇文章。nameSuffix我知道我可以跳过对一类资源的使用。所以我尝试输入我的kustomization.yaml行:
configurations:
- kustomize-config/kustomize-config.yaml
Run Code Online (Sandbox Code Playgroud)
跳过所有服务资源。然后在文件中kustomize-config/kustomize-config.yaml
nameSuffix:
- path: metadata/name
apiVersion: v1
kind: Service
skip: true
Run Code Online (Sandbox Code Playgroud)
但这行不通。
有谁知道这个配置有什么问题吗?
然后假设我现在可以跳过nameSuffix仅使用服务资源,我还有其他两个服务要添加此后缀。我需要做什么才能添加nameSuffix到这两项服务而不是上面提到的服务?
如果对此有更好的解决方案,请告诉我。
我使用 kustomize 将 kube-prometheus 部署到多个环境。
kube-prometheus 是一个基础,每个环境都是一个覆盖层。假设我想将仪表板部署到覆盖层,这意味着我需要为每个覆盖层部署相同的 ConfigMap 和相同的补丁。
理想情况下,我希望避免更改基础,因为它是在我的存储库之外声明的,并保持干燥,而不是在各处复制相同的配置。
有办法实现这一点吗?
文件夹结构:
/base/
/kube-prometheus/
/overlays/
/qa/ <---
/dev/ <--- I want to share resources+patches between those
/staging/ <---
Run Code Online (Sandbox Code Playgroud)