我可以在 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 可以通过模板实现这一点。