k9s는 쿠버네티스 클러스터를 효율적으로 관리할 수 있는 커맨드라인 도구입니다. 사용자 친화적인 인터페이스를 통해 클러스터 리소스를 쉽게 모니터링하고 관리할 수 있으며, 다양한 명령어와 단축키를 활용하여 작업의 효율성을 높일 수 있습니다. 다른 쿠버네티스 관리 도구보다 간결하고, 가볍고, 사용하기 쉽기 때문에 강력합니다. kubeconfig를 얻을 수 있는 모든 쿠버네티스를 지원하기에 멀티 클라우드, 멀티 클러스터 모두 관리할 수 있습니다. 이 블로그에서는 k9s의 소개 및 사용 방법을 소개합니다.
✨ 소개
k9s는 터미널 기반의 UI를 통해 쿠버네티스 클러스터를 상호작용할 수 있는 도구입니다. 이 프로젝트의 목표는 배포된 애플리케이션을 쉽게 탐색, 관찰 및 관리할 수 있도록 하는 것입니다. k9s는 지속적으로 쿠버네티스를 관찰하고 관찰된 리소스와 상호작용하기 위한 후속 명령을 제공합니다.
- 공식 사이트
k9s는 2019년 초에 오픈소스로 공개된 쿠버네티스 관리 도구입니다. 쿠버네티스 클러스터를 쉽게 모니터링하고 관리할 수 있도록 도와주는 커맨드라인 도구입니다. 이름은 쿠버네티스의 줄임말인 k8s 에서 '+1' 하여 k9s 로 정한 것 같습니다.
- 공식 사이트: https://k9scli.io
- 깃헙 리포지토리: https://github.com/derailed/k9s
- 깃헙 스타: ⭐️ 27.2k (2024-11 기준, 참고: https://star-history.com/#derailed/k9s)
프로젝트는 공개 이후 꾸준히 성장했습니다. 거의 3만명이 별을 눌렀을 정도로 유명한 프로젝트가 되었어요.
k9s의 외형은 다음과 같습니다. 되게 투박하게 생겼죠? 여기서 마우스로 클릭할 수 있는 버튼은 없어요. 모두 키보드로 해야 합니다. 하지만 단축키와 명령어들에 익숙해지면 엄청 빠르게 작업할 수 있다는 장점이 있습니다.
k9s가 좀 유명하다는 걸 알았고, 외관에 대해서 보았습니다. 이제 본격적으로 설치하고 사용해 볼까요?
🧑🔧 설치법
k9s의 설치도 터미널에서 할 수 있습니다. 공식 설치법을 참고하셔도 좋습니다.
맥/리눅스에서 설치하기
터미널을 열고 다음 두 방법 중 하나를 선택하여 설치하시면 됩니다.
자동 업데이트를 지원하는 homebrew 패키지 설치
brew install k9s
업데이트 없이 빠르게 클린 설치하기
curl https://webi.sh/k9s | sh
윈도우에서 설치하기
PowerShell을 열고 다음 두 방법 중 하나를 선택하여 설치하시면 됩니다.
자동 업데이트를 지원하는 winget 패키지 설치
winget install k9s
업데이트 없이 빠르게 클린 설치하기
curl https://webinstall.dev/k9s | pwsh
설치 후
설치가 끝나면 터미널 혹은 PowerShell을 재시작하시고 k9s를 입력하여 잘 실행되는지 확인합니다.
이 때 유효한 kubeconfig가 있어야합니다.
🚀 사용법
k9s은 쿠버네티스 리소스를 직접 생성하는 것은 지원하지 않습니다. 하지만 조회(describe), 모니터링(get), 수정(edit) 및 다른 관리 명령어를 아주 많이 지원합니다. 이 블로그에서는 오브스택 쿠버네티스 + k9s을 사용하는 상황을 예시로 사용법을 소개하겠습니다. 명령어는 오브스택 뿐 아니라 다른 쿠버네티스에서도 동일하게 동작하니 참고하시면 좋을 것 같습니다.
사전 준비: Argo CD를 퀵스타트 방식으로 설치
예시로는 CI/CD에 많이 사용하는 Argo CD를 선택하였습니다. 최신 버전의 Argo CD를 설치하겠습니다. 다음 명령어를 입력해주세요
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/refs/heads/master/manifests/install.yaml
정상적으로 생성 작업이 끝나면 됩니다. 이제 k9s을 실행하고 아래의 예제들을 보시면 됩니다.
k9s
1. 특정 네임스페이스의 모든 파드를 찾을 때
k9s을 처음 시작하면 default 네임스페이스의 pod 목록을 보여줄 수 있습니다. 그럼 텅 빈 목록이 나오는 것 같은데요. 이것은 기본 네임스페이스인 default의 파드를 조회하는 것 입니다. 해당 네임스페이스에는 파드가 없기 때문에 빈 목록이 나옵니다. 이 때 당황하지 마시고 단축키 숫자 '0'을 눌러 모든 네임스페이스를 보면 됩니다. 아니면 k9s에서 ':ns' (네임스페이스 리소스 조회)를 입력하고 'all+'을 선택하면 단축키 '0'과 똑같이 동작합니다.
그럼 다음과 같이 쿠버네티스의 모든 파드를 볼 수 있습니다. 중앙에 'Pods(all)'이 필터링 되어 있습니다.
쿠버네티스 시스템인 kube-system 네임스페이스와 직접 설치한 argocd 네임스페이스의 파드들이 보입니다. 그럼 다시 네임스페이스 목록을 보겠습니다. ':ns' 혹은 ':namespace'를 입력합니다. 이 때 ':'은 명령어로 리소스 목록을 필터링하여 보는 기능입니다. 입력이 잘못된 경우에는 ESC를 눌러 취소할 수 있습니다.
이제 원하는 argocd 네임스페이스를 선택(ENTER)합니다. 네임스페이스를 선택하면 자동으로 파드 목록을 조회합니다. 따라서 다음과 같은 화면이 나옵니다
그럼 이제 원하는 argocd 네임스페이스의 목록을 볼 수 있습니다. 필터에 네임스페이스가 특정되면 제일 왼쪽의 NAMESPACE 열은 생략됩니다.
2. 전체 네임스페이스에서 특정 이름을 포함하는 서비스를 찾을 때
서비스 조회를 위해 커맨드 ':svc' 혹은 ':service'를 입력합니다. 그럼 아래와 같이 나올 수 있습니다.
여기서 k9s 화면 상단에 볼 수 있듯이, <0> default 에 해당하는 숫자 '0' 를 눌러서 네임스페이스 필터링을 변경해줍니다.
이제 모든 네임스페이스가 보입니다. 네임스페이스 필터링을 잘 하시면 리소스를 놓치지 않고 잘 찾을 수 있습니다.
이제 server 라는 이름으로 검색을 해보겠습니다. 검색을 위해서는 '/검색어' 을 입력하고 ENTER하면 됩니다. 그럼 '/server'로 검색할 수 있습니다. 검색 결과는 다음과 같습니다.
검색 결과를 잠깐 볼까요? argocd 네임스페이스에서는 이름에 server가 있는 서비스가 검색되었습니다. 그럼 kubernetes 서비스는 왜 검색이 되었을까요? kubernetes 서비스를 'd' 단축키로 describe 해봅시다
다시 서비스 목록으로 가려면 ESC로 describe를 빠져 나갑니다.
3. 특정 디플로이먼트를 스케일 아웃 할 때 (1 → 2)
이번엔 argocd 네임스페이스의 argocd-server 파드를 1개 → 2개로 스케일 아웃해 보겠습니다. 명령어 ':pod' 로 현재 파드가 1개 인 것을 확인합니다.
스케일 아웃 "scale out": 서버 수를 증가시키는 경우입니다.
스케일 인 "scale in": 서버 수를 감소시키는 경우입니다.
아 참고로 파드 이름인 'argocd-server-6f8b57b9f6-g2qvj'에서 3번째 마디의 난수는 레플리카셋 식별자, 4번째 마디의 난수는 파드 식별자 입니다. 리소스 이름의 중복을 피하기 위해, 쿠버네티스 컨트롤러 매니저가 생성하는 이름입니다.
이제 스케일을 관리하는 디플로이먼트로 가봅시다. 명령어 ':deploy' 혹은 ':deployment' 로 디플로이먼트 목록을 조회합니다.
여기서 argocd 네임스페이스의 argocd-server가 있습니다. 이 디플로이먼트를 수정하는 법은 2가지가 있습니다. 선호하는 걸 고르시면 됩니다.
- 스케일: 단축키 's'를 눌러 스케일만을 수정합니다. 1을 2로 바꾸고
- 수정: 단축키 'e'를 눌러 YAML을 수정할 수 있는 vim에 진입합니다. spec.replicas의 1을 2로 바꾸고 저장(':wq')합니다.
저는 단축키로 스케일만 수정하였습니다.
스케일 수정 후 파트 목록을 조회합니다.
성공하였습니다. 이렇게 kubectl를 사용하지 않고 명령어와 단축키로 스케일을 바꿀 수 있습니다! 참고로 위 과정에서 스케일 수정에 대응하는 kubectl 명령어는 다음과 같습니다.
kubectl -n argocd scale --replicas=2 deploy/argocd-server
4. 특정 시크릿을 복호화하여 암호를 얻을 때
argocd 서버에 접속하면 초기 관리자 비밀번호가 필요합니다. 명령어 ':sec' 혹은 ':secret'으로 시크릿 목록을 조회합니다.
초기 관리자 정보는 다음과 같습니다.
ID: admin
PW: 'argocd-initial-admin-secret' 에 있는 password
비밀번호를 가지고 있는 'argocd-initial-admin-secret'을 단축키 'x'로 디코드합니다. 결과는 다음과 같습니다.
이제 암호를 단축키 'c'로 복사하거나 드래그하여 복사하시면 됩니다. 근데 줄이 나눠질 경우 텍스트가 깨지는 경우가 많기 때문에 단축키 'c'로 복사하는 걸 강추드립니다. 그리고 메모장에 붙여넣고 다시 복사해서 사용하시면 됩니다.
위 과정과 같은 kubectl 명령어는 다음과 같습니다.
kubectl get secret -n argocd argocd-initial-admin-secret -o jsonpath='{.data.password}' | base64 --decode
5. 특정 서비스를 포트포워딩 할 때
포트 포워딩은 간단합니다. k9s에서 서비스(':svc') 목록을 조회합니다.
단축키 'shift + f'로 포트포워딩합니다. 그럼 서비스에 연결된 파드 중 하나가 연결되고, 공개된 포트들이 나옵니다. 원하는 포트를 정하고 OK를 선택하면 됩니다.
완료 후 argocd-server 서비스를 선택하고 ENTER를 입력합니다. 그럼 서비스에 연결된 파드 목록만 나오게 됩니다.
포트포워딩 된 파드에는 PF 열에 'F'가 있습니다. 이건 포트포워딩을 해제하거나, 터미널이 종료 될 때까지 유지됩니다.
이제 웹브라우저에서 http://localhost:8080 로 접속해봅니다.
그리고 위 과정에서 얻은 관리자 정보로 로그인 합니다.
이렇게 포트포워딩도 할 수 있습니다. 이 과정에 대응하는 kubectl 명령어는 다음과 같습니다.
kubectl port-forward -n argocd service/argocd-server 8080:80
kubectl에서는 service에 바로 연결할 수 있습니다. k9s에서는... pod 밖에 되지 않는 것 같아요. 혹시 아시는 분은 댓글 부탁드립니다.
그리고 단축키 '?'을 누르면 현재 화면에서 쓸 수 있는 모든 단축키를 볼 수 있습니다. 어떠신가요? 커맨드와 단축키로 리소스를 넘나들면서 제어하는 것. 이 과정이 숙련된다면 쿠버네티스 이슈가 발생했을 때 빠르게 대처할 수 있답니다.
여러분의 칼퇴에 도움이 되기를 바라며 이만 마치겠습니다. 그 밖의 예시가 필요한 시나리오가 있다면 댓글 부탁드립니다. 읽어주셔서 감사합니다.
'DevOps' 카테고리의 다른 글
🐙 GitOps#1: Argo CD와 함께 GitOps 시작하기 (1) | 2024.11.21 |
---|---|
📝 k8s+STDIN: 쿠버네티스에서 YAML 파일 없이 리소스 생성하기 (0) | 2024.11.12 |
☸️ 로컬 쿠버네티스: 연습용 쿠버네티스 클러스터 사용법을 소개합니다 (1) | 2024.11.09 |
🔮 오브스택(OrbStack): 당신의 느린 맥을 빠르게 해 줄 쿠버네티스 도구를 소개합니다 (0) | 2024.11.08 |
🍩 호머(Homer): YAML로 만드는 간편 대시보드 도구를 소개합니다 (0) | 2024.11.07 |
어제보다 오늘 더 공부 잘하는 코딩냥이. 어제보다 오늘 더 일 잘하는 코딩냥이.
포스팅이 좋았다면, 오류를 발견했다면, 더 좋은 아이디어가 있다면 댓글 부탁드립니다!