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..
1. Core DNS1) 정의- 쿠버네티스 클러스터에서 DNS 역할을 수행하는 기본 DNS서버로, 쿠버네티스는 클러스터 내부에서 Pod와 서비스 간의 통신을 윟나 이름 해석을 제공하기 위해 CoreDNS을 사용 - 플러그인 기반 아키텍처로 설계되어 있으며, 유연하고 확장 가능한 DNS 솔루션 2) 주요 역할(1) Pod와 서비스의 이름 해석- Pod와 서비스는 IP 주소 대신 이름으로 서로를 참조 가능 (2) 클러스터 내부 DNS 관리- 클러스터 내에서 생성된 서비스와 Pod에 대해 자동으로 DNS 레코드를 생성 - ClusterIP, NodePort, LoadBalancer 등 모든 서비스 유형에 대해 DNS를 제공 (3) 확장성과 유연성:- 플러그인 기반 구조로 다양한 기능(캐싱,로깅,외부 DNS 포..
1. 쿠버네티스 서비스란?1) 서비스의 정의- 쿠버네티스에서 Pod를 안정적으로 접근할 수 있는 네트워크 엔드포인트를 제공- Pod는 동적으로 생성되고 삭제되므로, 서비스는 고정된 IP주소와 DNS이름을 제공하여 클라이언트가 Pod에 안정적으로 접근 2) 유형(1)ClusterIP- 기본 서비스유형- 클러스터 내부에서만 접근 가능- Pod 간 통신에 사용- DB 와 같은 내부 애플리케이션에서 사용 (2) NodePort- 클러스터 외부에서 접근 가능하도록 노드의 고정포트를 노출- : 형식으로 접근- 웹서버와 같은 외부 어플리케이션에서 사용(3) LoadBalancer - 로드밸런서를 통해 외부 트래픽을 서비스로 라우팅- 클라우드 제공자와 연동이 가능- NodePort와 ClusterIP를 기반으로 동작..
1. CNI1) 정의- 컨테이너 런타임과 네트워크 플러그인 간의 상호작용을 정의하는 표준 인터페이스 2) 역할- 컨테이너 생성 시 네트워크 설정 자동화 - IP 주소 할당 및 라우팅 테이블 구성- 컨테이너 삭제 시 네트워크 정리 (1) 컨테이너 런타임과 CNI- 컨테이너 런타임: 컨테이너를 생성, 실행, 관리하는 소프트웨어로 컨테이너의 핵심적인 동작을 지원하며, 쿠버네티스와 같은 오케스트레이션 도구와 통합되어 클러스트 내에서 컨테이너 배포 및 관리를 자동화 (Docker, Containerd, CRI-O)- 컨테이너 런타임은 CNI 플러그인을 호출하여 Pod의 네트워크를 설정 (2) CNI플러그인의 동작 - 컨테이너 런타임은 Pod 생성시 CNI플러그인을 호출 - CNI 플러그인은 Veth Pair 생성..
1. 쿠버네티스 클러스터의 네트워크 기본 구성1) 클러스터 구조(1) 마스터 노드- 쿠버네티스 컨트롤 플레인을 실행 - API 서버, 스케줄러, 컨트롤러 매니저, ETCD와 같은 주요 컴포넌트를 포함(2) 워커 노드- 애플리케이션 워크로드를 실행하여, kubelet과 kube-proxy가 동작 2) 네트워크 요구 사항(1) 노드 인터페이스 - 각 노드는 최소 하나 이상의 네트워크 인터페이스를 가져야 하며, 이 인터페이스는 고유한 IP 주소를 가져야 함 - 각 노드는 고유한 호스트 이름과 MAC 주소를 가져야 하며, 이는 특히 VM을 복제하여 생성한 경우 확인해야 함.(2) 마스터 노드 필수 포트- 6443: Kubernetes API 서버 포트- 10259: Kubernetes 스케줄러 사용 포트- 1..
1. 볼륨1) 컨테이너와 Pod 의 특성- Docker 컨테이너와 쿠버네티스 파드는 일시적으로 설계되었습니다. 작업 완료 후 삭제 되며, 내부데이터도 함께 사라짐- Kubernetes의 파드도 일시적이며, 파드가 삭제되면 데이터도 삭제됨 2) 쿠버네티스에서 볼륨 사용- 쿠버네티스의 파드도 일시적이며 파드가 삭제되면 데이터도 사라짐- 따라서 중요한 데이터의 유실을 방지하기 위해 볼륨을 파드에 연결하여 데이터를 외부에 저장하여 데이터를 독립적으로 유지3) 볼륨 구현 예제 apiVersion: v1kind: Podmetadata: name: random-number-generatorspec: containers: - image: alpine name: alpine command: [..