본문 바로가기

IT 엔지니어/CLOUD

Docker POD

[POD 구성요소]

Deployment → ReplicaSet → Pod

리소스 역할

Pod 컨테이너가 실제로 동작하는 최소 단위
ReplicaSet 같은 Pod를 여러 개 복제해서 유지
Deployment ReplicaSet을 자동으로 생성하고 관리해주는 컨트롤러

 

 [Control Plane 구성요소]

  1. kube-apiserver
    • 모든 명령/요청이 오가는 핵심 진입점 (쿠버네티스의 프론트엔드 역할)
    • 인증, 권한 부여, REST API 처리
  2. etcd
    • 쿠버네티스의 모든 상태 데이터를 저장하는 Key-Value 저장소(데이터베이스)
    • 클러스터 설정, 파드 상태, 네트워크 정보 등을 저장
  3. kube-scheduler
    • 새로운 파드를 적절한 노드에 스케줄링(배치)
  4. kube-controller-manager
    • 다양한 컨트롤러들을 실행해서 클러스터 상태를 목표 상태로 유지
  5. cloud-controller-manager (선택 사항)
    • 클라우드 환경에 연결되는 컨트롤러 실행
    • 노드, 라우팅, 볼륨 등 클라우드 리소스를 쿠버네티스와 연동

 [Worker Node 구성요소]

  1. kubelet
    • 각 노드에서 실행되며, 파드 실행 상태를 관리
    • 컨트롤 플레인과 통신하여 명령을 수신하고 파드를 생성/관리
  2. kube-proxy
    • 네트워크 프록시 역할
    • 서비스 클러스터 IP와 각 파드를 연결해주는 로드밸런싱 처리
  3. container runtime
    • 컨테이너를 실제로 실행시키는 엔진
    • 예: containerd, Docker, CRI-O 등

 

 

[시스템 정보 확인]

kubectl get pod -n kube-system -o wide

kubectl describe nodes [master]

[네임스페이스]

하나의 클러스터를 
여러 개의 논리적 단위로 분리 기술

kubectl create namaspace something

kubectl run nginx --image=nginx (--namespace=something)=-n something

kubectl config set-context --current --namespace=my-namespace

---------------------------------------

[yaml로 네임스페이스 생성]
1. 야물 파일 생성 명령어

kubectl run myns2 --dry-run=client -o yaml > myns2.yml

2. 야물파일 실행으로 네임스페이스 생성 
kubectl apply -f myns2.yml

kubectl get namespaces
NAME              STATUS   AGE
default           Active   2h
kube-node-lease   Active   2h
kube-public       Active   2h
kube-system       Active   2h

kubectl get pods -n default

 

 

 

 

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - image: nginx
    name: mypod
    ports:
      - containerPort: 80
        protocol: TCP
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always

kubectl apply/create -f mypod2.yml -n myns2 
--------------------------------------
kubectl get pods (default)
결과 없음

kubectl get pods -n myns2
---------------------------------------
NAME     READY   STATUS    RESTARTS   
mypod2   1/1     Running   0          
---------------------------------------

 

[하나의 POD 안 2개의 컨테이너]

apiVersion: v1
kind: ***Pod***
metadata:
  name: multi-container-pod
  ***namespace***: my-namespace
spec:
  containers:
  
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    
  - name: busybox
    image: busybox
    command: ['sh', '-c', 'while true; do echo hello; sleep 10; done']
    
 
 kubectl get pods -n my-namespace

 

[하나의 POD 2 개의 리소스 ]

apiVersion: v1
kind: ***Namespace***
metadata:
  name: myns4
---
apiVersion: v1
kind: ***Pod***
metadata:
  name: mypod2
  ***namespace : myns4***
spec:
  containers:
  - image: nginx
    name: mycon
    ports:
      - containerPort: 80
        protocol: TCP

 

 

 

✅ 1단계: bb에 대한 Service 생성

kubectl expose deploy bb --port=80 --target-port=80 -n mymy

  • 이 명령은 bb Deployment에 연결된 Pod에 포트 80으로 접근 가능한 ClusterIP 서비스를 만들어줘.
  • 서비스 이름도 bb가 돼.

✅ 2단계: aa의 Pod에 접속

kubectl get pods -n mymy

예를 들어:

NAME                     READY   STATUS    RESTARTS   AGE
aa-587d8d789c-6v9kg      1/1     Running   0          5m

그럼 aa의 Pod에 접속:

bash
코드 복사
kubectl exec -it aa-587d8d789c-6v9kg -n mymy -- /bin/bash

만약 nginx라서 bash 없으면:

kubectl exec -it aa-587d8d789c-6v9kg -n mymy -- /bin/sh


✅ 3단계: curl로 bb에 접근

curl <http://bb.mymy.svc.cluster.local>

또는 더 짧게:

curl <http://bb>

같은 네임스페이스(mymy) 안에서는 bb라고만 해도 DNS가 자동으로 인식돼.

✅ 생성된 Service 확인하는 방법

kubectl get svc -n mymy

'IT 엔지니어 > CLOUD' 카테고리의 다른 글

K8S POD 생성  (0) 2025.05.22
DOCKER NAMESPACE/STATEFULSET  (0) 2025.05.22
Docker 기본 명령어  (0) 2025.05.20
Docker Kubespray -1  (0) 2025.05.19
K8S -kubespray  (0) 2025.05.19