1. 문제 시나리오1) ConfigMap 생성 - nginx.conf 파일을 포함하는 ConfigMap 'nginx-config'를 생성 server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html; }}2) Secret 생성- 민감한 데이터를 저장하는 Secret 'nginx-secret'을 생성- username: admin(Base64로 인코딩)- password: password(Base4로 인코딩)3) Deployment 생성- nginx 이미지를 사용하여 디폴로이먼트(nginx-deployment)를 생성 - 2개의 레플리카- COnfigMap의 nginx...
1. 문제: 쿠버네티스 배포 및 롤링 업데이트1) 요구사항(1) 어플리케이션 배포- nginx:1.19 이미지를 사용하는 디플로이먼트 'nginx-deployment', 3개의 레플리카 실행 (2) 롤링 업데이트 수행 - nginx의 버전을 1.19에서 1.20으로 업데이트(3) 롤백수행- 롤링 업데이트 이후 문제가 발생했다고 가정하고 이전 버전으로 롤백 2. 해결과정1) 어플리케이션 배포kubectl create deployment nginx-deployment --image=nginx:1.19 --replicas=3 2) 롤링 업데이트 수행 (1) 이미지 업데이트 - kubectl set image명령어를 사용하여 이미지를 변경 kubectl set image deployment/nginx-deplo..
1. kubeadm을 사용하여 쿠버네티스 클러스터 버전 업그레이드 - 1.27.0 -> 1.28.0 로 업그레이드해야 함 1) 현재 상태 및 업그레이드 가능한 버전 확인 - 현재 상태 확인 kubectl get nodesNAME STATUS ROLES AGE VERSIONcontrol-plane Ready control-plane 100d v1.27.0worker-node-1 Ready 100d v1.27.0worker-node-2 Ready 100d v1.27.0- 업그레이드 가능 버전확인: 만약 찾는 버전이 없을 경우, vi /etc/apt/sources.list...
1. 문제시나리오- kubeadm을 활용하여 kubernetes 클러스터를 설치 1) 환경 요구 사항 - 컨트롤플래인 노드1개와 워크 노드 2개를 사용- OS Image: Ubuntu 20.04- 컨트롤 플레인 노드의 IP: 192.168.010- 워커 노드의 IP: 192.168.0.11, 192.168.0.12 - Pod 네트워크는 192.168.0.0/16 CIDR 범위 사용 - 컨테이너 런타임으로 containerd를 사용 - 쿠버네티스 버전은 1.30.0- 모든 노드에서 kubeadm, kubelet, kubectl을 설치- CNI: Calico 네트워크 플러그인을 사용2. 문제 해결과정1) 컨테이너 런타임 설치- 모든 노드에서 containerd를 설치하고 구성(1) 패키지 업데이트 후 con..
1. Network CNI Notready TroubleShooting 1) 문제 상황 진단: 워커 노드가 안됨 $ kubectl get nodesNAME STATUS ROLES AGE VERSIONmaster-node Ready master 15d v1.24.0worker-node01 NotReady 15d v1.24.02) 문제 해결 과정$ kubectl describe node worker-node01...Conditions: Type Status LastHeartbeatTime Reason Message ---- ..
1. JSONPath1) JSONPath 사용 이유 - 수백개의 노드와 수천개의 파드, 디플로이먼트 등의 리소스 정보를 효율적으로 조회해야 할 때 유용- 특정 필드만 선택적으로 출력하거나 원하는 형식으로 데이터를 가공 2) 기본 문법 kubectl get -o jsonpath='{}' 3) 주요 사용 예시 (1) 단일 필드 조회 # 노드 이름 조회kubectl get nodes -o jsonpath='{.items[*].metadata.name}'# 출력 예시master worker1 worker2# 파드 IP 조회 kubectl get pods -o jsonpath='{.items[*].status.podIP}'# 출력 예시10.244.0.5 10.244.1.3 10.244.2.7(2) 여러 줄 출력..
1. 어플리케이션 장애 해결1) 어플리케이션 접근성 테스트 (1) 프론트엔드 테스트- `curl http://web-service-ip:node-port`를 사용하여 웹 어플리케이션 접근성 테스트 - 성공시 HTTP 응답과 함꼐 웹페이지 표시됨 (2) 연결 시간 초과 오류 분석curl: (7) Failed to connect to web-service-ip port node-port: Connection timed out- 연결 시간 초과 오류가 발생하면 추가 조사 진행 (3) 일반적인 확인 사항 - 서비스 포트가 올바르게 설정되어 있는지 확인- 파드가 정상적으로 실행 중인지 상태확인 - 웹서버 어플리케이션이 지정된 포트에서 수신 대기 중인지 확인 (4) 네트워크 연결성 확인- 노드 간 네트워크 연결 상..
1. 쿠버네티스 클러스터 설계 가이드 1) 목적별 구성 (1) 학습용: minikube 또는 단일 노드 클러스터(kubeadm 사용)(2) 개발/테스트용: 단일 마스터와 다중 워커 노드 구성(3) 프로덕션용: 고가용성 다중 마스터 노드 구성 2) 프로덕션 클러스터 사양 (1) 클러스터 제한사항 - 최대 5000개 노드- 최대 150000개 파드- 최대 300000개 컨테이너- 노드당 최대 100개 파드(2) 서버 스팩별 노드 요구사항노드 수GCP 인스턴스스펙AWS 인스턴스스펙1-5N1-standard-1 1 vCPU, 3.75GBM3.medium1 vCPU, 3.75GB6-10N1-standard-2 2 vCPU, 7.5GBM3.large2 vCPU, 7.5GB11-100N1-standard-4 ..
1. 이미지 - 도커 이미지를 안전하게 관리하는 것도 클러스터 보안의 중요한 부분이다. 1) 이미지 이름 구조- Docker 이미지 이름은 일반적으로 user/repository:tag 형식을 따른다. - nginx:library/nginx에서 비롯되며 library는 Docker Hub의 공식 이미지 저장소를 의미 2) 이미지 저장소 - 기본적으로 이미지는 Docker Hub(docker.io) 에서 가져오며 gcr.io 구글 컨테이너, Amazon ECR 등에서도 가져올 수 있다. - 보안을 위해서 private 내부 레지스트리를 사용할 수 있다. 3) 프라이빗 레지스트리 사용 (1) 프라이빗 레지스트리에 접근- Docker CLI를 사용하여 프라이빗 레지스트리에 로그인 docker login (2)..
1. Ingress1) 정의- Ingress: 쿠버네티스 클러스터 내부의 여러 서비스를 외부로 노출하기 위한 단일 진입점 역할- 각 서비스 마다 개별적으로 LoadBalance, NodePort를 사용하는 번거로움을 줄임 - 도메인 기반 가상 호스팅: 하나의 Ingress를 통해 여러 도메인 이름(app1.example.com, app2.example.com)으로 트래픽 처리 가능 2) 구성요소 (1) Ingress 리소스 - 외부 트래픽을 클러스터 내부 서비스로 라우팅하기 위한 규칙을 정의하는 객체- 호스트 이름과 URL경로를 기반으로 트래픽을 특정 서비스와 포트로 전달하는 규칙을 담고 있다.(2) Ingress 컨트롤러- Ingress 리소스의 규칙을 구현하는 특수한 로드밸런서 - 대표적인 Ingre..