如果能够在更高级别定义一种方法来确定一组 pod 应该在其上运行的一组节点,对我来说将会非常有用。
有没有办法使用 kustomize 以便我可以指定部署应具有哪些 nodeSelector?
根据官方文档,我应该能够使用一些漂亮的kustomization语法轻松覆盖我的 docker 图像的标签和名称。我试图重现这一点。
在我的deployment.yaml我有以下内容:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
service: my-app
name: my-app
spec:
strategy:
type: Recreate
template:
metadata:
labels:
service: my-app
spec:
imagePullSecrets:
- name: my-docker-secret
containers:
- name: my-app
image: the-my-app
imagePullPolicy: Always
ports:
- containerPort: 1234
restartPolicy: Always
Run Code Online (Sandbox Code Playgroud)
在我的kustomization.yaml我有以下内容:
bases:
- ../base
resources:
- deployment.yaml
namespace: my-namespace
images:
- name: the-my-app
- newName: my.docker.registry.com/my-project/my-app
newTag: test
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时:
kubectl apply -k my-kustomization-dir
Run Code Online (Sandbox Code Playgroud)
并等待部署启动,然后再做
kubectl describe pod/my-app-xxxxxxxxx-xxxxx
Run Code Online (Sandbox Code Playgroud)
事件如下所示:
Events:
Type …Run Code Online (Sandbox Code Playgroud) 到目前为止我有2个目录:
aws/
k8s/
里面aws/是.tf描述 VPC、网络、安全组、IAM 角色、EKS 集群、EKS 节点组和一些 EFS 挂载的文件。这些都使用AWS提供商,状态存储在S3中。
然后,k8s/我使用 Kubernetes 提供程序并在我创建的 EKS 集群内创建 Kubernetes 资源。此状态存储在同一 S3 存储桶中的不同状态文件中。
我无法弄清楚如何将 EFS 作为持久卷挂载到我的 Pod。
我找到了描述使用 efs-provisioner pod 来执行此操作的文档。请参阅如何将 EFS 与 EKS 结合使用?。
在最近的 EKS 文档中,他们现在说使用Amazon EFS CSI Driver。第一步是创建kubectl apply以下文件。
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../base
images:
- name: amazon/aws-efs-csi-driver
newName: 602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/aws-efs-csi-driver
newTag: v0.2.0
- name: quay.io/k8scsi/livenessprobe
newName: 602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/csi-liveness-probe
newTag: v1.1.0
- name: quay.io/k8scsi/csi-node-driver-registrar
newName: 602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/csi-node-driver-registrar
newTag: v1.1.0
Run Code Online (Sandbox Code Playgroud)
有谁知道我将如何在 …
amazon-web-services kubernetes amazon-efs amazon-eks 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 来做到这一点吗?
我是 Kustomize 的新手,我想知道:
我尝试将 nameSuffix 设置为特定的 yaml(种类:RedisInstance),但没有成功。
自定义.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: community-organization-uat-product
bases:
- ../../../../common/base/custom/gcp
- ../../../../common/base/custom/gcp/organization
commonAnnotations:
cnrm.cloud.google.com/managed: "true"
cnrm.cloud.google.com/project-id: community-organization-uat-product
patchesStrategicMerge:
- 1-cXXXXX-patch.yaml
- 3-mXXXXX-patch.yaml
- 4-mXXXXX-patch.yaml
- 5-cXXXXX-patch.yaml
- 6-mXXXXX-patch.yaml
- 7-memorystore-patch.yaml
Run Code Online (Sandbox Code Playgroud)
这是我的补丁:
7-内存存储-patch.yaml
apiVersion: redis.cnrm.cloud.google.com/v1beta1
kind: RedisInstance
metadata:
name: memorystore-redis
spec:
displayName: memorystore-redis-organization-community-uat
memorySizeGb: 2
redisVersion: REDIS_5_0
reservedIpRange: 10.1XXXXX/29
Run Code Online (Sandbox Code Playgroud)
内存存储.yaml
apiVersion: redis.cnrm.cloud.google.com/v1beta1
kind: RedisInstance
metadata:
name: memorystore-redis
spec:
displayName: Value defined by Kustomize
region: XXXX
connectMode: PRIVATE_SERVICE_ACCESS
locationId: usXXXX
memorySizeGb: Value …Run Code Online (Sandbox Code Playgroud) 出于 CI/CD 的目的,该项目正在维护 2 个 kustomization.yaml 文件
要运行 kustomize build,当前目录中需要一个名为“kustomization.yaml”的文件。如果项目要使用 kustomization_rollback.yaml 而不是 kustomization.yaml,这怎么可能?kustomize 是否接受文件名作为参数?文档对此没有指定任何内容。
我有一个生成的配置图
configMapGenerator:
- name: template-vars
envs:
- templateVars.env
Run Code Online (Sandbox Code Playgroud)
并想使用其中包含的值之一
ROUTE_HOST=somewhere.else.org
Run Code Online (Sandbox Code Playgroud)
作为变量
vars:
- name: ROUTE_HOST
objref:
kind: ConfigMap
name: template-vars
apiVersion: v1
fieldref:
fieldpath: data.ROUTE_HOST
Run Code Online (Sandbox Code Playgroud)
在我的 OCP 路线中
apiVersion: route.openshift.io/v1
kind: Route
spec:
host: $(ROUTE_HOST)
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我知道我可以用环境变量做一些几乎相同的事情:
env:
- name: ROUTE_HOST
valueFrom:
configMapKeyRef:
name: template-vars
key: ROUTE_HOST
Run Code Online (Sandbox Code Playgroud) 我有这个 ingress.yaml 基本配置:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
labels:
sia: aza
app: asap-ingress-internal
name: asap-ingress-internal
annotations:
kubernetes.io/ingress.class: "nginx-external"
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
rules:
- host: the-host-value
http:
paths:
- path: /asap-srv-template/(.*)
backend:
serviceName: asap-srv-template
servicePort: 8080
Run Code Online (Sandbox Code Playgroud)
并且只想替换 spoec.rules.host 值(并保持所有 http.paths 原样。
所以我创建了一个这样的 env-var.yaml :
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: asap-ingress-internal
spec:
rules:
- host: the.real.hostname
Run Code Online (Sandbox Code Playgroud)
但结果如下:
$ kustomize build
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx-external
nginx.ingress.kubernetes.io/use-regex: "true"
labels:
app: asap-ingress-internal
env: dev
sia: aza
name: asap-ingress-internal
namespace: aza-72461-dev …Run Code Online (Sandbox Code Playgroud) 目前我这样做:
configMapGenerator:
- name: sql-config-map
files:
- "someDirectory/one.sql"
- "someDirectory/two.sql"
- "someDirectory/three.sql"
Run Code Online (Sandbox Code Playgroud)
我想做某事。像这样:
configMapGenerator:
- name: sql-config-map
files:
- "someDirectory/*.sql"
Run Code Online (Sandbox Code Playgroud)
这有可能吗?
将 Kubernetes 清单部署到集群时的一个常见要求是为容器名称添加镜像允许镜像的可信注册表前缀。通常与准入控制器一起使用。
有没有一种明智的方法可以使用 Kustomize 来执行此操作,而不必在kustomization.yaml 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)
如果我想为其引用的所有图像添加前缀,mytrusted.registry/我需要将其附加到我的kustomization.yaml:
images:
- name: grafana/grafana
newName: mytrusted.registry/grafana/grafana
- name: jimmidyson/configmap-reload
newName: mytrusted.registry/jimmidyson/configmap-reload
- name: k8s.gcr.io/kube-state-metrics/kube-state-metrics
newName: mytrusted.registry/k8s.gcr.io/kube-state-metrics/kube-state-metrics
- name: k8s.gcr.io/prometheus-adapter/prometheus-adapter
newName: mytrusted.registry/k8s.gcr.io/prometheus-adapter/prometheus-adapter
- name: quay.io/brancz/kube-rbac-proxy
newName: mytrusted.registry/quay.io/brancz/kube-rbac-proxy
- name: quay.io/prometheus/alertmanager
newName: mytrusted.registry/quay.io/prometheus/alertmanager
- name: quay.io/prometheus/blackbox-exporter
newName: mytrusted.registry/quay.io/prometheus/blackbox-exporter
- name: quay.io/prometheus/node-exporter
newName: mytrusted.registry/quay.io/prometheus/node-exporter
- name: quay.io/prometheus-operator/prometheus-operator
newName: mytrusted.registry/quay.io/prometheus-operator/prometheus-operator
- name: quay.io/prometheus/prometheus
newName: mytrusted.registry/quay.io/prometheus/prometheus
Run Code Online (Sandbox Code Playgroud)
这是我用这个腐烂的、脆弱的怪物生成的(如果你的容器是通过哈希指定的,或者你的注册表前缀中有一个端口,它就会崩溃):
kustomize build | \ …Run Code Online (Sandbox Code Playgroud) kubernetes ×10
kustomize ×10
kubectl ×2
openshift ×2
amazon-efs ×1
amazon-eks ×1
configmap ×1
docker ×1
tags ×1
yaml ×1