我可以在 YAML 中的任意位置使用 ConfigMap 值吗?
Can I consume a ConfigMap value in arbitrary places in YAML?
在 Azure Kubernetes 服务中,我的目标是使用公共 YAML 文件配置暂存和生产 k8 集群,并使用从 ConfigMap 参数化的关键值和环境变量。
我可以使用 valueFrom 轻松设置容器环境变量,但我想在 YAML 文件的其他区域使用 ConfigMap 值,例如:
暂存配置-map.yaml:
kind: ConfigMap
apiVersion: v1
metadata:
name: base-config
data:
ENVIRONMENT_NAME: staging
...
产品配置-map.yaml:
kind: ConfigMap
apiVersion: v1
metadata:
name: base-config
data:
ENVIRONMENT_NAME: prod
...
普通集群-config.yaml:
apiVersion: v1
kind: Service
metadata:
name: my-amazing-microservice
annotations:
service.beta.kubernetes.io/azure-dns-label-name: "my-amazing-microservice-$ENVIRONMENT_NAME"
spec:
type: LoadBalancer
ports:
- targetPort: 5000
name: port5000
port: 5000
protocol: TCP
selector:
app: my-amazing-microservice
---
...
注意对 $ENVIRONMENT_NAME 的引用,这是我想从 ConfigMap 中插入内容的地方。
我可以这样做吗,这样我就不必为登台和生产维护重复的清单?
不,你不能使用 vanilla k8 的清单。 ConfigMaps 只是在容器启动时挂载到容器中的资源。作为环境变量或作为文件。您无法在部署时访问配置映射。
我建议研究 helm 可以通过模板实现这一点。
在 Azure Kubernetes 服务中,我的目标是使用公共 YAML 文件配置暂存和生产 k8 集群,并使用从 ConfigMap 参数化的关键值和环境变量。
我可以使用 valueFrom 轻松设置容器环境变量,但我想在 YAML 文件的其他区域使用 ConfigMap 值,例如:
暂存配置-map.yaml:
kind: ConfigMap
apiVersion: v1
metadata:
name: base-config
data:
ENVIRONMENT_NAME: staging
...
产品配置-map.yaml:
kind: ConfigMap
apiVersion: v1
metadata:
name: base-config
data:
ENVIRONMENT_NAME: prod
...
普通集群-config.yaml:
apiVersion: v1
kind: Service
metadata:
name: my-amazing-microservice
annotations:
service.beta.kubernetes.io/azure-dns-label-name: "my-amazing-microservice-$ENVIRONMENT_NAME"
spec:
type: LoadBalancer
ports:
- targetPort: 5000
name: port5000
port: 5000
protocol: TCP
selector:
app: my-amazing-microservice
---
...
注意对 $ENVIRONMENT_NAME 的引用,这是我想从 ConfigMap 中插入内容的地方。
我可以这样做吗,这样我就不必为登台和生产维护重复的清单?
不,你不能使用 vanilla k8 的清单。 ConfigMaps 只是在容器启动时挂载到容器中的资源。作为环境变量或作为文件。您无法在部署时访问配置映射。
我建议研究 helm 可以通过模板实现这一点。