본문 바로가기

Kubernetes19

쿠버네티스 스토리지 컨테이너 환경에서 별도 설정을 하지 않으면 데이터는 호스트 노드의 임시 디스크(ephemeral disk)에 보관된다. 컨테이너를 삭제하면 임시 디스크에 있는 데이터는 저장되지 않고 컨테이너와 함께 삭제된다. 이러한 문제를 쿠버네티스에서는 파드와 데이터를 분리해서 영구 볼륨이라는 별도의 추상화된 리소스로 해결한다. 쿠버네티스 볼륨 구성 주요 리소스 영구 볼륨(PV, PersistentVolume) 영구볼륨 요청자(PVC, PersistentVolumeClaim) 스토리지 클래스(StorageClass) 오픈소스 OpenEBS 로컬 호스트패스를 이용해 스토리지 클래스를 만들고 스토리지 관련 설정을 YAML로 작성해보자. apiVersion: v1 kind: Pod metadata: name: busybox.. 2024. 2. 26.
MetalLB를 이용한 로드밸런서 타입 서비스 구축 노드포트 타입 서비스는 외부 클라이언트에서 접속했을 때 특정 도메인이 아닌 특정 노드가 실제로 사용하는 IP 주소를 지정해서 접속한다. 하지만 노드 IP는 변경될 수 있고, 80, 443 등 기본 포트가 아닌 특수 포트 30000 ~ 32767 중 하나의 포트를 사용해야 하므로 실제 서비스에 적응하기는 어렵다. 이를 해결하기 위해 쿠버네티스는 부하분산이 가능한 로드밸런서 타입의 서비스를 제공한다. NodePort: 100.2.3.4:30000 접속 Load-Balancer: http(s)://www.myweb.com 접속 *퍼블릭 클라우드에서는 로드밸런서를 사용하면 추가 비용이 발생하기 때문에 주로 Ingress를 사용해 비용을 절감한다. 대표적인 LB 솔루션은 MetalLB와 Porter가 있다. (둘.. 2024. 2. 23.
kube-proxy 부하분산 설정의 이해 모든 쿠버네티스 서비스는 기본 설정으로 부하분산을 지원한다. 쿠버네티스의 모든 노드에서 실행 중인 kube-proxy 파드는 노드 내에서 실행 중인 모든 파드의 네트워크 트래픽을 처리한다. kube-proxy는 쿠버네티스 서비스와 연동해서 파드의 모든 인그레스(Ingress), 이그레스(egress) 통신을 처리한다. kube-proxy는 기본 설정으로 IPVS(IP Virtual Server) 모드로 동작한다. kube-proxy 모드 관련 설정은 kube-proxy 설정 파일인 컨피그맵에서 확인 가능하다. kubectl describe cm -n kube-system kube-proxy ... mode: ipvs ... #파드의 수량을 5개로 k scale deployment nginx-hello -.. 2024. 2. 23.
쿠버네티스 DNS 기능 이해 쿠버네티스 Core DNS Local DNS kubectl get pod -o wide -n kube-system NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES coredns-787d4945fb-dvd6h 1/1 Running 3 (16d ago) 73d 10.10.77.148 master-node coredns-787d4945fb-smzwr 1/1 Running 3 (16d ago) 73d 10.10.77.149 master-node etcd-master-node 1/1 Running 1 (16d ago) 56d 192.168.0.27 master-node kube-apiserver-master-node 1/1 Running.. 2024. 2. 22.
쿠버네티스 서비스(service) 사용하기 (1) 쿠버네티스 서비스에서는 파드 간 연결을 가리켜 파드를 노출(expose)한다. 라고 표현한다. 쿠버네티스 서비스는 동적으로 각 파드 간 연결을 제공한다. = 서비스 디스커버리한다. 쿠버네티스는 파드의 연결을 제공(Serve)한다는 의미로 서비스라는 용어를 쓴다. 클러스터 내부 혹은 외부 연결에 따라 서비스 타입을 다음과 같이 구분한다. 클러스터 내부에서 파드와 파드를 연결: 클러스터IP (Cluster IP), 헤드리스(Headless) 클러스터 외부에서 클러스터 내부의 파드를 연결: 노드포트 (NodePort), 로드밸런서(LoadBalancer) 서비스는 쿠버네티스 리소스의 한 종류 다이나믹하게 종료되고 생성되는 파드를 자동으로 발견(Service Discovery)한다. 변경이 잦은 IP 주소가 아.. 2024. 2. 22.
Helm 헬름 활용(3) 개요 1. 헬름 템플릿 변수 파일 사용하기 2. 리소스 Requests/Limits 이해 1. 헬름 템플릿 변수 파일 사용하기 vi templates/deployment.yaml {{- if .Values.resources }} resources: {{- toYaml .Values.resources | nindent 12 }} {{- else if ne .Values.resourcesPreset "none" }} resources: {{- include "common.resources.preset" (dict "type" .Values.resourcesPreset) | nindent 12 }} {{- if .Values.resources }} if 문을 사용해 resources 변수가 정의돼 있으면 해당.. 2024. 2. 19.
Helm 헬름 활용(2) 개요 1.헬름을 이용해서 Nginx 설치하기 2. startup probe, liveness probe, readiness probe 알아보기 helm repo add bitnami https://charts.bitnami.com/bitnami helm repo ls NAME URL github-ksh https://sunghyun-kim-nhn.github.io/k8s-study-helm bitnami https://charts.bitnami.com/bitnami helm search repo nginx NAME CHART VERSION APP VERSION DESCRIPTION bitnami/nginx 15.11.0 1.25.4 NGINX Open Source is a web server that c.. 2024. 2. 19.
Helm 헬름 활용(1) 쿠버네티스는 리소스가 여러 개 필요한 경우가 많다. 파드 노출을 담당하는 서비스(Service) 애플리케이션 설정에 관련된 컨피그맵(ConfigMap) 기밀 정보를 다루는 시크릿(Secret) 다양한 리소스를 각각 관리하지 않고 하나의 패키지로 관리하는 도구가 헬름(Helm)이다. 주요 구성 요소 헬름 차트(Helm Chart): 여러 리소스의 묶음 헬름 차트 하나로 여러 어플리케이션을 일괄 설치 가능 Chart.yaml: 차트에 대한 정보가 담긴 yaml 파일 values.yaml: 차트의 기본 템플릿 변수 파일 charts/: 차트에 종속된 차트들을 포함하는 디렉터리 crds/: 커스텀 자원 정의 templates/: values 파일과 같이 유효한 쿠버네티스 매니페스트 파일을 생성하는 템플릿 헬름 .. 2024. 2. 19.
잘못된 pod 생성 트러블 슈팅 wrong-nginx-version.yaml apiVersion: v1 kind: Pod metadata: name: nginx-19 spec: containers: - name: nginx-pod image: nginx:1.19.19 kubectl apply -f wrong-nginx-version.yaml 더보기 Name: nginx-19 Namespace: default Priority: 0 Service Account: default Node: worker-node1/192.168.0.62 Start Time: Thu, 15 Feb 2024 14:50:54 +0900 Labels: Annotations: cni.projectcalico.org/containerID: 25ff3ed7ed37842f4.. 2024. 2. 15.
쿠버네티스 트러블슈팅의 기본 프로세스 쿠버네티스 디버깅 프로세스 작업 순서는 다음과 같다. apply -> get -> describe -> logs -> get event 1. yaml 파일을 이용해 오브젝트를 생성(apply)하고, 생성한 오브젝트 리스트는 get 명령어로 확인한다. 2.만약 파드가 정상적으로 생성되지 않으면 상세한 설정 정보를 describe 명령어로 확인한다. 3. 이후 어플리케이션 관련 에러는 로그 명령어(logs)로 확인하고 쿠버네티스 클러스터 관련 메시지는 이벤트 명령어(get event)로 확인한다. 2024. 2. 15.