D7 kubernetes 容器執行命令與引數

Hello_worlds發表於2024-08-23

》 在pod配置中,command和args欄位用於定義容器的命令和引數

1、command

》 command欄位用於定義容器啟動時要執行的命令,並覆蓋映象中預設的啟動命令。它的值是一個字串列表型別,其中第一個元素視為命令名稱,後續元素視為命令的引數

  • command配置例項如下
[root@k8s-master k8s]# cat pod-examplel1.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: pod-examplel1
  name: pod-examplel1
  namespace: default
spec:
  containers:
  - image: uhub.service.ucloud.cn/librarys/centos:7
    name: test
    command: ["echo", "hello world"]
  • 上述配置中,容器啟動時執行 echo hello world 命令
[root@k8s-master k8s]# kubectl logs pod-examplel1
hello world
  • 檢視pod時會發現pod在不斷地重啟
[root@k8s-master k8s]# kubectl get pod  pod-examplel1
NAME            READY   STATUS             RESTARTS      AGE
pod-examplel1   0/1     CrashLoopBackOff   4 (82s ago)   2m57s
  • 第四列RESTARTS記錄了重啟次數。這是正常現象,因為 centos7映象是一個系統映象,預設情況下,前臺沒有執行的程序,容器在啟動後則會退出。因此,需要應用程式被放在前臺啟動,或者執行一個無限迴圈shell語句,以保持容器執行而不退出,例如執行一個無線迴圈
    command: ["/bin/bash", "-c", "while true; do sleep 1;done"]

/bin/bash 是shell直譯器的可執行檔案,-c是一個選型,用於指定要執行的命令。while true; do sleep 1;done是執行的具體命令

2、args

》 args欄位用於指定容器啟動時的命令引數。它的值是一個字串列表型別,每個元素被視為command的一個引數

cat pod-examplel2.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: pod-examplel2
  name: pod-examplel2
  namespace: default
spec:
  containers:
  - image: uhub.service.ucloud.cn/librarys/centos:7
    name: test
    command: ["echo"]
    args: ["hello world"]

》 上述配置中,容器啟動時執行echo命令,而該命令後跟的引數是透過args欄位傳遞的,最終輸出為 hello world

  • 建立pod並檢視日誌
[root@k8s-master k8s]# kubectl apply -f pod-examplel2.yaml
pod/pod-examplel2 unchanged
[root@k8s-master k8s]# kubectl  logs  pod-examplel2
hello world

相關文章