在Kubernetes ConfigMap中指定`int`值?

时间:2017-03-22 20:39:15

标签: kubernetes

有没有办法在ConfigMap中指定int值?当我尝试指定端口号时,我收到以下错误。

error: error validating "my-deployment.yml": error validating data: expected type int, for field spec.template.spec.containers[0].ports[0].containerPort, got string; if you choose to ignore these errors, turn validation off with --validate=false

以下是我正在使用的示例配置文件:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-service
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: poweramp-email-service
    spec:
      containers:
      - name: poweramp-email-service
        env:
          - name: SERVICE_PORT_NUM
            valueFrom:
              configMapKeyRef:
                name: stg-config
                key: poweramp-email-service.port
        image: nginx
        ports:
        - containerPort: my-service.port

这是我使用命令生成ConfigMap的简单stg.properties文件:kubectl create configmap stg-config --from-file stg.properties

my-service.port=9513

2 个答案:

答案 0 :(得分:1)

您无法在spec.template.spec.containers[0].ports[0].containerPort中使用配置图值,我担心这是配置值。

您可以使用的选项(在this guide中指定)是

  • 作为环境变量
  • 作为命令行配置标志(使用环境变量)
  • 使用卷插件。

如果要为部署/窗格配置端口,可以考虑使用Helm。 Helm允许您在清单/定义中使用Go模板,然后您可以在调用时覆盖它们。

拿这个MySQL Chart template as an example,您可以在这里将端口设置为配置选项,如下所示:

ports:
  - name: mysql
  containerPort: {{ default 3306 .Values.mysqlPort }}

然后从那里,在values.yaml

中设置此值

答案 1 :(得分:0)

我在将端口号设置为env变量时遇到了类似的问题。 我有两个服务,其中ServiceB应该连接到ServiceA。 错误是

/opt/service/config.yml出现错误:   * serviceAPort;处的值类型不正确;类型为:字符串,应为:整数 我的config.yml包含这样的内容 -serviceAPort:“ $ {SERVICEA_PORT!'9091'}”

Kubernetes正在以具有Protocol:IP:port的格式创建环境变量SERVICEA_PORT。 ServiceB无法将此解析为int

我在ServiceB pod中使用'printenv'并通过以下配置覆盖了它

env:
  - name : SERVICEA_PORT
    value: 9091

基本上,这是一个冲突,因为k8s开箱即用创建了env变量。