반응형
쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 배포, 관리, 확장, 자동화를 지원하는 오픈 소스 플랫폼입니다. 이 글은 쿠버네티스의 구성과 운영 방법을 단계별로 소개하며, 검색에 최적화된 구조로 작성되었습니다.
1. 쿠버네티스란?
쿠버네티스(K8s)는 다음과 같은 주요 기능을 제공합니다:
- 컨테이너 오케스트레이션: 컨테이너의 배포, 관리, 확장을 자동화.
- 셀프 힐링: 장애가 발생한 컨테이너를 자동으로 복구.
- 확장성: 사용량에 따라 애플리케이션을 자동으로 확장/축소.
- 로드 밸런싱: 트래픽을 분산하여 애플리케이션 가용성 보장.
주요 구성 요소
- Master Node(Control Plane):
- API Server: 클러스터와의 통신 인터페이스.
- Scheduler: 워크로드를 적합한 노드에 할당.
- etcd: 클러스터 상태를 저장하는 분산 키-값 저장소.
- Worker Node:
- Kubelet: 각 노드에서 Pod를 관리.
- Container Runtime: 컨테이너 실행 도구(Docker, containerd 등).
- Kube-Proxy: 네트워크 라우팅을 담당.
2. 쿠버네티스 구성
1) 사전 준비
- 클러스터 설정 요구사항:
- 최소 2개의 노드(1 Master, 1 Worker).
- 2 vCPU, 4GB RAM 이상 권장.
- 도구 설치:
- Docker 설치:
sudo apt-get update sudo apt-get install docker.io -y
- kubeadm, kubelet, kubectl 설치:
sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl
- Docker 설치:
2) 클러스터 생성
- Master Node 초기화:
- kubeadm join 명령어를 기록해두세요(Worker Node에서 사용).
- sudo kubeadm init --pod-network-cidr=192.168.0.0/16
- kubectl 설정:
- mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
- Worker Node 추가:
- Worker Node에서 아래 명령 실행:
sudo kubeadm join <MASTER_NODE_IP>:6443 --token <TOKEN> --discovery-token-ca-cert-hash sha256:<HASH>
- Worker Node에서 아래 명령 실행:
3) 네트워크 플러그인 설치
쿠버네티스는 Pod 간 통신을 위해 네트워크 플러그인이 필요합니다. Calico 설치 예제:
kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
3. 쿠버네티스 운영
1) 애플리케이션 배포
샘플 Nginx 애플리케이션 배포:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
배포 명령:
kubectl apply -f nginx-deployment.yaml
kubectl get pods
2) 서비스 생성
Pod에 접근할 수 있는 NodePort 서비스 생성:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30001
type: NodePort
서비스 확인:
kubectl apply -f nginx-service.yaml
kubectl get svc
3) 오토스케일링
- Horizontal Pod Autoscaler(HPA) 설정:
kubectl autoscale deployment nginx-deployment --cpu-percent=50 --min=1 --max=10
4. 모니터링 및 로깅
1) 기본 도구
- kubectl top 명령으로 자원 사용 확인:
kubectl top nodes kubectl top pods
2) Prometheus 및 Grafana
- Helm을 통해 Prometheus와 Grafana 설치:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm install prometheus prometheus-community/prometheus helm install grafana grafana/grafana
5. 트러블슈팅
1) Pod 상태 확인
- Pod 상태가 비정상이면 로그를 확인:
kubectl describe pod <pod-name> kubectl logs <pod-name>
2) 노드 상태 문제
- 노드 상태 확인:
kubectl get nodes kubectl describe node <node-name>
3) 네트워크 문제
- CoreDNS 문제 해결:
kubectl get pods -n kube-system | grep coredns kubectl logs -n kube-system <coredns-pod>
6. 쿠버네티스 심화 학습
1) Helm 활용
- Helm을 통해 Kubernetes 애플리케이션을 관리.
2) CI/CD 통합
- GitLab CI/CD 또는 Jenkins와 통합해 지속적 배포 자동화.
3) 클라우드 네이티브 도구 사용
- Service Mesh (예: Istio)로 애플리케이션 통신 제어.
- Kubernetes Operator로 상태 관리 자동화.
결론
쿠버네티스는 컨테이너 기반 애플리케이션의 배포와 관리에 최적화된 강력한 플랫폼입니다. 기본적인 클러스터 구성부터 애플리케이션 배포, 트러블슈팅까지 단계별로 학습하면 안정적이고 효율적인 클러스터 운영이 가능합니다. 필요에 따라 Helm, Prometheus, Grafana 등의 도구를 활용하여 쿠버네티스 생태계를 확장하세요.
반응형