
⎈❏ Kubernetes用のターミナルおよびWebコンソール
= Kubebox [small]#^⎈❏^# Antonin Stefanutti https://github.com/astefanutti[@astefanutti] // Meta :description: Kubernetes用のターミナルおよびWebコンソール // Settings :idprefix: :idseparator: - :experimental: // Aliases ifdef::env-github[] :note-caption: ℹ️ :icon-check: ✔️ :icon-edit: ✏️ endif::[] ifndef::env-github[] :icons: font :icon-check: icon:check[] :icon-edit: icon:pencil[fw] endif::[] // URIs :uri-kubebox-download: https://github.com/astefanutti/kubebox/releases/download/v0.10.0 :uri-kubebox-twitter: https://twitter.com/kubebox :uri-kube-apiserver: https://kubernetes.io/docs/admin/kube-apiserver/ :uri-ingress-controllers: https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-controllers :uri-service-account: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ :uri-xterm-js: https://github.com/xtermjs/xterm.js :uri-cadvisor: https://github.com/google/cadvisor
{description}
// image::./docs/kubebox.png[kubebox, align="center"] ++++
++++=== 機能
KUBECONFIG環境変数または$HOME/.kube)例については<>セクションを参照し、更新情報についてはimage:https://img.shields.io/badge/%40kubebox-00ACEE.svg?&logo=twitter&colorA=555&logoColor=fff[link={uri-kubebox-twitter}]をフォローしてください。
== 実行
以下のオプションから、お好みと制約に応じてKubeboxを使用できます:
=== 実行可能ファイル
お使いのOS用のKubeboxスタンドアロン実行可能ファイルをダウンロード:
$ curl -Lo kubebox {uri-kubebox-download}/kubebox-linux && chmod +x kubebox
$ curl -Lo kubebox {uri-kubebox-download}/kubebox-linux-arm && chmod +x kubebox
$ curl -Lo kubebox {uri-kubebox-download}/kubebox-macos && chmod +x kubebox
その後実行:
$ ./kubebox
=== サーバー
KubeboxはKubernetesクラスターでホストされるサービスとして提供できます。ターミナルエミュレーションは{uri-xterm-js}[Xterm.js]によって提供され、KubernetesマスターAPIとの通信はサーバーによってプロキシされます。
Kubernetesクラスターにサーバーをデプロイするには、以下を実行:
$ kubectl apply -f https://raw.github.com/astefanutti/kubebox/master/kubernetes.yaml
サーバーをシャットダウンしてリソースをクリーンアップするには、以下を実行:
$ kubectl delete namespace kubebox
Ingressリソースを機能させるには、クラスターでIngressコントローラーが実行されている必要があります。詳細は{uri-ingress-controllers}[Ingressコントローラー]を参照してください。
または、OpenShiftクラスターにサーバーをデプロイするには、以下を実行:
$ oc new-app -f https://raw.github.com/astefanutti/kubebox/master/openshift.yaml
=== Kubectl
Kubeboxをkubectlを使用して_クラスター内_クライアントとして実行できます。例:
$ kubectl run kubebox -it --rm --env="TERM=xterm" --image=astefanutti/kubebox --restart=Never
RBACが有効な場合は、--serviceaccountオプションを使用し、十分な権限を持つサービスアカウントを参照する必要があります。
=== Docker
Dockerを使用してKubeboxを実行できます。例:
$ docker run -it --rm astefanutti/kubebox
ホームディレクトリをマウントして、Kubeboxが~/.kube/configファイルを利用できるようにするとよいでしょう。例:
$ docker run -it --rm -v ~/.kube/:/home/node/.kube/:ro astefanutti/kubebox
=== オンライン
Kubeboxはオンラインで https://astefanutti.github.com/kubebox から利用できます。このアドレスがAPIサーバーによるCORSの許可されたオリジンと一致する必要があることに注意してください。これは{uri-kube-apiserver}[Kubernetes APIサーバーCLI]を使用して実現できます。例:
$ kube-apiserver --cors-allowed-origins .*
== 認証
ローカル環境とのシームレスな統合を提供するために、kubectlがサポートするさまざまな認証戦略をサポートしようとしています。Kubeboxの使用方法に応じて、サポートされている認証戦略は以下の通りです:
[cols="<,^,^,^",options="header"] |=== ||実行可能ファイル|Docker|オンライン
|OpenID Connect |{icon-check} |{icon-check} |{icon-check}脚注:[WebバージョンではカスタムIDP証明書認証局ファイルはサポートされていません。]
|Amazon EKS |{icon-check} | |
|Digital Ocean |{icon-check} | |
|Google Kubernetes Engine |{icon-check} | | |===
使用しているモードがサポートされていない場合は、認証トークン/証明書を手動で更新し、それに応じて_kubeconfig_ファイルを更新できます。
== cAdvisor
Kubeboxはリソース使用量メトリクスを取得するために{uri-cadvisor}[cAdvisor]に依存しています。バージョン0.8.0より前では、Kubeboxは_Kubelet_に組み込まれているcAdvisorエンドポイントにアクセスしていました。しかし、これらのエンドポイントは非推奨となり、最終的には削除される予定です(https://github.com/kubernetes/kubernetes/issues/68522[kubernetes#68522]で議論されています)。
バージョン0.8.0以降、KubeboxはcAdvisorがhttps://kubernetes.io/docs/concepts/workloads/controllers/daemonset/[DaemonSet]としてデプロイされることを期待しています。これは以下のようにして実現できます:
$ kubectl apply -f https://raw.githubusercontent.com/astefanutti/kubebox/master/cadvisor.yaml
提供されているcadvisor.yamlファイルを使用することをお勧めします。これはKubeboxで動作することがテストされています。ただし、{uri-cadvisor}[cAdvisor]プロジェクトのDaemonSetの例でも問題なく動作するはずです。cAdvisorコンテナは各ノードのコンテナランタイムにアクセスできるように、_特権_セキュリティコンテキストで実行する必要があることに注意してください。
cadvisor.yamlファイルで宣言されているcAdvisorコンテナ引数に追加されたデフォルトの--storage_durationオプションと--housekeeping_intervalオプションを変更して、ストレージ移動ウィンドウの期間(デフォルト5m0s)とサンプリング期間(デフォルト10s)をそれぞれ調整できます。クラスターのコンテナランタイムソケットが通常の規則に従っていない場合、そのパスを指定する必要があるかもしれません。
== ホットキー
[cols="1v,2v"] |=== |キーバインド |説明
2+^.e|一般
|kbd:[l], kbd:[Ctrl+l] |ログイン
|kbd:[n] |現在のネームスペースを変更
|[kbd:[Shift]+]kbd:[←], kbd:[→] + [kbd:[Alt]+]kbd:[1], ..., kbd:[9] |画面のナビゲーション + (execターミナル内ではkbd:[Shift]またはkbd:[Alt]を使用)
|kbd:[Tab], kbd:[Shift+Tab] |アクティブな画面内でフォーカスを変更
|kbd:[↑], kbd:[↓] |リスト/フォーム/ログのナビゲーション
|kbd:[PgUp], kbd:[PgDn] |1ページ上/下に移動
|kbd:[Enter] |アイテム選択/フォーム送信
|kbd:[Esc] |モーダルウィンドウを閉じる/フォームをキャンセル
|kbd:[Ctrl+z] |現在の画面を閉じる
|kbd:[q], kbd:[Ctrl+q] |終了 脚注:[Webバージョンでは利用できません。]
2+^.e|ログイン
|kbd:[←], kbd:[→] |Kube設定のナビゲーション
2+^.e|Pod
|kbd:[Enter] |Pod選択/コンテナの切り替え
|kbd:[r] |コンテナへのリモートシェル
|kbd:[m] |メモリ使用量
|kbd:[c] |CPU使用量
|kbd:[t] |ネットワーク使用量
|kbd:[f] |ファイルシステム使用量
|kbd:[e] |Podイベント
|kbd:[Shift+e] |ネームスペースイベント
|kbd:[Ctrl+e] |クラスターイベント
|===
== FAQ
spec.nodeName field selector)$ kubectl auth can-i list pods -n cadvisor yes
== 開発
$ git clone https://github.com/astefanutti/kubebox.git
$ cd kubebox
$ npm install
$ node index.js
== スクリーンショット
クラスターイベント: ++++
++++コンテナへのシェル: ++++
++++ターミナルテーマサポート: ++++
++++Webブラウザバージョン: ++++
++++