[英]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.