2017-10-05 63 views
0

我创建一个长寿的跳转来运行在我的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?

+0

你使用的是'kubectl exec -it'吗? – IanAuld

回答

1

我试过用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它的工作原理。

+0

有趣的是,我们需要运行Ubuntu。至少我知道它可以完成 - 现在的问题是我们如何让Ubuntu发挥出色呢? – xrl

+0

它也可以与ubuntu一起工作,比较ubuntu docker文件和你的docker文件。它可能需要我想的一些环境变量。 – sfgroups

+0

我在Ubuntu Dockerfile上层,看起来应该继承我需要的一切? – xrl

相关问题