iT邦幫忙

2022 iThome 鐵人賽

DAY 13
1
DevOps

30天準備CKA考試系列 第 13

Day 13:Environment Variable

  • 分享至 

  • xImage
  •  

我們時常會使用環境變數來讓Pod區分當前的環境為Production或Stagging,以及使用環境變數來帶入連接資料庫的各種資訊,像是Host、User、Password等等。

設定環境變數的方法有很多種,可以使用Docker的方法(CLI、Docker Compose、Dockerfile),或是使用Linux的作法(export)等等。

那在使用Kubernetes時,要怎麼讓Container使用我們所設定的環境變數呢?

  • kubectl run --env:類似於Docker的作法,要調整時較為麻煩。

    kubectl run envar-demo --image gcr.io/google-samples/node-hello:1.0 --env DEMO_GREETING="Hello from the environment"  -l purpose=demonstrate-envars
    
  • YAML中設置env:在env中,以key-value形式設置環境變數。

    kind: Pod
    metadata:
      name: envar-demo
      labels:
        purpose: demonstrate-envars
    spec:
      containers:
      - name: envar-demo-container
        image: gcr.io/google-samples/node-hello:1.0
        env:
        - name: DEMO_GREETING
          value: "Hello from the environment"
        - name: DEMO_FAREWELL
          value: "Such a sweet sorrow"
    
  • ConfigMap & Secret:兩者很相似,但是Secret的值必須經過Base64編碼,這部分明天來詳談。

    apiVersion: v1
    kind: Pod
    metadata:
      name: envar-demo
      labels:
        purpose: demonstrate-envars
    spec:
      containers:
      - name: envar-demo-container
        image: gcr.io/google-samples/node-hello:1.0
        env:
          - name: DEMO_GREETING
            valueFrom:
              secretKeyRef:
                name: mysecret
                key: DEMO_GREETING
                optional: false # 此職為默認值,意思是"mysecret"
                                # 必須存在且包含"DEMO_GREETING"這個key
          - name: DEMO_FAREWELL
            valueFrom:
              configMapKeyRef:
                name: myconfigmap
                key: DEMO_FAREWELL
    
    
  • 直接將Pod的資訊當作環境變數:這樣如果事先無法確認會被部署到哪個Node、被分配什麼IP,就可以透過這種方式取得。

    apiVersion: v1
    kind: Pod
    metadata:
      name: envar-demo
      labels:
        purpose: demonstrate-envars
    spec:
      containers:
      - name: envar-demo-container
        image: gcr.io/google-samples/node-hello:1.0
        env:
    			- name: MY_NODE_NAME
            valueFrom:
              fieldRef:
                fieldPath: spec.nodeName
    

明天會來詳談ConfigMap與Secret~

參考資料

为容器设置环境变量

Secret

ConfigMap

通过环境变量将 Pod 信息呈现给容器


上一篇
Day 12:Logging & Monitoring
下一篇
Day 14:ConfigMap & Secret
系列文
30天準備CKA考試30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言