- k8s 도구용
kubectl
란?
kubectl
은 k8s 클러스터를 제어하는 명령줄 인터페이스 도구로 k8s API 서버와 상호작용하여 클러스터의 리소스를 관리함
kubectl
명령어
# zshrc alias 만들기
vi ~/.zshrc
:$ (맨 아래로 가는거)
alias k=kubectl
source ~/.zshrc
# 기본 명령어
k [command] [TYPE] [NAME] [flags]
# 리소스 생성
k apply -f <파일명>.yml
# 리소스 삭제
k delete <리소스 유형> <리소스 이름>
# 실행 중인 리소스 조회
k get pods
k get deployments
# 리소스의 상태와 이벤트 확인
k describe <리소스> <이름>
# CPU 및 메모리 사용량 확인
k top pods
k top nodes
# 컨테이너 로그 조회
k logs <pod 이름>
# 실행 중인 컨테이너 내부 접근
k exec -it <pod> -- /bin/sh
# 문제 발생 시 이벤트 확인
k get events
kubectl
주요 기능
1) 리소스 생성, 조회, 수정, 삭제
2) 클러스터 및 리소스 모니터링
3) 디버깅 및 문제 해결
4) 네트워크 및 포트 관리
5) 컨테이너 배포 및 롤백
kubectl
중요성
1) 운영 효율성 증대
2) k8s 리소스 최적화 및 안정성 유지
3) CI/CD 및 자동화와의 연계
4) 디버깅 및 트러블슈팅의 핵심 도구
- k8s 구조와 관리
pods
: pod
은 k8s에서 배포할 수 있는 가장 작은 단위이자, 클러스터에서 스케줄링되는 기본적인 빌딩 블록임
: 하나의 pod
는 하나 이상의 컨테이너를 포함할 수 있으며, 이 컨테이너들은 저장소, 네트워크, 그리고 운영체제의 일부 설정을 공유함
: pod
내의 컨테이너들은 항상 함께 위치하고, 함께 스케줄되며, 동일한 노드에서 함께 실행됨
: pod
생명주기
-> Pending
-> Running
-> Succeeded
-> Failed
-> CrashLoopBackOff
(실무에서 많이 발생하는 에러)
-> Unknown
Deployment
: k8s에서 애플리케이션의 선언적 업데이트를 제공하는 API 객체임
: 주로 상태가 없는(stateless) 애플리케이션을 관리하는데 적합함
: 컨테이너 실행 방법 (관련 파일은 github에 정리)
1) kubectl run
으로 직접 컨테이너 실행하기
2) yaml 파일을 작성하여 템플릿으로 컨테이너 실행하기
: 관련 명령어
# 디플로이먼트 실행
kubectl apply -f nginx-app.yaml
kubectl get pods
kubectl get deployments
kubectl expose deployment nginx-app --type=NodePort --port=80
kubectl get svc nginx-app
minikube service nginx-app --url
# 디플로이먼트 조회
kubectl get deployment
# 디플로이먼트 삭제
kubectl delelte deployment nginx-app
- k8s IDE 도구인 Lens 설치
https://k8slens.dev/ (Lens)
Lens는 클러스터의 실시간 상태를 보여주며, 리소스를 직관적으로 관리할 수 있는 그래픽 인터페이스 제공
그외 OpenLens 사용 방법 (https://github.com/MuhammedKalkan/OpenLens)
brew install --cask openlens
(맥 기준)
- k8s 용어 정리
1) Pod
: 파드는 k8s에서 스케줄링 가능한 가장 작은 단위임
: 하나 이상의 컨테이너를 포함할 수 있으며, 이 컨테이너들은 스토리지, 네트워크를 공유하고, 어떻게 실행될지에 대한 방식을 지정함
2) Node
: 노드는 파드가 배포되는 물리적 또는 가상의 기계임
: 각 노드는 마스터에 의해 관리되며, 파드의 운영을 지원하기 위해 리소스(스케줄링, 실행, 모니터링 등)를 제공함
3) Service
: 서비스는 일련의 동적 파드에 대한 지속적인 접근을 제공하는 추상적인 개념으로, 로드 밸런싱, 서비스 디스커버리 고정 IP 주소를 포함함
4) Deployment
: 디플로이먼트는 파드와 레플리카셋의 선언적 업데이트를 관리함
: 이를 통해 사용자는 애플리케이션을 롤아웃, 업데이트 및 롤백할 수 있음
5) ReplicaSet
: 레플리카셋은 한 개 이상의 파드 복사본을 유지하도록 보장함
: 이는 파드의 가용성을 유지하는 데 중요함
6) ConfigMap
: 컨피그맵은 구성 데이터를 키-값 쌍으로 저장하여 애플리케이션 코드의 구성 정보를 파드에서 분리할 수 있게 해줌
: 이를 통해 애플리케이션을 재배포하지 않고도 설정을 변경할 수 있음
7) Secret
: 시크릿은 비밀번호, OAuth 토큰, SSH 키와 같은 민감한 정보를 저장하는데 사용됨
: 이 정보들은 시크릿을 사용하여 안전하게 파드에 주입될 수 있음
8) Volume
: 볼륨은 파드가 존재하는 동안 데이터를 유지할 수 있는 디렉톨리임
: 다양한 유형의 볼륨이 지원되며, 파드 내의 컨테이너 간, 또는 파드의 인스턴스 간에 데이터를 공유할 때 사용됨