2017-10-05 10 views
0

私はkubernetesクラスタ内で実行するために長寿命のジャンプを作成しています。ホームフォルダ用のEBSボリュームを使用し、コードの重要なコピーを保持し、日常的な動作に素早くアクセスできます。問題は、GNU screenを使用して同様に長寿命のセッションを作成できないことです。gnu画面を実行できるkubernetesでポッドを作成する

は、ここに私の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 

そして、ここで私はそれを展開方法は次のとおりです。

[email protected]:~# screen -S asdf 
Cannot open your terminal '' - please check. 

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]:~# 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

私はこれをうまく使いこなしましたが、うんざんの画像を確認する必要があります。

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ファイルとドッ​​カーファイルを比較してください。それは私が考えるいくつかの環境変数を必要とするかもしれません。 – sfgroups

+0

私はUbuntu Dockerファイルの上にレイヤーを置いて、必要なものすべてを継承する必要がありますか? – xrl

関連する問題