KUBERNETES

18. 쿠버네티스_편리한 운영을 위한 오픈소스 솔루션 소개

이번 장에서는 쿠버네티스 관리에 사용할 수 있는 다양한 오픈소스 도구를 소개합니다.

쿠버네티스는 강력한 컨테이너 오케스트레이션 능력으로 인해 다양성과 확장성이 탁월합니다. 하지만 종종 강력함은 복잡함을 동반하기도 합니다. 오픈소스를 사용하여 이러한 복잡한 작업을 좀 더 편리하게 할 수 있습니다. 

1. 다양한 Krew 플러그인 리스트

kubectl krew는 쿠버네티스의 커맨드라인 인터페이스인 kubectl을 위한 플러그인 관리자입니다. krew는 쿠버네티스의 활용성을 더욱 확장하고 사용자의 경험을 향상시키는 데 중점을 둡니다.

플러그인은 말 그대로 간단히 1줄의 명령어를 입력(플러그)만으로 여러 도구를 설치, 삭제, 업그레이드를 할 수 있습니다.

krew를 사용하면 플러그인을 검색, 설치, 관리하는 과정이 간단해집니다. 명령어 한 줄로 새로운 플러그인을 발견하고 설치할 수 있으며, 이는 쿠버네티스 환경을 더 빠르고 쉽게 사용자화할 수 있게 해줍니다.

krew는 오픈 소스 커뮤니티에 의해 지원되며, 지속적으로 성장하고 있는 플러그인 생태계를 가지고 있습니다. 이를 통해 사용자들은 다양한 요구 사항에 맞는 플러그인을 찾을 수 있습니다.

krew를 사용하여 쿠버네티스 클러스터 관리가 더욱 효율적이고 간소화됩니다. 일상적인 작업을 자동화하고, 복잡한 명령어를 단순화하여 작업 시간을 절약할 수 있습니다.

설치는 brew를 이용하여 간단합니다. 

(필자는 이미 설치되어 있어 출력이 다를 수 있습니다.)

(jerry-test:karpenter)~$ brew install krew
==> Downloading https://formulae.brew.sh/api/formula.jws.json
(생략)
Warning: krew 0.4.4 is already installed and up-to-date.
To reinstall 0.4.4, run:
  brew reinstall krew

24년 1월 현재 200개가 넘는 다양한 플러그인 도구를 지원하여 필요에 따라 적절하게 선택하면 큰 도움이 됩니다. 필자가 실제 쿠버네티스 관리하면서 잘 사용하고 있는 ‘Krew’ 플러그인 리스트입니다. 아래 도구는 쿠버네티스 플러그인을 편리하게 관리할 수 있는 ‘Krew’를 이용하여 설치합니다.

(jerry-test:default)~$ k krew list
PLUGIN            VERSION
cnpg              v1.21.0
ctx               v0.9.5
deprecations      v1.6.0
df-pv             v0.3.0
get-all           v1.3.8
krew              v0.4.4
neat              v2.0.3
ns                v0.9.5
stern             v1.26.0
view-secret       v0.11.0

실제 명령어를 입력하면 해당 명령어에 대한 사용법을 아실 수 있어 실습은 생략하고 설명으로 대체하겠습니다.

cnpg(Cloud Native PostgreSQL) : Kubernetes 클러스터 내에서 PostgreSQL 데이터베이스 관리를 위한 플러그인으로, 데이터베이스 관리 작업을 간소화합니다.

ctx : 쿠버네티스 컨텍스트를 쉽게 전환할 수 있게 해주는 도구로, 다중 클러스터 환경에서 유용합니다. 다중 클러스터를 관리한다고 하면 ‘ns’, ‘kube-ps1’과 더불어 3대 핵심 도구(^^)입니다.

deprecations : 클러스터 업그레이드 작업 시 클러스터의 구성 파일이나 매니페스트에서 이전 API 버전을 식별하는 데 도움을 주는 도구입니다.


df-pv : Persistent Volumes(PV)의 디스크 사용량을 확인할 수 있어 스토리지 관리에 유용합니다. kubectl 네이티브로 포함되어야지 않을까 생각합니다.

get-all : 한 번의 명령으로 여러 쿠버네티스 리소스를 한꺼번에 조회할 수 있는 플러그인입니다. 기존 ‘k get all’ 명령어에 부족한 리소스까지 출력할 수 있습니다.

krew : 쿠버네티스 플러그인 관리자로, 다양한 플러그인을 쉽게 검색하고 설치할 수 있습니다.

neat : YAML 매니페스트 출력을 깔끔하게 정리하여, 필수적이지 않은 정보를 제거합니다.

ns : 쿠버네티스 네임스페이스를 빠르게 전환할 수 있는 도구로, 네임스페이스 관리를 간편하게 해줍니다.

stern :기존 ‘k log’ 명령어로는 단일 파드의 로그만 검색할 수 있는데, stern을 사용하면  여러 파드의 로그를 실시간으로 집계하고 스트리밍하는 데 사용되며, 로그 관리에 매우 유용합니다.

view-secret : 추가 encoding 작업없이 쿠버네티스 시크릿을 쉽게 조회하고 해석할 수 있습니다.

이 외 쿠버네티스 관리 환경을 더욱 편리하게 하는 다양한 Krew 플러그인이 있습니다. 각자 운영 환경에 맞게 적합한 것을 선택하여 사용하는 것을 추천합니다.

2. Polaris를 이용한 컨테이너, 파드 보안 취약점 확인

클라우드 네이티브 환경에서 보안은 가장 중요한 고려 사항 중 하나입니다. 쿠버네티스는 강력하고 유연한 컨테이너 오케스트레이션 툴이지만, 잘못 구성된 클러스터는 심각한 보안 취약점으로 이어질 수 있습니다. Polaris는 쿠버네티스 클러스터의 구성을 검사하고, 보안상의 개선사항을 추천하여 클러스터를 더 안전하게 만들어주는 오픈 소스 도구입니다.

쿠버네티스의 보안 취약점을 확인하고 개선하는 용도로 ‘kubescape’ 등 다양한 도구가 있지만 ‘Polaris’는 손쉽게 사용할 수 있고 발견된 취약점을 조치하기 쉽도록 GUI를 제공하여 사용하기 편리합니다.

폴라리스는 쿠버네티스의 Best Practices에 대한 명확한 지침을 제공하며, 클러스터 관리자가 이를 따를 수 있도록 지원합니다. 가독성이 높은 보고서를 제공하여, 개선사항을 쉽게 식별하고 우선 순위를 정할 수 있습니다. 또한 Polaris는 Jenkins, CircleCI 등과 같은 CI/CD 파이프라인과 통합되어, 코드 배포 전에 보안 체크를 자동으로 수행할 수 있습니다.

애플리케이션 설치 시 주로 해당 솔루션 제공 업체의 헬름 차트를 이용하여 설치합니다. 하지만 이러한 공식 헬름 차트도 보안 측면에서 부족한 부분이 있습니다. 폴라리스는 모범 사례 기준으로 12개 이상의 검사를 실시합니다.

그럼 실습으로 알아보겠습니다. 헬름 기반으로 Polaris를 설치합니다.

(jerry-test:kubecost)polaris$ helm repo add fairwinds-stable https://charts.fairwinds.com/stable
"fairwinds-stable" has been added to your repositories
(jerry-test:kubecost)polaris$ helm pull fairwinds-stable/polaris
(jerry-test:kubecost)polaris$ tar xvfz polaris-5.16.0.tgz 
(jerry-test:kubecost)polaris$ rm -rf polaris-5.16.0.tgz 
(jerry-test:kubecost)polaris$ mv polaris polaris-5.16.0
(jerry-test:kubecost)polaris$ cd polaris-5.16.0/
(jerry-test:kubecost)polaris-5.16.0$ cp values.yaml ci/my-values.yaml

기본 제공되는 Values.yaml 파일에서 아래와 같이 리소스 관련 설정만 변경하여 my-values.yaml 파일을 생성합니다.

dashboard:
  resources:
    requests:
      cpu: 10m
      memory: 512Mi

Polaris 네임스페이스에 설치를 시작합니다.

(jerry-test:kubecost)polaris-5.16.0$ helm install polaris --namespace polaris --create-namespace -f ci/my-values.yaml .
NAME: polaris
LAST DEPLOYED: Sun Nov  5 01:12:13 2023
NAMESPACE: polaris
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
** Please be patient while the chart is being deployed **

Enjoy Polaris and smooth sailing!
To view the dashboard execute this command:

kubectl port-forward --namespace polaris svc/polaris-dashboard 8080:80

Then open http://localhost:8080 in your browser.

설치가 완료되면 정상적으로 파드가 실행됩니다.

(jerry-test:kubecost)polaris-5.16.0$ k ns polaris
Context "jerry-test" modified.
Active namespace is "polaris".
(jerry-test:polaris)polaris-5.16.0$ k get pod
NAME                                 READY   STATUS    RESTARTS   AGE
polaris-dashboard-677d5f7488-lmbhp   1/1     Running   0          51s
polaris-dashboard-677d5f7488-xzfnm   1/1     Running   0          51s

‘port-forward’ 명령어를 이용하여 폴라리스 대시보드에 접속합니다.

(jerry-test:polaris)polaris-5.16.0$ k get svc
NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
polaris-dashboard   ClusterIP   172.20.50.177   <none>        80/TCP    10m
(jerry-test:polaris)polaris-5.16.0$ k port-forward svc/polaris-dashboard 8080:80
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080
  • Score
    Best Practice 대비 전체 클러스터 구성 내역을 쉽게 점수로 환산하여 보여줍니다. 권고 사항에 따라 수정하면 점수가 상승합니다.

  • Passing/Warning/Dangerous Checks
    폴라리스는 위험도를 등급 별로 나누어서 현재 구성의 취약점을 구분합니다. 불가피한 예외 설정을 제외하고 위험(dangerous) 단계 취약점은 수정하는 것을 권고합니다.

이제 설치한 애플리케이션의 취약점을 확인할 수 있어, 세부 취약점 별로 필요한 조치를 취할 수 있습니다.

아래 예제는 Redis 애플리케이션의 취약점과 조치 방법 예제입니다.

추가 링크를 확인하면 자세한 조치 방법을 확인할 수 있습니다.

3. 터미널에서 쿠버네티스를 마스터하는 법: K9s 소개

OpenLens와 더불어 로컬 환경에서 쿠버네티스 관리 콘솔 용도로 많이 사용하는 K9s 입니다.

K9s는 간편한 CLI 인터페이스를 지원하여 복잡한 쿠버네티스 명령어를 간소화하고 사용자가 클러스터를 쉽고 빠르게 관리할 수 있게 해줍니다. 그리고 클러스터의 실시간 상태를 모니터링할 수 있어, 팟(Pod), 노드, 서비스 등의 상태를 실시간으로 확인할 수 있습니다.

‘kubectl’ 명령어에 익숙하지 않은 개발자들은 클러스터 내의 애플리케이션 로그를 쉽게 확인하고, 문제 해결 및 디버깅을 위한 로그 분석이 용이하여 자주 사용하는 편입니다.

K9s 설치하는 방법입니다. ‘brew’ 사용하여 손쉽게 설치 가능합니다. 

(jerry-test:default)~$ brew install derailed/k9s/k9s
Running `brew update --auto-update`...
==> Auto-updated Homebrew!
Updated 4 taps (derailed/k9s, aws/tap, homebrew/core and homebrew/cask).
==> New Formulae
ain                                bomber                             dicebear                           invoice                            noir                               python-docopt                      scikit-image
apkleaks                           certgraph                          dockerfile-language-server         libjuice                           orbuculum                          python-mako                        signmykey
appstream                          certsync                           frozen                             libsail                            osctrl-cli                         raven                              tailspin
authz0                             cfripper                           gittuf                             mediamtx                           phylum-cli                         redwax-tool                        tlrc
bao                                der-ascii                          graphqlviz                         modsurfer                          presenterm                         regclient                          vet
==> New Casks
clibor                     deveco-studio              gstreamer-development      gstreamer-runtime          keymapp                    metamer                    mitmproxy                  music-decoy                orka3

You have 29 outdated formulae installed.

k9s 0.27.4 is already installed but outdated (so it will be upgraded).
==> Fetching derailed/k9s/k9s
==> Downloading https://github.com/derailed/k9s/releases/download/v0.28.0/k9s_Darwin_arm64.tar.gz
==> Downloading from https://objects.githubusercontent.com/github-production-release-asset-2e65be/167596393/64f86002-bb1b-41f0-9f83-89fba643aaf2?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20231109%2Fus-east-1%2Fs3%2
############################################################################################################################################################################################################################################## 100.0%
==> Upgrading derailed/k9s/k9s
  0.27.4 -> 0.28.0

🍺  /opt/homebrew/Cellar/k9s/0.28.0: 5 files, 65.3MB, built in 3 seconds
==> Running `brew cleanup k9s`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
Removing: /opt/homebrew/Cellar/k9s/0.27.4... (5 files, 64.2MB)
Removing: /Users/jerry/Library/Caches/Homebrew/k9s--0.27.4.tar.gz... (17.9MB)

필자는 클러스터 업그레이드, 노드 Drain 작업 시 전체 파드의 현재 상태를 파악하는 용도로 많이 사용합니다. 

아래와 같이 파드 모니터링 화면에서 ‘0’를 입력하면 특정 네임스페이스가 아닌 전체 네임스페이스 파드의 현황을 확인할 수 있습니다.

이어지는 화면에서 <Shift> + ‘s’ 키를 입력하면 아래와 같이 아래와 같이 현재 상태(‘STATUS’)를 기준으로 파드를 정렬할 수 있습니다. 이 후 ‘k drain’ 명령어로 특정 노드를 Drain 하면 변화하는 파드의 상태를 확인할 수 있습니다. 특정 파드가 실행이 되지 않거나 Pending 되는 상태를 파악할 수 있어 작업의 정상 종료 유무를 편리하게 파악할 수 있습니다.

K9s는 쿠버네티스 클러스터 관리를 효율적으로 만들어 주는 강력한 도구로, 복잡한 클러스터 환경에서의 작업을 단순화하고 속도를 높여주어 많이 사용하는 도구입니다.

4. 쿠버네티스 자원 사용량 확인 – Metrics-Server

쿠버네티스를 사용하면 필수로 같이 사용하는 Metrics-Server의 설치 방법을 간단히 알아봅니다. Metrics-Server는 HPA 적용 시 파드의 자원 사용량에 필요한 사전 요소이기도 합니다.

Metrics-Server 설치는 매니페스트 YAML 파일로 설치도 가능하지만 향후 관리 편의를 위하여 헬름을 이용하여 설치하는 것을 권고합니다.

(jerry-test:default)foo$ helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
"metrics-server" has been added to your repositories

(jerry-test:default)metrics-server-3.10.0$ helm pull metrics-server/metrics-server
(jerry-test:kube-system)metrics-server-3.11.0$ helm install metrics-server -f ci/ci-values.yaml .
NAME: metrics-server
LAST DEPLOYED: Thu Nov  9 16:04:13 2023
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
***********************************************************************
* Metrics Server                                                      *
***********************************************************************
  Chart version: 3.11.0
  App version:   0.6.4
  Image tag:     registry.k8s.io/metrics-server/metrics-server:v0.6.4
***********************************************************************

kube-system 네임스페이스에 metrics-server 파드가 정상으로 실행됩니다.

(jerry-test:kube-system)metrics-server-3.11.0$ k get pod --selector app.kubernetes.io/name=metrics-server
NAME                             READY   STATUS    RESTARTS   AGE
metrics-server-966ddf79d-4z7mj   1/1     Running   0          73s

이 후 노드와 파드의 cpu, memory 리소스 사용량을 ‘k top’ 명령어로 편리하게 파악할 수 있습니다.

(jerry-test:kube-system)metrics-server-3.11.0$ k top nodes
NAME                                               CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
ip-10-110-22-92.ap-northeast-2.compute.internal    110m         5%     2543Mi          35%       
ip-10-110-29-227.ap-northeast-2.compute.internal   119m         6%     1041Mi          71%       
ip-10-110-32-197.ap-northeast-2.compute.internal   39m          2%     677Mi           46%       
(jerry-test:kube-system)metrics-server-3.11.0$ k top pods
NAME                                            CPU(cores)   MEMORY(bytes)   
aws-load-balancer-controller-847fd69fdd-m5sgx   3m           28Mi            
aws-load-balancer-controller-847fd69fdd-mhtz2   1m           20Mi            
aws-node-8n5xr                                  4m           59Mi            
aws-node-pl56t                                  4m           63Mi            
aws-node-sljqx                                  4m           53Mi            
coredns-7598c7588c-pbflr                        2m           18Mi            
coredns-7598c7588c-scfnh                        2m           18Mi            
ebs-csi-controller-7f8787d56d-9tpl5             3m           59Mi            
ebs-csi-controller-7f8787d56d-d857m             4m           56Mi            
ebs-csi-node-gjkqt                              2m           32Mi            
ebs-csi-node-q49sb                              1m           21Mi            
ebs-csi-node-x9tnj                              1m           32Mi            
external-dns-5555f6796f-zltdz                   1m           18Mi            
kube-proxy-b5tm2                                1m           19Mi            
kube-proxy-c7l5w                                1m           21Mi            
kube-proxy-d2mfw                                1m           15Mi            
metrics-server-966ddf79d-4z7mj                  3m           17Mi 

이상으로 이번 장에서 쿠버네티스 환경에서 편리하게 사용할 수 있는 오픈 소스 도구를 알아보았습니다.

해당 기술 블로그에 질문이 있으시면 언제든지 문의해 주세요. 직접 답변해 드립니다.
k8sqna@jennifersoft.com

Next

Contact Us

안녕하세요? 제니퍼소프트입니다.
기술 문의의 경우 질문자의 회사/이름/연락처를 본문에 기술해 주셔야만 원할한 지원이 가능합니다.
보내주신 문의 사항을 검토하여 빠른 시일 내에 답변해 드리겠습니다.

  • Chris
  • Irene

메일을 보냈습니다.

메일 전송이 완료되었습니다.
빠른 시일 내에 답변드리겠습니다.
감사합니다.
제니퍼소프트 웹사이트는 쿠키를 사용합니다. 쿠키에 대한 자세한 정보 및 삭제 방법은 제니퍼소프트의 개인정보처리방침을 참고하시기 바라며 본 사이트를 계속해서 이용하는 것은 제니퍼소프트의 쿠키 사용에 동의함을 의미합니다.