Kubernetes Storage_Emptydir 쿠버네티스에서 emptyDir 볼륨은 파드가 노드에 할당될 때 처음으로 생성되며, 초기에는 비어 있습니다. 파드가 실행되는 동안 emptyDir 볼륨은 계속 존재하며, 파드 내의 모든 컨테이너에서 공유될 수 있습니다. 파드가 노드에서 제거되면 emptyDir 볼륨의 내용도 삭제됩니다. 이는 일시적인 데이터를 저장하거나 컨테이너 간에 데이터를 공유하는 데 유용합니다. 다음은 각 YAML 파일에 대한 설명입니다. myapp-pod-git.yaml 이 YAML 파일은 Pod를 정의하며, 이 Pod는 초기화 컨테이너를 사용하여 git 저장소를 클론합니다. 클론된 저장소는 emptyDir 볼륨에 저장되며, 이 볼륨은 git-container라는 이름의 컨테이너에서..
Kubernetes Headless_Service 쿠버네티스에서 Headless Service는 클러스터 IP를 할당하지 않는 서비스를 말합니다. 대신, 클라이언트는 서비스를 통해 파드의 IP 주소를 직접 조회할 수 있습니다. 이는 특정 파드에 직접 연결해야 하는 경우나, 서비스 디스커버리를 위해 DNS를 사용하는 경우에 유용합니다. 다음은 각 YAML 파일에 대한 설명입니다. myapp-rs-headless.yaml 이 YAML 파일은 ReplicaSet을 정의합니다. 이 ReplicaSet은 동일한 파드의 복사본을 여러 개 유지하도록 보장합니다. apiVersion: apps/v1 kind: ReplicaSet metadata: name: myapp-rs-headless spec: replicas: ..
Kubernetes Readiness Probe 쿠버네티스에서 Readiness Probe는 컨테이너가 트래픽을 받을 준비가 되었는지를 확인하는 역할을 합니다. 이는 서비스가 트래픽을 안전하게 라우팅할 수 있도록 보장하는 중요한 기능입니다. 일정한 간격으로 애플리케이션의 상태를 확인하고, 특정 조건을 충족할 때 애플리케이션을 "레디(Ready)" 상태로 표시합니다. 이는 클라이언트의 요청을 처리할 준비가 된 상태를 의미하며, 클러스터의 로드 밸런서 등에서 애플리케이션을 배포 가능한 상태로 간주합니다. 레디니스 프로브는 HTTP 요청, TCP 소켓 연결, 컨테이너 내부 명령 실행 등 다양한 방법으로 애플리케이션의 상태를 확인할 수 있습니다. 프로브는 애플리케이션의 특정 엔드포인트나 포트를 대상으로 요청을 ..
Kuernetes Ingress 쿠버네티스에서 Ingress는 클러스터 외부에서 클러스터 내부의 서비스로 HTTP 및 HTTPS 경로를 노출하는 역할을 합니다. 이는 트래픽 라우팅을 제어하며, 이는 Ingress 리소스에 정의된 규칙에 의해 이루어집니다. 다음은 각 YAML 파일에 대한 설명입니다. myapp-rs.yaml 이 YAML 파일은 쿠버네티스의 ReplicaSet을 정의합니다. ReplicaSet은 동일한 파드의 복사본을 여러 개 유지하도록 보장합니다. apiVersion: apps/v1 kind: ReplicaSet metadata: name: myapp-rs spec: replicas: 3 selector: matchLabels: app: myapp-rs template: metadata:..
Kuernetes 외부 서비스 쿠버네티스에서 외부 서비스를 사용하면, 클러스터 외부의 클라이언트들이 서비스를 찾고 통신할 수 있습니다. 이는 서비스 디스커버리를 가능하게 하며, 클러스터 외부의 클라이언트가 동적으로 생성되고 사라지는 파드와 통신할 수 있게 합니다. 다음은 외부 서비스를 테스트하기 위한 명령어입니다: kubectl run nettool --image ghcr.io/c1t1d0s7/network-multitool -it --rm > host -v example.default.svc.cluster.local kubectl run 명령어는 ghcr.io/c1t1d0s7/network-multitool 이미지를 사용하여 nettool이라는 이름의 파드를 실행합니다. 이 파드는 네트워크 문제를 진단..
Kuernetes 내부 서비스 쿠버네티스에서 내부 서비스를 사용하면, 클러스터 내의 다른 파드들이 서비스를 찾고 통신할 수 있습니다. 이는 서비스 디스커버리를 가능하게 하며, 파드가 동적으로 생성되고 사라지는 환경에서 중요한 역할을 합니다. 다음은 내부 서비스를 테스트하기 위한 명령어들입니다: kubectl run nettool -it --image ghcr.io/c1t1d0s7/network-multitool --rm > host myapp-svc.default.svc.cluster.local > curl http://myapp-svc.default.svc.cluster.local > curl http://myapp-svc kubectl run 명령어는 ghcr.io/c1t1d0s7/network-mu..
쿠버네티스에서는 주기적으로 작업을 실행할 수 있는 CronJob이라는 리소스를 제공합니다. CronJob은 특정 스케줄에 따라 Job을 생성하며, 이 Job은 하나 이상의 Pod를 생성하여 작업을 수행하고 완료된 후에는 Pod를 삭제합니다. myapp-cj-dl-al.yaml: 이 CronJob은 매 분마다 Job을 생성합니다. startingDeadlineSeconds는 CronJob이 시작할 수 있는 마지막 시간을 초 단위로 설정합니다. 이 경우, CronJob은 스케줄이 시작된 후 100초 이내에 시작해야 합니다. concurrencyPolicy는 Allow로 설정되어 있어, 이전 Job이 완료되지 않은 상태에서도 새 Job을 시작할 수 있습니다. apiVersion: batch/v1 kind: C..
쿠버네티스에서 Job은 한 번 실행되면 완료되는 작업을 수행하는 Pod를 생성하고 관리합니다. Job은 배치 작업, 크론 작업 등에 유용하게 사용될 수 있습니다. myapp-job.yaml: 이 Job은 Perl 스크립트를 실행하는 Pod를 생성하며, 스크립트는 원주율의 첫 1000자리를 계산합니다. Pod가 실패할 경우 재시작 정책은 'OnFailure'로 설정되어 있습니다. apiVersion: batch/v1 kind: Job metadata: name: myapp-job spec: template: metadata: labels: app: myapp-job spec: restartPolicy: OnFailure containers: - name: pi image: perl comma..
쿠버네티스에서 DaemonSet은 클러스터의 모든 노드에 특정 Pod를 실행하도록 보장하는 역할을 합니다. 이는 로깅, 모니터링 등의 노드 수준의 기능을 구현하는 데 유용합니다. 다음은 myapp-ds라는 이름의 DaemonSet를 생성하는 myapp-ds.yaml 파일입니다. 이 DaemonSet은 app 레이블의 값이 myapp-ds인 Pod를 클러스터의 모든 노드에 배포하도록 설정되어 있습니다. 또한, nodeSelector를 사용하여 node 레이블의 값이 development인 노드에만 Pod를 배포하도록 설정되어 있습니다. apiVersion: apps/v1 kind: DaemonSet metadata: name: myapp-ds spec: selector: matchLabels: app: m..
쿠버네티스에서 ReplicaSet은 지정된 수의 Pod 복제본이 항상 실행되도록 보장하는 역할을 합니다. 이는 ReplicationController와 비슷하지만, 더욱 유연한 Pod 선택 기능을 제공합니다. 다음은 myapp-rs-exp라는 이름의 ReplicaSet를 생성하는 myapp-rs-exp.yaml 파일입니다. 이 ReplicaSet는 app 레이블의 값이 myapp-rs-exp이며, env 레이블이 존재하는 Pod를 3개 유지하도록 설정되어 있습니다. apiVersion: apps/v1 kind: ReplicaSet metadata: name: myapp-rs-exp spec: replicas: 3 selector: matchExpressions: - key: app operator: In..