docker - Kubernetes:管理环境配置

标签 docker environment-variables yaml kubernetes

管理在 pod 中运行的环境配置容器的推荐方法是使用 configmap . See the docs here .

这很好,尽管我们有需要大量环境变量的容器,但将来只会扩展。使用规定的configmap这种方法变得笨重且难以管理。

例如,一个简单的部署文件变得庞大:

apiVersion: v1
kind: Service
metadata:
  name: my-app-api
  labels:
    name: my-app-api
    environment: staging
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
      name: http
  selector:
    name: my-app-api
    environment: staging
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-app-api
spec:
  replicas: 2
  revisionHistoryLimit: 10
  template:
    metadata:
      labels:
        name: my-app-api
        environment: staging
    spec:
      containers:
      - name: my-app-api
        imagePullPolicy: Always
        image: myapp/my-app-api:latest
        ports:
            - containerPort: 80
        env:
            - name: API_HOST
              value: XXXXXXXXXXX
            - name: API_ENV
              value: XXXXXXXXXXX
            - name: API_DEBUG
              value: XXXXXXXXXXX
            - name: API_KEY
              value: XXXXXXXXXXX
            - name: EJ_API_ENDPOINT
              value: XXXXXXXXXXX
            - name: WEB_HOST
              value: XXXXXXXXXXX
            - name: AWS_ACCESS_KEY
              value: XXXXXXXXXXX
            - name: AWS_SECRET_KEY
              value: XXXXXXXXXXX
            - name: CDN
              value: XXXXXXXXXXX
            - name: STRIPE_KEY
              value: XXXXXXXXXXX
            - name: STRIPE_SECRET
              value: XXXXXXXXXXX
            - name: DB_HOST
              value: XXXXXXXXXXX
            - name: MYSQL_ROOT_PASSWORD
              value: XXXXXXXXXXX
            - name: MYSQL_DATABASE
              value: XXXXXXXXXXX
            - name: REDIS_HOST
              value: XXXXXXXXXXX
      imagePullSecrets:
        - name: my-registry-key 

是否有其他易于注入(inject)的中央环境配置?

更新

这是为 1.5 提出的。虽然没有被删减,看起来它会被包含在 1.6 中.手指交叉...

最佳答案

有一个proposal目前针对 1.5,旨在简化此操作。正如建议的那样,您将能够一次性从 ConfigMap 中提取所有变量,而无需单独拼出每个变量。

如果实现,它将允许您执行以下操作:

警告:这实际上还不起作用!

配置图:

apiVersion: v1
data:
  space-ships: 1
  ship-type: battle-cruiser
  weapon: laser-cannon
kind: ConfigMap
metadata:
  name: space-config

部署:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: space-simulator
spec:
  template:
    metadata:
      labels:
        app: space-simulator
    spec:
      containers:
      - name: space-simulator
        image: foo/space-simulator
      # This is the magic piece that would allow you to avoid all that boilerplate!
      - envFrom:
        configMap: space-config

关于docker - Kubernetes:管理环境配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39610242/

相关文章:

windows - 为什么批处理文件中名称中带有数字的 env 变量的解释不正确?

java - Jetty 应用程序中的系统环境变量

jquery - 静态文件丢失

ansible - 使用另一个变量作为键YAML访问字典

python - Yaml 结束 ("...") 即使 yaml.explicit_end=False 也总是被转储

docker - 如何等待Docker容器被删除

python - Docker没有在KeyboardInterrupt上保存文件

apache-spark - 在 Spark 集群模式下设置环境变量

shell - 如果我们运行具有.sh文件的dockerfile,则 “docker build”和 “docker run”之间的区别

docker - Kubernetes 使用 flannel 创建容器时卡在 "ContainerCreating"-state