728x90
반응형
SMALL
학습내용
- kubectl
- Kubernetes의 구조와 관리
- Pod 및 Deployment 실습
- 부록 k8s 용어
학습정리
1. kubctl
- kubectl은 Kubernetes 클러스터를 관리하는 명령줄 인터페이스(CLI) 도구
- 주요기능
- 리소스 생성, 조회, 수정, 삭제
- Kubernetes 리소스(Pod, Deployment, Service 등)를 생성하고 관리
- kubectl apply -f <파일명>.yaml을 통해 YAML 파일 기반 배포
- kubectl delete <리소스 유형> <리소스 이름>으로 리소스 삭제
- 클러스터 및 리소스 모니터링
- 실행 중인 리소스를 조회 (kubectl get pods, kubectl get deployments)
- 리소스의 상태와 이벤트 확인 (kubectl describe <리소스> <이름>)
- CPU 및 메모리 사용량 확인 (kubectl top pods, kubectl top nodes)
- 디버깅 및 문제 해결
- 컨테이너 로그 조회 (kubectl logs <pod 이름>)
- 실행 중인 컨테이너 내부 접근 (kubectl exec -it
-- /bin/sh) - 문제 발생 시 이벤트 확인 (kubectl get events)
- 네트워크 및 포트 관리
- Kubernetes 내부 네트워크를 통한 접근 및 트러블슈팅 (kubectl port-forward, kubectl proxy)
- 서비스 및 네임스페이스 관리
- 컨테이너 배포 및 롤백
- 애플리케이션 업데이트 및 롤백 (kubectl rollout undo deployment/
) - 블루-그린 배포 및 카나리 배포와 같은 배포 전략 관리
- 애플리케이션 업데이트 및 롤백 (kubectl rollout undo deployment/
- 리소스 생성, 조회, 수정, 삭제
- 중요성
- 운영 효율성 증대
- Kubernetes API를 직접 호출할 필요 없이 직관적인 명령어로 클러스터 관리 가능
- YAML 설정 파일을 사용한 일관된 리소스 배포 및 변경
- Kubernetes 리소스 최적화 및 안정성 유지
- 리소스 사용량을 실시간으로 모니터링하여 클러스터를 최적화
- 컨테이너 장애 발생 시 빠르게 대응하여 애플리케이션 가용성 유지
- CI/CD 및 자동화와의 연계
- kubectl 명령을 CI/CD 파이프라인과 통합하여 자동화된 배포 구현 가능
- GitOps, ArgoCD, Flux 등의 Kubernetes 기반 배포 자동화 도구와 연계
- 디버깅 및 트러블슈팅의 핵심 도구
- 클러스터 내에서 발생하는 오류를 빠르게 식별하고 해결
- kubectl logs, kubectl describe, kubectl exec을 활용한 실시간 디버깅
- 운영 효율성 증대
2. Kubernetes의 구조와 관리
Pods
개념
- Pod은 Kubernetes에서 배포할 수 있는 가장 작은 단위이자, 클러스터에서 스케줄링되는 기본적인 빌딩 블록
- 하나의 Pod는 하나 이상의 컨테이너를 포함할 수 있으며, 이 컨테이너들은 저장소, 네트워크, 그리고 운영 체제의 일부 설정을 공유합니다.
- Pod 내의 컨테이너들은 항상 함께 위치하고, 함께 스케줄되며, 동일한 노드에서 함께 실행됩니다.
구조와 특성
- 공유 리소스
- Pod 내의 컨테이너들은 IP 주소와 포트 번호를 공유하며, 로컬로 연결된다는 개념을 사용하여 서로 통신할 수 있습니다. 또한 볼륨을 공유하여 데이터를 교환하고 저장할 수 있습니다.
- 라이프사이클
- 일반적으로 Pod는 한 번에 하나의 메인 컨테이너를 실행하는데 사용됩니다. Pod의 컨테이너는 함께 생성되고, 함께 종료됩니다. 이는 Pod가 한 개의 애플리케이션 인스턴스를 구성하는 것으로 취급되어야 함을 의미합니다.
- 임시성 (Ephemeral nature)
- Pod는 일시적입니다. 즉, Pod는 불변이 아니며, 주로 재시작할 때는 새 IP 주소를 받게 됩니다. 이러한 특성 때문에, Pod는 스토리지와 같은 지속적인 리소스와 결합하여 사용되는 경우가 많습니다.
- 공유 리소스
생명주기
kubectl describe pods {POD_NAME}
- Pending
- Running : 파드내에 하나의 컨테이너라도 실행된 상태
- Succeeded : 모든 컨테이너가 성공적으로 실행마치고 종료
- Failed : 실패하여 종료
- CrashLoopBackOff : 컨테이너가 반복적으로 시작되었다가 실패하는 상태
- Unknown : 파드의 상태를 알 수 없는 상태
Deployments
개념
- Deployment는 Kubernetes에서 애플리케이션의 선언적 업데이트를 제공하는 API 객체입니다.
- Deployment를 사용하면 상태를 안정적으로 유지하면서 애플리케이션 또는 서비스의 원하는 상태를 설명하고, Kubernetes가 목표 상태를 현재 상태에 맞추도록 할 수 있습니다.
- Deployment는 주로 상태가 없는 (stateless) 애플리케이션을 관리하는데 적합합니다.
구조와 특성
- 롤아웃과 롤백
- Deployment는 애플리케이션을 배포할 때 선언적 업데이트를 사용합니다.
- 예를 들어, 새 버전의 컨테이너 이미지로 업데이트를 진행할 때 롤아웃을 자동으로 진행하며, 문제가 발생하면 이전 버전으로 롤백할 수 있습니다.
- Deployment는 애플리케이션을 배포할 때 선언적 업데이트를 사용합니다.
- 스케일링
- Deployment를 통해 애플리케이션의 인스턴스 수를 쉽게 늘리거나 줄일 수 있습니다. 이는 리플리카셋(ReplicaSet)을 자동으로 업데이트하여 관리합니다.
- 자동 복구
- Deployment는 노드 오류나 기타 이유로 인해 실패한 Pod를 자동으로 대체합니다. 이는 애플리케이션의 가용성을 보장합니다.
- 버전 관리와 추적
- Deployment는 애플리케이션의 버전을 추적하고, 언제든지 이전 상태로 돌아갈 수 있는 옵션을 제공하여, CI/CD 파이프라인과 통합하기에 적합합니다.
- 롤아웃과 롤백
deployment 명령어
# 디플로이먼트 조회 kubectl get deployment or kubectl get deploy #NAME : 클러스터에 배포한 디플로이먼트 이름 #READY : 사용자가 최종 배포한 pod 개수와 디플로이먼트를 이용해 현재 클러스터에 실제로 동작시킨 pod 개수를 1/1 형태로 표시합니다. #UP-TO-DATE : 디플로이먼트 설정에 정의한 대로 동작 중인 신규 pod 개수입니다. # AVAILABLE : 서비스 가등한 pod 수,pod를 실행한 후 설정된 헬스 체크로 서비스 가능한 상태라고 판단하면 AVAILABLE 항목의 pod 개수에 포함 # AGE : 디플로이먼트 생성한 후 지난 시간 표시 $ kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE nginx-apop 1/1 1 1 31m nginx-app 1/1 1 1 20s # 디플로이먼트 삭제 kubectl delete deployment {DEPLOYMENT_NAME} or kubectl delete deploy nginx-app
3. Pod 및 Deployment 실습
Namespace 설정
kubectl create namespace k8s-practice
Pod 관리
nginx-pod.yaml
apiVersion: v1 kind: Pod metadata: name: nginx-pod namespace: k8s-practice spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80
실행
# 실행 kubectl apply -f nginx-pod.yaml # 해당 네임스페이스 파드 조회 및 상세정보 kubectl get pods -n k8s-practice kubectl describe pod nginx-pod -n k8s-practice # 해당 네임스페이스의 파드 로그 조회 kubectl logs nginx-pod -n k8s-practice # Pod 내부 접속 kubectl exec -it nginx-pod -n k8s-practice -- /bin/bash # Pod 삭제 kubectl delete pod nginx-pod -n k8s-practice
Deployment 생성 및 스케일링
nginx-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace: k8s-practice spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80
실행
#실행 kubectl apply -f nginx-deployment.yaml #Deployment 상태확인 kubectl get deployments -n k8s-practice kubectl describe deployment nginx-deployment -n k8s-practice # Replica 수 조정 kubectl scale deployment nginx-deployment --replicas=4 -n k8s-practice # 이미지 업데이트 kubectl set image deployment/nginx-deployment nginx=nginx:1.19.0 -n k8s-practice # 업데이트 상태 확인 kubectl rollout status deployment/nginx-deployment -n k8s-practice # 롤백 kubectl rollout undo deployment nginx-deployment -n k8s-practice #삭제 kubectl delete deployment nginx-deployment -n k8s-practice
4. 부록 k8s 용어집
1. Pod (파드)
- 파드는 Kubernetes에서 스케줄링 가능한 가장 작은 단위입니다. 하나 이상의 컨테이너를 포함할 수 있으며, 이 컨테이너들은 스토리지, 네트워크를 공유하고, 어떻게 실행될지에 대한 방식을 지정합니다.
- 2*. Node (노드)
- 노드는 파드가 배포되는 물리적 또는 가상의 기계입니다. 각 노드는 마스터에 의해 관리되며, 파드의 운영을 지원하기 위한 리소스(스케줄링, 실행, 모니터링 등)를 제공합니다.
- 3.* Service (서비스)
- 서비스는 일련의 동적 파드에 대한 지속적인 접근을 제공하는 추상적인 개념으로, 로드 밸런싱, 서비스 디스커버리, 고정 IP 주소를 포함합니다.
- 4.* Deployment (디플로이먼트)
- 디플로이먼트는 파드와 레플리카셋의 선언적 업데이트를 관리합니다. 이를 통해 사용자는 애플리케이션을 롤아웃, 업데이트 및 롤백할 수 있습니다.
- 5.* ReplicaSet (레플리카셋)
- 레플리카셋은 한 개 이상의 파드 복사본을 유지하도록 보장합니다. 이는 파드의 가용성을 유지하는 데 중요합니다.
- 6*. ConfigMap (컨피그맵)
- 컨피그맵은 구성 데이터를 키-값 쌍으로 저장하여 애플리케이션 코드의 구성 정보를 파드에서 분리할 수 있게 해줍니다. 이를 통해 애플리케이션을 재배포하지 않고도 설정을 변경할 수 있습니다.
- 7.* Secret (시크릿)
- 시크릿은 비밀번호, OAuth 토큰, SSH 키와 같은 민감한 정보를 저장하는데 사용됩니다. 이 정보들은 시크릿을 사용하여 안전하게 파드에 주입될 수 있습니다.
- 8* Volume (볼륨)
- 볼륨은 파드가 존재하는 동안 데이터를 유지할 수 있는 디렉토리입니다. 다양한 유형의 볼륨이 지원되며, 파드 내의 컨테이너 간, 또는 파드의 인스턴스 간에 데이터를 공유할 때 사용됩니다.
728x90
반응형
LIST
'TIL' 카테고리의 다른 글
10_4.k8s 볼륨, Persistent Volumes, StatefulSets의 이해 및 실습 (0) | 2025.03.03 |
---|---|
10_3.k8s Service 및 Ingress 컨트롤러 실습 (0) | 2025.03.03 |
10_1.Kubernetes 개념 및 Minikbue 설치 및 구성 (0) | 2025.02.24 |
9_5.Docker 보안 및 운영 관리 (0) | 2025.02.21 |
9_4.Docker 를 활용한 Log 관리 (0) | 2025.02.20 |