Kubernetes(k8s)為容器設置啟動時要執行的命令和參數


創建 Pod 時設置命令及參數

創建 Pod 時,可以為其下的容器設置啟動時要執行的命令及其參數。如果要設置命令,就填寫在配置文件的 command 字段下,如果要設置命令的參數,就填寫在配置文件的 args 字段下。一旦 Pod 創建完成,該命令及其參數就無法再進行更改了。
如果在配置文件中設置了容器啟動時要執行的命令及其參數,那么容器鏡像中自帶的命令與參數將會被覆蓋而不再執行。如果配置文件中只是設置了參數,卻沒有設置其對應的命令,那么容器鏡像中自帶的命令會使用該新參數作為其執行時的參數。

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

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

# cat commands.yaml
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

# kubectl apply -f commands.yaml
# kubectl get pods
# 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 來執行命令

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

說明事項

Docker 與 Kubernetes 中對應的字段名稱

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

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


免責聲明!

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



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