
⎈❏ Kubernetes용 터미널 및 웹 콘솔
= Kubebox [small]#^⎈❏^# Antonin Stefanutti https://github.com/astefanutti[@astefanutti] // Meta :description: Kubernetes용 터미널 및 웹 콘솔 // 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}각주:[Custom 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
Kubebox와 함께 테스트된 제공된 cadvisor.yaml 파일을 사용하는 것이 좋습니다. 그러나 {uri-cadvisor}[cAdvisor] 프로젝트의 DaemonSet 예제도 잘 작동할 것입니다. cAdvisor 컨테이너는 각 노드의 컨테이너 런타임에 접근할 수 있도록 privileged 보안 컨텍스트로 실행되어야 합니다.
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] |한 페이지 위/아래로 이동
|kbd:[Enter] |항목 선택 / 폼 제출
|kbd:[Esc] |모달 창 닫기 / 폼 취소
|kbd:[Ctrl+z] |현재 화면 닫기
|kbd:[q], kbd:[Ctrl+q] |종료 각주:[웹 버전에서는 사용할 수 없습니다.]
2+^.e|로그인
|kbd:[←], kbd:[→] |Kube 구성 탐색
2+^.e|파드
|kbd:[Enter] |파드 선택 / 컨테이너 순환
|kbd:[r] |컨테이너 원격 셸
|kbd:[m] |메모리 사용량
|kbd:[c] |CPU 사용량
|kbd:[t] |네트워크 사용량
|kbd:[f] |파일 시스템 사용량
|kbd:[e] |파드 이벤트
|kbd:[Shift+e] |네임스페이스 이벤트
|kbd:[Ctrl+e] |클러스터 이벤트
|===
== FAQ
** 0.8.0 버전부터 Kubebox는 {uri-cadvisor}[cAdvisor]가 DaemonSet으로 배포될 것으로 예상합니다. <> 섹션을 참조하세요;
** 메트릭은 메트릭이 요청되는 컨테이너와 동일한 노드에서 실행 중인 cAdvisor 파드의 REST API에서 검색됩니다. 해당 REST API는 API 서버 프록시를 통해 접근되며, 적절한 RBAC 권한이 필요합니다. 예:
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
== 스크린샷
클러스터 이벤트: ++++
++++컨테이너 셸: ++++
++++터미널 테마 지원: ++++
++++웹 브라우저 버전: ++++
++++