[英]Kubernetes pod yaml: source command does not work
在以下 pod yaml 中,我無法讓source
命令正常工作。 最初我在echo starting
和echo done
之間的args
下插入了命令,現在我嘗試{.lifecycle.postStart}
無濟於事。
apiVersion: v1
kind: Pod
metadata:
name: mubu62
labels:
app: mubu62
spec:
containers:
- name: mubu621
image: dockreg:5000/mubu6:v6
imagePullPolicy: Always
ports:
- containerPort: 5021
command: ["/bin/sh","-c"]
args:
- echo starting;
echo CONT1=\"mubu621\" >> /etc/environment;
touch /mubu621;
sed -i 's/#Port 22/Port 5021/g' /etc/ssh/sshd_config;
sleep 3650d;
echo done;
lifecycle:
postStart:
exec:
command: ["/bin/bash","-c","source /etc/environment"]
- name: mubu622
image: dockreg:5000/mubu6:v6
imagePullPolicy: Always
ports:
- containerPort: 5022
imagePullSecrets:
- name: regcred
nodeName: spring
restartPolicy: Always
Kubectl apply
不會拋出任何錯誤,但echo $CONT1
返回 nada! mubu6
是 ubuntu 修改后的圖像。
The reason I am doing this, is because when I ssh
from another pod in this pod (mubu621)
, Kubernetes environment variables set through env
are not seen in the ssh
session.
任何幫助將非常感激!
將 env 變量移動到 pod 規范的env
部分:
apiVersion: v1
kind: Pod
metadata:
name: mubu62
labels:
app: mubu62
spec:
containers:
- name: mubu621
image: dockreg:5000/mubu6:v6
imagePullPolicy: Always
ports:
- containerPort: 5021
command: ["/bin/sh","-c"]
env:
- name: CONT1
value: mubu621
正如已經指出的評論之一 - 您的source
命令可能有效,但僅在執行它的上下文中。 如果您希望將此應用於其他命令 - 使用容器規范的env
字段。 考慮這個使用busybox的簡約示例:
apiVersion: v1
kind: Pod
metadata:
name: busybox
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox
command: ["/bin/sh", "-ec", "sleep 1000"]
env:
- name: TEST_ENV
value: "test_val"
有了這個 - 當你在 pod 中運行env
命令時 - 你會看到TEST_ENV
按預期顯示:
$ kubectl exec -it busybox-6d467f94db-sj9nz env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=busybox-6d467f94db-sj9nz
TERM=xterm
TEST_ENV=test_val
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT=tcp://10.96.0.1:443
HOME=/root
在Kubernetes 文檔中閱讀有關 pod 中環境變量的更多信息
在嘗試了set-environment-variable-automatically-on-ssh-login下的建議之后,有效的是替換
echo CONT1=\"mubu621\" >> /etc/environment;
和
echo CONT1=\"mubu621\" >> /root/.bashrc;
並刪除
lifecycle:
postStart:
exec:
command: ["/bin/bash","-c","source /etc/environment"]
那無論如何都沒有用。
從container mubu622
SSH 到container mubu621
,我現在可以使用mubu621
output 成功執行echo $CONT1
,而無需首先獲取/root/.bashrc
的source
,最初是在/etc/environment
中寫入env_variable
的情況。
In summary: when using a bash shell
in kubernetes containers
, you can SSH
from another container and echo
variables written in /root/.bashrc
without first sourcing. 這非常有用,例如在multi-container pods
的情況下,因此您可以知道當前登錄的容器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.