Expose named ports through environment variables in kubernetes

3/1/2018

I need to expose two of my named ports via environment variables. This is my kubernetes deployment yaml file:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: flink-taskmanager1255
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: flink
        component: taskmanager
    spec:
      volumes:
      - name: task-pv-storage
        persistentVolumeClaim:
         claimName: task-pv-claim
      containers:
      - name: taskmanager
        image: myrepo:9555/flink
        args:
        - taskmanager
        resources:
          limits:
            cpu: "1"
            memory: "2Gi"
          requests:
            cpu: "0.5"
            memory: "1Gi"
        ports:
        - containerPort: 5021
          name: data
        - containerPort: 5022
          name: rpc
        - containerPort: 5125
          name: query
        livenessProbe:
          tcpSocket:
            port: data
          initialDelaySeconds: 35
          periodSeconds: 10
        volumeMounts:
        - mountPath: "/usr/share/flink/"
          name: task-pv-storage
        env:
        - name: JOB_MANAGER_RPC_ADDRESS
          value: flink-jobmanager
        - name: FLINK_CONFIG_PATH
          value: /usr/share/flink/flink-conf.yaml
        - name: FLINK_LOG_DIR
          value: /usr/share/flink/logs/
        - name: TM_RPC_PORT
            valueFrom:
              resourceFieldRef:
                containerName: taskmanager
                fieldPath: ports.rpc
        - name: TM_DATA_PORT
            valueFrom:
              resourceFieldRef:
                containerName: taskmanager
                fieldPath: ports.data

I get this error:

error: error converting YAML to JSON: yaml: line 51: mapping values are not allowed in this context

I believe the way I am trying to access my named ports is wrong, but I have no clue what the right way is. What is the right way to access the named ports?

-- James Isaac
kubernetes

1 Answer

3/1/2018

for starters try to rearrange your yaml like this (one indent less)

- name: TM_RPC_PORT
  valueFrom:
    resourceFieldRef:
      containerName: taskmanager
      fieldPath: ports.rpc
-- Radek 'Goblin' Pieczonka
Source: StackOverflow