web-dev-qa-db-ja.com

KubernetesクラスターのdockerコンテナーにSSHで接続するにはどうすればよいですか?

私はGoogle CloudプラットフォームとDockerにかなり慣れていないので、ノードのクラスターをセットアップし、リポジトリをコピーしてClojure REPLをパブリックポートで実行するDockerfileを作成しました。私のIDEから、そして私のコードで遊んで、素晴らしい!

それはREPLはおそらくSSHを介してトンネリングする必要がありますが、ここで私の問題が始まります。SSHへの適切な場所を見つけることができませんDockerが実行するリポジトリに変更を加えるためREPL on:

  • 公開されたIPはREPLサービス(正しいkubernetes用語?)を公開するだけで、SSHを許可しません。
  • クラスターマスターエンドポイントも、Adding or removing SSH keys for all of the instances in your project part ここ

SSH経由でソースファイルを編集したいのですが、Dockerコードリポジトリにアクセスする必要があります。どうすればいいのかわかりません。

これはアプリケーションをデプロイするための典型的な方法ではないことを理解しているため、複数のノードを修正されたdockerコードベースで動作させることができるかどうかさえわかりません(ノードは何らかの形でJVMを共有しますか?).

具体的に私の質問は、ドッカーコンテナーにSSHで接続してコードベースにアクセスする方法です。

37
bbs

DockerがREPL= on

クラスターを作成するとき、Googleクラウドプロジェクトで多数のノードVMをプロビジョニングします。 https://console.cloud.google.com/compute/instances を見ると、それらが表示され、それぞれに外部IPアドレスがあり、sshすることができます。次に、ローカルポートをポッドIPアドレスに転送するノードVMへのsshトンネルを作成します。

Clojureアプリの複数のレプリカを実行している場合、アプリを更新するには各レプリカに個別に接続する必要があることに注意してください。

5
Robert Bailey

Kubernetes 1.5.0のコマンド形式:

kubectl exec -it <POD NAME> -c <CONTAINER NAME> bash
59

インスタンスのリスト:

gcloud compute instances list

インスタンスへのSSH:

gcloud compute ssh <instance_name> --zone=<instance_zone>

インスタンスで、実行中のプロセスとそのコンテナIDをリストします。

Sudo docker ps -a

コンテナに接続します:

Sudo docker exec -it <container_id> bash  
20
Yoshua Wuyts

Execコマンドを使用してコンテナに接続する最良の方法。

コンテナーを実行しているdockerに接続する

docker exec -it YOUR_CONTAINER_ID bash

コンテナを実行しているKubernetesに接続します。

kubectl exec -it YOUR_CONTAINER/POD_NAME bash

指定されたネームスペースでコンテナを実行しているKubernetesに接続します。

kubectl exec -it YOUR_CONTAINER/POD_NAME -n YOUR_NAMESPACE bash
15
Nitin

ポッドが現在のネームスペースにある場合、ポッドのリストを取得します。

kubectl get pods

ポッドを選びます。 bashセッションを実行します:

kubectl exec -it [POD_NAME] -- /bin/bash

または、別のネームスペースで必要なポッドを検索します。

kubectl get pods --all-namespaces

ポッドを選択して、bashセッションを実行します

kubectl exec -it [POD_NAME] --namespace [NAMESPACE] -- /bin/bash
6
John McGehee