1. 문제 Job 생성 및 실행확인1) 시나리오(1) 'hello-job'Job 생성: busybox이미지를 생성하여 Job을 생성하며 해당 명령어를 실행해야 함.echo "Hello, Kubernetes!" && sleep 10 && echo "Job Complete!" 2) 해결과정 (1) YAML 작성 #hello-job.yamlapiVersion: batch/v1kind: Jobmetadata: name: hello-jobspec: template: spec: containers: - name: busybox image: busybox command: ["sh", "-c", "echo 'Hello, Kubernetes!' && sleep 10 &..
1. 문제 시나리오 #1 노드 셀렉터- 특정 어플리케이션이 특정 노드에서만 실행되도록 설정 - 노드 레이블 설정: 노드 중 하나에 disktype=ssd라는 레이블을 추가- 파드 생성: nginx 이미지의 파드로, disktype=ssd 레이블이 있는 노드에서만 실행되어야 한다. 1) 해결과정 (1) 노드에 레이블 추가kubectl label nodes disktype=ssd(2) YAML 파일 작성#nginx-pod.yamlapiVersion: v1kind: Podmetadata: name: nginx-podspec: containers: - name: nginx image: nginx nodeSelector: disktype: ssd(3)파드 생성 kubectl apply -f n..
1. 문제 시나리오- 쿠버네티스 클러스터에서 어플리케이션의 리소스 사용량을 제한1) Deployment 생성- 이미지: stress-ng- 이름: stress-deployment- 2개의 레플리카- CPU 요청: 500m- CPU 제한: 1- 메모리 요청: 256Mi- 메모리 제한: 512Mi2) ResourceQuota 생성 - default 네임스페이스에 ResourceQuota를 생성하여 다음 제한 설정 - 총 CPU 요청: 최대 2- 총 CPU 제한: 최대 4- 총 메모리 요청: 최대 1Gi- 총 메모리 제한: 최대 2Gi2. 문제 해결과정1) Deployment 생성 apiVersion: apps/v1kind: Deploymentmetadata: name: stress-deployment ..
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) 네트워크 연결성 확인- 노드 간 네트워크 연결 상..