Kubernetes 定義相互依賴的環(huán)境變量

2022-06-13 13:52 更新

定義相互依賴的環(huán)境變量

本頁展示了如何為 Kubernetes Pod 中的容器定義相互依賴的環(huán)境變量。

在開始之前

你必須擁有一個(gè) Kubernetes 的集群,同時(shí)你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個(gè)節(jié)點(diǎn)的集群上運(yùn)行本教程,且這些節(jié)點(diǎn)不作為控制平面主機(jī)。 如果你還沒有集群,你可以通過 Minikube 構(gòu)建一個(gè)你自己的集群,或者你可以使用下面任意一個(gè) Kubernetes 工具構(gòu)建:

為容器定義相互依賴的環(huán)境變量 

當(dāng)創(chuàng)建一個(gè) Pod 時(shí),你可以為運(yùn)行在 Pod 中的容器設(shè)置相互依賴的環(huán)境變量。 設(shè)置相互依賴的環(huán)境變量,你就可以在配置清單文件的 ?env ?的 ?value ?中使用 $(VAR_NAME)。

在本練習(xí)中,你會(huì)創(chuàng)建一個(gè)單容器的 Pod。 此 Pod 的配置文件定義了一個(gè)已定義常用用法的相互依賴的環(huán)境變量。 下面是 Pod 的配置清單:

apiVersion: v1
kind: Pod
metadata:
  name: dependent-envars-demo
spec:
  containers:
    - name: dependent-envars-demo
      args:
        - while true; do echo -en '\n'; printf UNCHANGED_REFERENCE=$UNCHANGED_REFERENCE'\n'; printf SERVICE_ADDRESS=$SERVICE_ADDRESS'\n';printf ESCAPED_REFERENCE=$ESCAPED_REFERENCE'\n'; sleep 30; done;
      command:
        - sh
        - -c
      image: busybox:1.28
      env:
        - name: SERVICE_PORT
          value: "80"
        - name: SERVICE_IP
          value: "172.17.0.1"
        - name: UNCHANGED_REFERENCE
          value: "$(PROTOCOL)://$(SERVICE_IP):$(SERVICE_PORT)"
        - name: PROTOCOL
          value: "https"
        - name: SERVICE_ADDRESS
          value: "$(PROTOCOL)://$(SERVICE_IP):$(SERVICE_PORT)"
        - name: ESCAPED_REFERENCE
          value: "$(PROTOCOL)://$(SERVICE_IP):$(SERVICE_PORT)"
  1. 依據(jù)清單創(chuàng)建 Pod:
  2. kubectl apply -f https://k8s.io/examples/pods/inject/dependent-envars.yaml
    pod/dependent-envars-demo created
    
  3. 列出運(yùn)行的 Pod:
    kubectl get pods dependent-envars-demo
    NAME                      READY     STATUS    RESTARTS   AGE
    dependent-envars-demo     1/1       Running   0          9s
  4. 檢查 Pod 中運(yùn)行容器的日志:
    kubectl logs pod/dependent-envars-demo
    UNCHANGED_REFERENCE=$(PROTOCOL)://172.17.0.1:80
    SERVICE_ADDRESS=https://172.17.0.1:80
    ESCAPED_REFERENCE=$(PROTOCOL)://172.17.0.1:80

如上所示,你已經(jīng)定義了 ?SERVICE_ADDRESS ?的正確依賴引用, ?UNCHANGED_REFERENCE ?的錯(cuò)誤依賴引用, 并跳過了 ?ESCAPED_REFERENCE ?的依賴引用。

如果環(huán)境變量被引用時(shí)已事先定義,則引用可以正確解析, 比如 ?SERVICE_ADDRESS ?的例子。

當(dāng)環(huán)境變量未定義或僅包含部分變量時(shí),未定義的變量會(huì)被當(dāng)做普通字符串對(duì)待, 比如 ?UNCHANGED_REFERENCE ?的例子。 注意,解析不正確的環(huán)境變量通常不會(huì)阻止容器啟動(dòng)。

?$(VAR_NAME)? 這樣的語法可以用兩個(gè) ?$? 轉(zhuǎn)義,既:?$$(VAR_NAME)?。 無論引用的變量是否定義,轉(zhuǎn)義的引用永遠(yuǎn)不會(huì)展開。 這一點(diǎn)可以從上面 ?ESCAPED_REFERENCE ?的例子得到印證。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)