我正在尝试使用 kustomize 重命名我的服务。
我收到以下错误:
Error: couldn't find target core_v1_Service|~X|~P|SERVICE_NAME|~S for json patch
Run Code Online (Sandbox Code Playgroud)
这是我的基本服务文件:
apiVersion: v1
kind: Service
metadata:
labels:
version: IMAGE_TAG
name: SERVICE_NAME
namespace: my-namespace
spec:
ports:
- name: http-service
port: 8080
protocol: TCP
targetPort: http-service
selector:
app.kubernetes.io/name:
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
sessionAffinity: None
type: ClusterIP
Run Code Online (Sandbox Code Playgroud)
这是我的 kustomization.yaml 文件,我在其中定义了 patchJson6902:
patchesJson6902:
#- target:
# group: apps
# version: v1
# kind: Deployment
# name: DEPLOYMENT_NAME
# path: patch_deployment.yaml
- target:
group: core
version: v1
kind: Service
name: SERVICE_NAME …Run Code Online (Sandbox Code Playgroud) 当使用限制允许的注册表的准入控制器操作 k8s 集群时,最好检查清单以验证它们仅引用此类映像。
是否有一种完善且正确的方法来处理 Kubernetes 清单流(例如 Kustomize 输出)并列出它引用的所有容器映像?包括所有嵌入的Deployments、StatefulSets、 s、CRD等?JobPodTemplate
我开始写自己的文章,然后意识到这一定是一个已解决的问题。kustomize有images:变压器来重写图像,但它似乎无法列出变压器检查的候选者。肯定有什么东西吧?
例如,如果我有kustomization.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- "https://github.com/prometheus-operator/kube-prometheus"
Run Code Online (Sandbox Code Playgroud)
我希望能够运行一些getimages过滤器,以便
kustomize build | getimages
Run Code Online (Sandbox Code Playgroud)
返回与这个 hacky shell 管道示例相同的列表:
$ kustomize build|grep 'image:' | awk '$2 != "" { print $2}' | sort -u
grafana/grafana:8.4.6
jimmidyson/configmap-reload:v0.5.0
k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.4.2
k8s.gcr.io/prometheus-adapter/prometheus-adapter:v0.9.1
quay.io/brancz/kube-rbac-proxy:v0.12.0
quay.io/prometheus/alertmanager:v0.24.0
quay.io/prometheus/blackbox-exporter:v0.20.0
quay.io/prometheus/node-exporter:v1.3.1
quay.io/prometheus-operator/prometheus-operator:v0.55.1
quay.io/prometheus/prometheus:v2.34.0
Run Code Online (Sandbox Code Playgroud)
...但是以一种稳健且正确的方式,与所说的 hacky shell 命令不同。
我期望像kubeval或那样的工具kustomize …
有没有办法扩展 kustomize 图像转换器以将更多键识别为图像说明符?就像nameReference变压器对namePrefix和nameSuffix变压器所做的那样。
Kustomizeimages:转换器对于 k8s 清单中的图像替换和注册表重命名非常有用。
但它只支持嵌入的类型PodTemplate,也许还有一些硬编码的类型。不使用的 CRDPodTemplate不会被处理,尽管它们很常见。示例包括kube-prometheus Prometheus和AlertManager资源以及opentelemetry-operator OpenTelemetryCollector资源。
因此,您必须维护一堆混乱的战略合并或 json 补丁,以使用受信任的注册表等为此类图像添加前缀。
这是目前问题的一个例子。假设我必须部署以mytrusted.registry变压器images:列表为前缀的所有内容。为了简洁起见,我将使用一个虚拟图像来替换所有匹配的图像MATCHED,因此我不必将它们全部列出:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- "https://github.com/prometheus-operator/kube-prometheus"
images:
- name: "(.*)"
newName: "MATCHED"
newTag: "fake"
Run Code Online (Sandbox Code Playgroud)
您可能期望结果中唯一的图像是“MATCHED:fake”,但实际上:
$ kustomize build | grep 'image: .*' | sort | uniq -c
12 image: MATCHED:fake
1 image: quay.io/prometheus/alertmanager:v0.24.0
1 image: …Run Code Online (Sandbox Code Playgroud) 我有一组在一个环境中工作的 kubernetes 配置文件。我希望部署到另一个环境中,在那里我需要向所有Deployment配置添加一个 imagePullSecrets 条目。
我可以:
regcred-1.yaml:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: deployment-1
spec:
template:
spec:
imagePullSecrets:
- name: regcred
Run Code Online (Sandbox Code Playgroud)
kustomization.yaml:
bases:
- ../base
patchesStrategicMerge:
- regcred-1.yaml
Run Code Online (Sandbox Code Playgroud)
这只会修补deployment-1。
有没有办法将补丁应用到所有部署?
鉴于以下 kustomize 补丁:
apiVersion: apps/v1
kind: Deployment
metadata:
name: flux
spec:
template:
spec:
containers:
- name: some-name
args:
- --some-key=some-value
...
- --git-url=https://user:${PASSWORD}@domain.de
Run Code Online (Sandbox Code Playgroud)
我想使用kubectl apply -k并以某种方式传递一个值${PASSWORD},我可以从我的构建脚本中设置该值。
我工作的唯一解决方案迄今被替换${PASSWORD}用sed,但我宁愿一个kustomize解决方案。
kustomize的文档提供了一个很好的单行代码来比较两种不同的覆盖...
diff \
<(kustomize build $OVERLAYS/staging) \
<(kustomize build $OVERLAYS/production)
Run Code Online (Sandbox Code Playgroud)
有没有办法做同样的事情,但针对特定 kubernetes 命名空间中运行的内容以及磁盘上定义的覆盖层?
更具体地说,知道kubectl apply -k .不实际做会做什么?using--dry-run只是说吐出对象列表而不是真正的差异。
在我目前的工作中,我们正在运行多个 k8s 集群,并允许多个团队在集群中运行服务。
每个 service/git 存储库都会有 kustomize 文件,其中包含所有补丁的列表。在 CD 阶段,我们将此 kustomize 转换为给定环境/区域的 k8s 清单(服务、配置映射、部署),并运行 kubectl apply 命令在我们的 kubernetes 中运行。
现在,我们开始研究 Helm 图表,而不是将 Kustomize 转换为 k8s 清单,计划是为通用 Helm 图表生成 value.yaml 文件并使用 git sha 部署 Helm 版本。因此,关于这种方法的任何想法或建议,从 k8s 清单迁移到基于 helm 图表版本的部署是否有任何优势。当团队计划进行蓝/绿或金丝雀部署时,Helm Chart 有什么优势吗?
目标是:
任何线索将不胜感激。
我尝试在 Mac 中安装 kustomize v3.2.1,但在执行这些步骤时出现以下错误。
wget "https://github.com/kubernetes-sigs/kustomize/archive/refs/tags/kustomize/v3.2.1.tar.gz" 解压源代码
tar xzf xxxxx.tar.gz cd xxxxxx make install
输出:
go install /cmd/kustomize
make: go: No such file or directory
make: *** [install] Error 1
Run Code Online (Sandbox Code Playgroud)
如何安装这个版本而不出现任何问题?谢谢!
根据示例https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/replacements/
可以像这样针对特定的数组项spec.template.spec.containers.[name=hello].env.[name=SECRET_TOKEN].value
但是我们如何定位每个数组项呢?
尝试-如下,但它仅替换最后一次出现的情况。
fieldPaths:
- spec.http.-.route.0.destination.host
Run Code Online (Sandbox Code Playgroud)
这是我的 kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: ef
images:
- name: gateway-image
resources:
- configmap.yaml
- virtual-services.yaml
replacements:
- source:
kind: ConfigMap
fieldPath: data.HOST
targets:
- select:
kind: VirtualService
fieldPaths:
- spec.http.-.route.0.destination.host
options:
create: true
Run Code Online (Sandbox Code Playgroud)
这是我的目标 yaml service-entries.yaml - 我预计 HOST 在这两个地方都会被替换。
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: v-rules-1
spec:
hosts:
- EXTERNAL-HOST
gateways:
- istio-system/default-gateway
- mesh
http: # note these are ordered - first rule matching wins …Run Code Online (Sandbox Code Playgroud) 我有一个 NextJS 应用程序,需要安装 .env 文件。我通常通过提供 configMap 来做到这一点:
kind: ConfigMap
apiVersion: v1
metadata:
name: frontend-configmap
namespace: default
data:
.env: |-
NEXT_PUBLIC_API_URL=http://my.domain.com
API_URL=http://my.domain.com
Run Code Online (Sandbox Code Playgroud)
但如何使用 Kustomize 做到这一点呢?
我尝试使用envs,但如何获取里面的值?
configMapGenerator:
- name: frontend-configmap
envs:
- .env
Run Code Online (Sandbox Code Playgroud)
先感谢您