Kubernetes 為容器設(shè)置啟動時要執(zhí)行的命令和參數(shù)

2022-06-13 10:29 更新

為容器設(shè)置啟動時要執(zhí)行的命令和參數(shù)

本頁將展示如何為 Pod 中容器設(shè)置啟動時要執(zhí)行的命令及其參數(shù)。

在開始之前

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

要獲知版本信息,請輸入 ?kubectl version?。

創(chuàng)建 Pod 時設(shè)置命令及參數(shù) 

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

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

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

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

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 文件創(chuàng)建一個 Pod:
  2. kubectl apply -f https://k8s.io/examples/pods/commands.yaml
    
  3. 獲取正在運行的 Pods:
    kubectl get pods
    

    查詢結(jié)果顯示在 command-demo 這個 Pod 下運行的容器已經(jīng)啟動完成。

  4. 如果要獲取容器啟動時執(zhí)行命令的輸出結(jié)果,可以通過 Pod 的日志進行查看:
    kubectl logs command-demo
    

    日志中顯示了 HOSTNAME 與 KUBERNETES_PORT 這兩個環(huán)境變量的值:

    command-demo
    tcp://10.3.240.1:443

使用環(huán)境變量來設(shè)置參數(shù)

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

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

這意味著你可以將那些用來設(shè)置環(huán)境變量的方法應(yīng)用于設(shè)置命令的參數(shù),其中包括了 ?ConfigMaps ?與 ?Secrets?。

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

在 Shell 來執(zhí)行命令

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

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


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號