[POD 구성요소]
Deployment → ReplicaSet → Pod
리소스 역할
Pod | 컨테이너가 실제로 동작하는 최소 단위 |
ReplicaSet | 같은 Pod를 여러 개 복제해서 유지 |
Deployment | ReplicaSet을 자동으로 생성하고 관리해주는 컨트롤러 |
[Control Plane 구성요소]
- kube-apiserver
- 모든 명령/요청이 오가는 핵심 진입점 (쿠버네티스의 프론트엔드 역할)
- 인증, 권한 부여, REST API 처리
- etcd
- 쿠버네티스의 모든 상태 데이터를 저장하는 Key-Value 저장소(데이터베이스)
- 클러스터 설정, 파드 상태, 네트워크 정보 등을 저장
- kube-scheduler
- 새로운 파드를 적절한 노드에 스케줄링(배치)
- kube-controller-manager
- 다양한 컨트롤러들을 실행해서 클러스터 상태를 목표 상태로 유지
- cloud-controller-manager (선택 사항)
- 클라우드 환경에 연결되는 컨트롤러 실행
- 노드, 라우팅, 볼륨 등 클라우드 리소스를 쿠버네티스와 연동
[Worker Node 구성요소]
- kubelet
- 각 노드에서 실행되며, 파드 실행 상태를 관리
- 컨트롤 플레인과 통신하여 명령을 수신하고 파드를 생성/관리
- kube-proxy
- 네트워크 프록시 역할
- 서비스 클러스터 IP와 각 파드를 연결해주는 로드밸런싱 처리
- 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 |