文件解讀 K8S中的Pod和容器配置(一)

2021-09-19 22:32:07 字數 2743 閱讀 8127

如何給執行在kubernetes(k8s) pod中的容器定義環境變數、命令列和引數?

必須有乙個kubernets集群,和乙個能和集群溝通的kubectl命令列工具。如果你還沒有集群,你可以用minikube建立乙個集群。

當你建立了乙個pod,你可以給你執行在pod中的容器設定環境變數。設定環境變數包含兩個欄位env和envfrom在配置檔案中。

在本次練習中,建了乙個執行了乙個container的pod。這個配置檔案給這個pod定義了乙個名為demo_greeting值為」hello from the environment」的環境變數。下面是這個pod的配置檔案:

apiversion: v1

kind: pod

metadata:

name: envar-demo

labels:

purpose: demonstrate-envars

spec:

containers:

– name: envar-demo-container

image: gcr.io/google-samples/node-hello:1.0

env:

– name: demo_greeting

value: 「hello from the environment」

kubectl create -f

kubectl get pods -l purpose=demonstrate-envars

kubectl exec -it envar-demo — /bin/bash

root@envar-demo:/# printenv

輸出類似於下面:

node_version=4.4.2

example_service_port_8080_tcp_addr=10.3.245.237

hostname=envar-demo

…demo_greeting=hello from the environment

5.退出shell,輸入exit。

必須有乙個kubernets集群,和乙個能和集群溝通的kubectl命令列工具。如果你還沒有集群,你可以用minikube建立乙個集群。

新建pod的時候定義命令列和引數

建立pod的時候,可以為執行在裡面的容器定義乙個命令列和引數。定義乙個命令列,在配置檔案中包含command欄位。給這個命令列定義引數包含乙個args欄位在配置檔案中。當pod建立之後該命令列和引數是不可以修改的。

如果在配置檔案中定義了命令列和引數,將覆蓋容器映象提供的預設引數。如果定義了引數但是沒有定義命令列,那麼引數將和預設的命令列一起使用。更多詳細資訊可以參考commands and capabilities。

在本次練習中,建立乙個執行乙個容器的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」]

1.建立pod基於yaml配置檔案:

kubectl create -f

2.獲取執行中的pod列表:

kubectl get pods

輸出顯示在command-demo pod中執行的容器已完成。

3.檢視命令列在容器裡面的輸出,可以檢視pod的日誌:

kubectl logs command-demo

輸出展示了hostname,kubernetes_root的環境變數的值:

command-demo

tcp:

使用環境變數定義命令列引數

在前面的例子中,直接通過字串定義了命令列引數。作為直接用字串替代方法,你可以用環境變數定義引數:

env:

– name: message

value: 「hello world」

command: [「/bin/echo」]

args: [「$(message)」]

這意味著你可以使用可用於定義環境變數的任何技術來定義pod的引數,包括configmaps 和 secrets。

注意:環境變數呈現在括號中,」$(var)」。這是在command或args欄位中擴充套件變數所必須的。

在shell中執行命令列

在一些情況,你需要在shell中執行你的命令。例如:你的命令可能是由多個命令組合在一起,或者是乙個shell指令碼。要在shell中執行你的命令,可以這樣包裝它:

command: [「/bin/sh」]

args: [「-c」, 「while true; do echo hello; sleep 10;done」]

本文轉移k8s技術社群-文件解讀 | k8s中的pod和容器配置(一)

文件解讀 K8S中的Pod和容器配置(二)

接上篇,如何給執行在kubernetes pod中的容器分配cpu和ram資源?給執行在kubernetes pod中的容器分配cpu和ram資源 開始之前 必須有乙個kubernetes集群,和乙個能和集群溝通的kubectl命令列工具。如果你還沒有集群,你可以用minikube建立乙個集群。給容...

k8s排程 原理 K8s排程原理和Pod生命週期

1 k8s排程原理 pod只存在某乙個物理節點上,可以執行多個container 2 pod的生命週期 暫停pod,可以暫停deployment kubectl get depolyment kubectl scale replicas 0 deployment 刪除pod。刪除之後,狀態變成suc...

k8s發布pod並設定容器引數

1 k8s部署es的時候需要初始化很多linux的核心引數。但是檔案系統掛載到pod容器中就會變成read only,難以進行操作實現需求。所以需要給pod privileged許可權,然後在容器的初始化指令碼或 中去修改sysctl引數。建立pod deployment daemonset等物件時...