K8s任務 為容器設定啟動時要執行的命令和引數

2022-09-07 12:18:09 字數 1888 閱讀 7211

建立 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

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

env:

- name: message

value: "hello world"

command: ["/bin/echo"]

args: ["$(message)"]

這意味著你可以將那些用來設定環境變數的方法應用於設定命令的引數,其中包括了 configmaps 與 secrets。

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

有時候,你需要在 shell 指令碼中執行命令。 例如,你要執行的命令可能由多個命令組合而成,或者它就是乙個 shell 指令碼。 這時,就可以通過如下方式在 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 映象中自帶的命令及其引數會被忽略。 容器啟動時只會執行配置中設定的命令,並使用配置中設定的引數作為命令的引數。

下面是一些例子:

k8s 容器鉤子

有兩個鉤子暴露在容器中 poststart 這個鉤子在建立容器之後立即執行。但是,不能保證鉤子會在容器入口點之前執行。沒有引數傳遞給處理程式。kind deployment metadata name testlifecycle labels spec replicas 1 selector mat...

容器編排工具k8s

如何實踐 1 搜尋kubunetes online kubernetes playground katacoda pod k8s最小排程單位 docker pause 二個容器 deployments 維持pod一定數量 service 解決deploytemnets內部之間的乙個負載均衡 dns解...

k8s的 容器映象

my registry.example.com 5000 example web example v1.0.1 2.綠色部分 registry 埠 3.紫色部分 repository 名字 4.紅色部分 image 名字 5.棕色部分 image 標籤 更新映象 如果您期望每次啟動 pod 時,都強...