Bash 在kubernetes中创建一个可以运行gnu屏幕的pod
我正在创建一个长寿跳跃,在我的kubernetes集群内跑步。它使用EBS卷作为主文件夹,保存代码的重要副本,并使我能够快速访问日常行为。问题是我不能使用GNUBash 在kubernetes中创建一个可以运行gnu屏幕的pod,bash,kubernetes,dockerfile,pty,Bash,Kubernetes,Dockerfile,Pty,我正在创建一个长寿跳跃,在我的kubernetes集群内跑步。它使用EBS卷作为主文件夹,保存代码的重要副本,并使我能够快速访问日常行为。问题是我不能使用GNUscreen来创建类似的长期会话 这是我的Dockerfile: FROM ubuntu:zesty ENV KUBECTL_VERSION=v1.7.6 RUN apt-get update && \ apt-get install -y \ htop vim sysstat \ bu
screen
来创建类似的长期会话
这是我的Dockerfile:
FROM ubuntu:zesty
ENV KUBECTL_VERSION=v1.7.6
RUN apt-get update && \
apt-get install -y \
htop vim sysstat \
build-essential make \
ruby ruby-dev rake \
postgresql-client libpq-dev \
curl wget \
python python-pip && \
pip install awscli && \
gem install --no-rdoc --no-ri bundler
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/$KUBECTL_VERSION/bin/linux/amd64/kubectl && \
chmod a+x kubectl && \
mv kubectl /usr/local/bin/kubectl
ADD dotfiles /root-dotfiles
ADD code /root-code
ADD docker-entrypoint.sh /docker-entrypoint.sh
下面是我如何部署它的:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: doit
purpse: jumpbox
name: doit
namespace: default
spec:
replicas: 1
revisionHistoryLimit: 2
selector:
matchLabels:
app: doit
purpose: jumpbox
template:
metadata:
labels:
app: doit
purpose: jumpbox
spec:
containers:
- image: 123.dkr.ecr.eu-central-1.amazonaws.com/doit:latest
imagePullPolicy: Always
name: doit
command: ["sleep", "infinity"]
workingDir: /root
env:
- name: TERM
value: xterm
volumeMounts:
- mountPath: /root
subPath: root-homedir
name: doit-home
volumes:
- name: doit-home
persistentVolumeClaim:
claimName: doit-home
restartPolicy: Always
securityContext: {}
terminationGracePeriodSeconds: 1
但是当我kubectl exec
进入容器并尝试创建屏幕时:
root@doit-2561276907-kl2h6:~# screen -S asdf
Cannot open your terminal '' - please check.
我可以通过以下方式解决此问题:
root@doit-2561276907-kl2h6:~# script /dev/null
Script started, file is /dev/null
# bash
root@doit-2561276907-kl2h6:~# screen -S asdf
# now inside of the screen
此外,以下是我连接到Pod的方式:
function doit {
doit_pods=$(kubectl get pods -l 'app==doit' -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
kubectl exec -it $doit_pods bash
}
因此,在引擎盖下,我正在做kubectl exec-it
但我不希望这个jumpbox实例的所有用户都必须运行脚本并切换回bash。如何创建已经为
屏幕正确配置的Pod?我用centos映像进行了尝试,它可以工作,需要检查ubuntu映像
kubectl run -it screentest --image=centos -- bash
kubectl exec -it screentest-cbd49447f-286wq -- bash
yum -y install screen
screen
在ubuntu上测试过,我也能用
kubectl run -it ubuntuest --image=ubuntu -- bash
apt-get update -qq && apt-get install screen -y
screen
还试用了kubectl exec-it ubuntuest-78df75fbb-9sk6f--bash
它可以工作。您是否使用kubectl exec-it
?是的,我正在使用它。请看“以下是我如何连接到Pod”一节。这是一个帮助函数,用于查找一个pod并针对它运行exec-It。至少我知道这是可以做到的——现在的问题是我们如何让Ubuntu玩得更好?它与Ubuntu一起工作。同样,比较Ubuntu docker文件和你的docker文件。我想它可能需要一些环境变量。我在Ubuntu Dockerfile的顶层,似乎我应该继承我需要的一切?