我正在使用 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) 我在下面给出的文件夹结构中有一个资源 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?
在以下场景中,我在 ../base/ 中定义了我的容器。
在这个 /dev/ 目录中,我想启动命名空间 dev 中的所有部署和状态集。
问题是我还想在 local-path-storage 命名空间中运行 local-path-storage CSI。kustomize 将覆盖它并在“dev”命名空间中创建它。
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: dev
bases:
- ../base
resources:
- local-path-storage.yaml
Run Code Online (Sandbox Code Playgroud)
如何仅撤销 local-path-storage.yaml 的命名空间覆盖?
如何使用 kustomize 在以下 cm 中修补“db.password”?
配置图:
apiVersion: v1
data:
dbp.conf: |-
{
"db_properties": {
"db.driver": "com.mysql.jdbc.Driver",
"db.password": "123456",
"db.user": "root"
}
}
kind: ConfigMap
metadata:
labels: {}
name: dbcm
Run Code Online (Sandbox Code Playgroud) 我有一个由 Pod 组成的环境,它根据一个名为 、 或 的环境变量来处理CONF_ENV其test目标stage环境prod。
Pod 内运行的应用程序跨环境具有相同的源代码,配置文件是根据CONF_ENV环境变量选择的。
我将其封装CONF_ENV在*.properties文件中只是因为稍后我可能需要添加更多环境变量,但我确保每个属性文件包含预期的CONF_ENV例如:
test.properites有CONF_ENV=test,prod.properties有CONF_ENV=prod, 等等...我很难使用 Kustomize 覆盖来完成这项工作,因为我想将 a 定义ConfigMap为同一覆盖内所有 Pod 的共享资源,例如test(每个 Pod 都在自己的目录中,需要时与其他内容一起)。
所以想法是:
\nbase/(共享)与 的定义Namespace,ConfigMap(以及潜在的其他共享资源base/pod1/定义 pod1 从共享中挑选ConfigMap(默认为test,但原则上可能不同)然后是叠加:
\noverlay/test …environment-variables kubernetes kubectl configmap kustomize
我想将base/foo.yaml应用于我的所有环境,它部分看起来像这样
Kubernetes:
deploymentPatches:
- patch: |-
- {"op": "add", "path": "/spec/template/spec/volumes/-", "value": {"name": "volume", "secret": {"secretName": "my-secret"}}}
- {"op": "add", "path": "/spec/template/spec/containers/0/volumeMounts/-", "value": {"mountPath": "/connections", "name": "volume"}}
Run Code Online (Sandbox Code Playgroud)
现在我还想添加特定于环境的补丁,因此运行eg后我的最终目标kubectl kustomize accept应该是
Kubernetes:
deploymentPatches:
- patch: |-
- {"op": "add", "path": "/spec/template/spec/volumes/-", "value": {"name": "volume", "secret": {"secretName": "my-secret"}}}
- {"op": "add", "path": "/spec/template/spec/containers/0/volumeMounts/-", "value": {"mountPath": "/connections", "name": "volume"}}
- {"op": "add", "path": "/spec/template/spec/containers/0/env/-", "value": {"name": "MY_ENVIRONMENT", "value": "accept"}}
Run Code Online (Sandbox Code Playgroud)
或者
Kubernetes:
deploymentPatches:
- patch: |-
- {"op": "add", "path": …Run Code Online (Sandbox Code Playgroud) 我们设置了 Traefik 作为入口控制器/CRD 和 ArgoCD。我们将 ArgoCD 安装到EKS 设置中,如Argo 入门指南中所述:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Run Code Online (Sandbox Code Playgroud)
现在,正如文档所述,正确配置 Traefik 的对象IngressRoute如下所示:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: argocd-server
namespace: argocd
spec:
entryPoints:
- websecure
routes:
- kind: Rule
match: Host(`argocd.tekton-argocd.de`)
priority: 10
services:
- name: argocd-server
port: 80
- kind: Rule
match: Host(`argocd.tekton-argocd.de`) && Headers(`Content-Type`, `application/grpc`)
priority: 11
services:
- name: argocd-server
port: 80
scheme: h2c
tls:
certResolver: default
Run Code Online (Sandbox Code Playgroud)
现在文档中有一个错误- …
我正在尝试在 Kustomize 中使用修补来修改 Kubernetes 资源,我想知道是否有一种巧妙的方法来更新列表中的每个项目。
这是我想要自定义的 yaml:
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
annotations:
name: validating-webhook-configuration
webhooks:
- admissionReviewVersions:
- v1
clientConfig:
service:
name: webhook-service
namespace: rabbitmq-system
path: /validate-rabbitmq-com-v1beta1-binding
- admissionReviewVersions:
- v1
clientConfig:
service:
name: webhook-service
namespace: rabbitmq-system
path: /validate-rabbitmq-com-v1beta1-exchange
- admissionReviewVersions:
- v1
clientConfig:
service:
name: webhook-service
namespace: rabbitmq-system
path: /validate-rabbitmq-com-v1beta1-federation
Run Code Online (Sandbox Code Playgroud)
这是我想要实现的最终效果(请参阅NEWVALUE):
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
annotations:
name: validating-webhook-configuration
webhooks:
- admissionReviewVersions:
- v1
clientConfig:
NEWVALUE: value
service:
name: webhook-service
namespace: rabbitmq-system
path: /validate-rabbitmq-com-v1beta1-binding
- admissionReviewVersions: …Run Code Online (Sandbox Code Playgroud) 我有一个基础对象(自定义资源),我需要多次使用不同的名称并添加(或更改)一个属性。所以我定义了一个基本 yaml 文件并在覆盖层中引用它kustomization.yaml。
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 base\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n| \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 base.ClusterOutput.yaml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 my-env\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\nRun Code Online (Sandbox Code Playgroud)\n现在我需要更新该metadata.name字段并添加一个可以通过补丁完成的属性kustomization.yaml
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 base\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n| \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 base.ClusterOutput.yaml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 my-env\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\nRun Code Online (Sandbox Code Playgroud)\n直到这里它都按预期工作,但在某些环境中我需要多个自定义资源实例,并且我不知道如何做到这一点。我尝试了多个补丁,但它们相互覆盖,最终得到一个具有最后一个补丁的对象。\n我不想编写多个基础对象,在某些环境中我只需要一个,并且除了名称之外它们是相等的无论如何,还有一个属性。\n有什么方法可以用 kustomize 来做到这一点吗?
\n有时,当我使用 helm 图表时,并非所有我想要修改的内容都可以与给定值一起使用。使用 kustomize 修改渲染的 Helm Chart 是否实用?
像这样:
chart -> helm template -> kustomize -> kubectl deploy