在Kubernetes ConfigMap中指定一个`int`值?

5

有没有办法在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

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

my-service.port=9513
2个回答

3
很抱歉,您不能在 spec.template.spec.containers[0].ports[0].containerPort 中使用configmap值,因为它是用于配置值的。可以在此指南中指定以下选项:
- 作为环境变量 - 作为命令行配置标志(使用环境变量) - 使用卷插件
如果您想要使端口可配置以供部署/pod 使用,则可以考虑使用 Helm。Helm 允许您在清单/定义中使用Go模板,然后您可以在调用时覆盖它们。
MySQL Chart 模板为例,您可以将端口设置为配置选项,如下所示:
ports:
  - name: mysql
  containerPort: {{ default 3306 .Values.mysqlPort }}

然后,从这里开始,在您的values.yaml文件中设置此值。


0
我遇到了一个类似的问题,与将端口号设置为环境变量有关。 我有两个服务,其中ServiceB应该连接到ServiceA。 错误是这样的:
/opt/service/config.yml有一个错误: *serviceAPort的值类型不正确;它的类型是字符串,但期望是整数。 我的config.yml文件中包含了以下内容: - serviceAPort: "${SERVICEA_PORT!'9091'}"
Kubernetes以"协议:IP:端口"的格式创建了一个名为SERVICEA_PORT的环境变量。这无法被ServiceB解析为整数。
在ServiceB的pod中使用'printenv'后,我意识到了这一点,并用以下配置进行了覆盖。
env:
  - name : SERVICEA_PORT
    value: 9091

基本上,这是由于 k8s 开箱即用创建的环境变量引起的冲突。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接