在kubernetes中创建一个可以运行gnu屏幕的窗体
问题描述:
我创建一个长寿的跳转来运行在我的kubernetes集群中。它为家庭文件夹使用EBS卷,保存我的代码的重要副本,并使我快速访问常规行为。问题是我无法使用GNU screen
来创建类似的长期会话。在kubernetes中创建一个可以运行gnu屏幕的窗体
这里是我的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
,并尝试建立一个屏幕:
[email protected]:~# screen -S asdf
Cannot open your terminal '' - please check.
我可以这样做:
[email protected]:~# script /dev/null
Script started, file is /dev/null
# bash
[email protected]:~# screen -S asdf
# now inside of the screen
而且,这里是我如何连接到波德:
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
。
但我不希望这个跳箱实例的所有用户都必须运行脚本并切换回bash。如何创建已正确配置为screen
的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'吗? – IanAuld