docker和K8s對應參數


創建 Pod 時設置命令及參數

創建 Pod 時,可以為其下的容器設置啟動時要執行的命令及其參數。如果要設置命令,就填寫在配置文件的 command 字段下,如果要設置命令的參數,就填寫在配置文件的 args 字段下。一旦 Pod 創建完成,該命令及其參數就無法再進行更改了。

如果在配置文件中設置了容器啟動時要執行的命令及其參數,那么容器鏡像中自帶的命令與參數將會被覆蓋而不再執行。如果配置文件中只是設置了參數,卻沒有設置其對應的命令,那么容器鏡像中自帶的命令會使用該新參數作為其執行時的參數。

說明: 在有些容器運行時中, command 字段對應  entrypoint,請參閱下面的  說明事項

本示例中,將創建一個只包含單個容器的 Pod。在 Pod 配置文件中設置了一個命令與兩個參數:

apiVersion: v1
kind: Pod
metadata:
  name: command-demo
  labels:
    purpose: demonstrate-command
spec:
  containers:
  - name: command-demo-container
    image: debian
    command: ["printenv"]
    args: ["HOSTNAME", "KUBERNETES_PORT"]
  restartPolicy: OnFailure
  1. 基於 YAML 文件創建一個 Pod:

    kubectl apply -f https://k8s.io/examples/pods/commands.yaml
    
  1. 獲取正在運行的 Pods:

    kubectl get pods
    

    查詢結果顯示在 command-demo 這個 Pod 下運行的容器已經啟動完成。

  1. 如果要獲取容器啟動時執行命令的輸出結果,可以通過 Pod 的日志進行查看:

    kubectl logs command-demo
    

    日志中顯示了 HOSTNAME 與 KUBERNETES_PORT 這兩個環境變量的值:

    command-demo
    tcp://10.3.240.1:443
    

使用環境變量來設置參數

在上面的示例中,我們直接將一串字符作為命令的參數。除此之外,我們還可以將環境變量作為命令的參數。

env:
- name: MESSAGE
  value: "hello world"
command: ["/bin/echo"]
args: ["$(MESSAGE)"]

這意味着你可以將那些用來設置環境變量的方法應用於設置命令的參數,其中包括了 ConfigMaps 與 Secrets

說明: 環境變量需要加上括號,類似於  "$(VAR)"。這是在  command 或  args 字段使用變量的格式要求。

 

在 Shell 來執行命令 

有時候,你需要在 Shell 腳本中運行命令。 例如,你要執行的命令可能由多個命令組合而成,或者它就是一個 Shell 腳本。 這時,就可以通過如下方式在 Shell 中執行命令:

command: ["/bin/sh"]
args: ["-c", "while true; do echo hello; sleep 10;done"]

 

說明事項 

下表給出了 Docker 與 Kubernetes 中對應的字段名稱。

描述 Docker 字段名稱 Kubernetes 字段名稱
容器執行的命令 Entrypoint command
傳給命令的參數 Cmd args

如果要覆蓋默認的 Entrypoint 與 Cmd,需要遵循如下規則:

  • 如果在容器配置中沒有設置 command 或者 args,那么將使用 Docker 鏡像自帶的命令及其參數。

  • 如果在容器配置中只設置了 command 但是沒有設置 args,那么容器啟動時只會執行該命令, Docker 鏡像中自帶的命令及其參數會被忽略。

  • 如果在容器配置中只設置了 args,那么 Docker 鏡像中自帶的命令會使用該新參數作為其執行時的參數。

  • 如果在容器配置中同時設置了 command 與 args,那么 Docker 鏡像中自帶的命令及其參數會被忽略。 容器啟動時只會執行配置中設置的命令,並使用配置中設置的參數作為命令的參數。

下面是一些例子:

鏡像 Entrypoint 鏡像 Cmd 容器 command 容器 args 命令執行
[/ep-1] [foo bar] <not set> <not set> [ep-1 foo bar]
[/ep-1] [foo bar] [/ep-2] <not set> [ep-2]
[/ep-1] [foo bar] <not set> [zoo boo] [ep-1 zoo boo]
[/ep-1] [foo bar] [/ep-2] [zoo boo] [ep-2 zoo boo]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM