如何执行到K8s吊舱中,但从其外部使用bash_profile?

时间:2019-10-24 18:45:05

标签: bash kubernetes

我的.bash_profile有许多我经常使用的别名。但是,当我执行kubernetes窗格时,这些别名变得(无法理解)变得不可访问。当我说“ exec into”时,我的意思是:

kubectl exec -it [pod-name] -c [container-name] bash

有什么方法可以使我在执行后仍然可以使用bash配置文件吗?

1 个答案:

答案 0 :(得分:1)

您说过,这些只是别名。在这种情况下,只有在这种情况下,您才能使用bash_profile

将。ConfigMap保存在--from-env-file
kubectl create configmap bash-profile --from-env-file=.bash_profile

请记住,env文件中的每一行都必须采用VAR = VAL格式。

开头为#的行和空白行将被忽略。

然后可以将所有键值对作为容器环境变量加载:

apiVersion: v1
kind: Pod
metadata:
  name: bash-test-pod
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "env" ]
      envFrom:
      - configMapRef:
          name: bash-profile
  restartPolicy: Never

Populate a Volume with data stored in a ConfigMap

apiVersion: v1
kind: Pod
metadata:
  name: bash-test-pod
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "ls /etc/config/" ]
      volumeMounts:
      - name: config-volume
        mountPath: /root/.bash_profile
  volumes:
    - name: config-volume
      configMap:
        # Provide the name of the ConfigMap containing the files you want
        # to add to the container
        name: bash-profile
  restartPolicy: Never

@ Mark所提到的想法也应该可行。

如果您需要将kubectl cp .bash_profile <pod_name>:/root/放入特定的容器中,则可以添加选项-c, --container='': Container name. If omitted, the first container in the pod will be chosen