Search

CKA

Kube-API Server

: μΏ λ²„λ„€ν‹°μŠ€ ν΄λŸ¬μŠ€ν„°μ˜ κΈ°λ³Έ 관리 ꡬ성 μš”μ†Œ

kubectl λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ ν•  λ•Œ Kube-API Server에 μ—°κ²°
μš”μ²­μ„ μΈμ¦ν•˜κ³  검증 ν•œ λ’€ ETCD ν΄λŸ¬μŠ€ν„°μ—μ„œ 데이터λ₯Ό 가져와 μš”μ²­ν•œ 정보λ₯Ό λ°˜ν™˜ ν•˜κ±°λ‚˜ μ—…λ°μ΄νŠΈ ν•˜λŠ” 역할을 ν•œλ‹€.
예λ₯Ό λ“€μ–΄ Pod λ₯Ό 생성 ν•˜λŠ” 경우, 인증을 거쳐 검증이 λλ‚œ 뒀에 API μ„œλ²„λŠ” Pod 객체λ₯Ό μƒμ„±ν•˜μ§€λ§Œ λ…Έλ“œμ— ν• λ‹Ή ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€. 이 μ •λ³΄λŠ” ETCD μ„œλ²„μ— μ—…λ°μ΄νŠΈ 되고, μ‚¬μš©μžλŠ” Pod κ°€ 생성 λ˜μ—ˆμŒμœΌλ‘œ μ•Œκ²Œ λœλ‹€.
μŠ€μΌ€μ€„λŸ¬λŠ” APIμ„œλ²„λ₯Ό 지속적을 λͺ¨λ‹ˆν„°λ§ ν•˜λ©΄μ„œ λ…Έλ“œκ°€ ν• λ‹Ήλ˜μ§€ μ•Šμ€ μƒˆ Pod κ°€ μžˆμŒμ„ μΈμ‹ν•œλ‹€. μŠ€μΌ€μ€„λŸ¬λŠ” μƒˆ Pod λ₯Ό λ°°μΉ˜ν•  μ μ ˆν•œ λ…Έλ“œλ₯Ό μ‹λ³„ν•˜κ³  이λ₯Ό Kube-API Server에 λ‹€μ‹œ 전달 ν•œλ‹€. 그러면 API μ„œλ²„λŠ” ETCD ν΄λŸ¬μŠ€ν„°μ— 정보λ₯Ό μ—…λ°μ΄νŠΈ ν•œλ‹€.
API μ„œλ²„λŠ” κ·Έ 정보λ₯Ό ν•΄λ‹Ή μž‘μ—… ν•˜λ €λŠ” λ…Έλ“œμ˜ kubelet 에 μ „λ‹¬ν•œλ‹€. kubelet 은 κ·Έ λ…Έλ“œμ—μ„œ Podλ₯Ό μƒμ„±ν•˜κ³ , μ»¨ν…Œμ΄λ„ˆ λŸ°νƒ€μž„ 엔진에 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 이미지λ₯Ό 배포 ν•˜λ„λ‘ μ§€μ‹œν•œλ‹€. 이후 μ™„λ£Œ 되면 kubelet 은 μƒνƒœλ₯Ό API μ„œλ²„μ— λ‹€μ‹œ μ—…λ°μ΄νŠΈν•˜κ³ , API μ„œλ²„λŠ” ETCD ν΄λŸ¬μŠ€ν„°μ— λ‹€μ‹œ 데이터λ₯Ό μ—…λ°μ΄νŠΈ ν•œλ‹€.

kubeadmin 도ꡬλ₯Ό μ‚¬μš© ν•΄ μ„€μ • ν•œ 경우,

kubeadmin-apiserverλ₯Ό λ§ˆμŠ€ν„° λ…Έλ“œμ˜ kube-system λ„€μž„ μŠ€νŽ˜μ΄μŠ€μ— Pod으둜 배포 Pod μ •μ˜ νŒŒμΌμ€ /etc/kubernetes/manifest 폴더에 μœ„μΉ˜
kubectl get pods -n kube-system # Pod λ₯Ό 확인 cat /etc/kubernetes/manifests/kube-apiserver.yaml # Pod μ •μ˜ 파일 경둜둜 μ΄λ™ν•˜μ—¬ 확인
Bash
볡사

kubeadmin을 μ‚¬μš©ν•˜μ§€ μ•Šμ€ 경우,

cat /etc/systemd/system/kube-apiserver.service # kube-apiserver μ„œλΉ„μŠ€λ₯Ό ν™•μΈν•˜μ—¬ μ˜΅μ…˜μ„ 확인 ps -aux | grep kube-apiserver # ν”„λ‘œμ„ΈμŠ€ λͺ©λ‘μ„ 좜λ ₯ ν–ˆμ„ λ•Œ μ‚¬μš© ν•œ μ˜΅μ…˜μ„ 확인
Bash
볡사

Kube Controller Manager

Kubernetes 의 μš©μ–΄λ‘œ μ»¨νŠΈλ‘€λŸ¬λž€ μ—¬λŸ¬ ꡬ성 μš”μ†Œμ˜ μƒνƒœλ₯Ό μ§€μ†μ μœΌλ‘œ λͺ¨λ‹ˆν„°λ§ν•˜κ³  μ‹œμŠ€ν…œ 전체λ₯Ό μ›ν•˜λŠ” μƒνƒœλ‘œ μœ μ§€ν•˜κΈ° μœ„ν•΄ μž‘λ™ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€
예λ₯Ό λ“€μ–΄, 두 κ°€μ§€μ˜ μ˜ˆμ‹œλ₯Ό 보일 수 있음.
λ…Έλ“œ 컨트둀러 : λ…Έλ“œμ˜ μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ ν•˜κ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 계속 μ‹€ν–‰ λ˜λ„λ‘ ν•„μš”ν•œ 쑰치λ₯Ό μ·¨ν•˜λŠ” 역할을 함.
볡제 컨트둀러 : λ ˆν”Œλ¦¬μΉ΄ μ…‹μ˜ μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ ν•˜κ³  항상 μ›ν•˜λŠ” 수의 PODκ°€ μ„ΈνŠΈ 내에 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” 역할을 함.
μ—¬λŸ¬ μ»¨νŠΈλ‘€λŸ¬λ“€μ€ Kubenetes Controller Manager λΌλŠ” 단일 ν”„λ‘œμ„ΈμŠ€λ‘œ νŒ¨ν‚€μ§€ λœλ‹€.
Kubernetes 릴리슀 νŽ˜μ΄μ§€μ—μ„œ λ‹€μš΄λ‘œλ“œν•˜μ—¬ 압좕을 ν’€κ³  μ„œλΉ„μŠ€λ‘œ μ‹€ν–‰ν•  수 있음.
wget https://dl.k8s.io/v1.31.1/bin/linux/amd64/kube-controller-manager
Bash
볡사
kube-controller-manager.service 에 λ‹€μ–‘ν•œ μ˜΅μ…˜μ„ 적용 ν•  수 μžˆλŠ”λ°, μ–΄λ–€ 컨트둀러만 ν™œμ„±ν™” μ‹œν‚¬μ§€, node-monitor-period, node-monitor-grace-period, pod-eviction-timeout 에 λŒ€ν•œ μ˜΅μ…˜μ„ 쀄 수 도 있음.

kube admin 도ꡬλ₯Ό μ‚¬μš© ν–ˆμ„ 경우

Kube Controller Managerλ₯Ό λ§ˆμŠ€ν„° λ…Έλ“œμ˜ Kube system λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— POD둜 배포
kubectl get pods -n kube-system # Pod λ₯Ό 확인 cd /etc/kubernetes/manifests/kube-controller-manager.yaml # μ •μ˜ νŒŒμΌμ—μ„œ μ˜΅μ…˜μ„ 확인
Bash
볡사

kube admin 도ꡬλ₯Ό μ‚¬μš© ν•˜μ§€ μ•Šμ•˜μ„ 경우

cat /etc/systemd/system/kube-controller-manager.service # μ„œλΉ„μŠ€ λ””λ ‰ν„°λ¦¬μ˜ μ„œλΉ„μŠ€λ₯Ό 확인 ν•˜μ—¬ μ˜΅μ…˜μ„ 검사 ps -aux | grep kube-controller-manager # ν”„λ‘œμ„ΈμŠ€ λͺ©λ‘μ„ 좜λ ₯ ν–ˆμ„ λ•Œ μ‚¬μš© ν•œ μ˜΅μ…˜μ„ 확인
Bash
볡사

Kube Scheduler

Kubernetes μŠ€μΌ€μ€„λŸ¬λŠ” Podλ₯Ό λ…Έλ“œμ— μŠ€μΌ€μ€„λ§ν•˜λŠ” 역할을 λ‹΄λ‹Ή
μŠ€μΌ€μ€„λŸ¬λŠ” 단지 μ–΄λ–€ Podκ°€ μ–΄λŠ λ…Έλ“œμ— λ°°μΉ˜λ μ§€ κ²°μ •λ§Œ 함.
μ‹€μ œλ‘œ Pod 에 λ…Έλ“œλ₯Ό 배치 ν•˜λŠ” 일은 kubelet 이 함.
그럼 μŠ€μΌ€μ€„λŸ¬λŠ” μ–΄λ–»κ²Œ Pod κ°€ λ…Έλ“œμ— 배치 될지 결정을 ν•  까?
1.
쑰건에 λ§žμ§€ μ•Šμ€ λ…Έλ“œλ“€μ€ 필터링
2.
μŠ€μΌ€μ€„λŸ¬λŠ” λ…Έλ“œλ“€μ„ μˆœμœ„λ³„λ‘œ ν‰κ°€ν•˜μ—¬ Pod에 κ°€μž₯ μ ν•©ν•œ λ…Έλ“œλ₯Ό 식별 μŠ€μΌ€μ€„λŸ¬λŠ” 0μ—μ„œ 10κΉŒμ§€μ˜ 점수λ₯Ό λ§€κΈ°λŠ” μš°μ„ μˆœμœ„ ν•¨μˆ˜λ₯Ό μ‚¬μš©
kube-scheduler λ°”μ΄λ„ˆλ¦¬λ₯Ό kubernetes 릴리슀 νŽ˜μ΄μ§€μ—μ„œ λ‹€μš΄λ‘œλ“œ ν•˜κ³  압좕을 ν’€μ–΄ μ„œλΉ„μŠ€λ‘œ μ‹€ν–‰
wget https://dl.k8s.io/v1.31.1/bin/linux/amd64/kube-controller-manager
Bash
볡사
μ΄λ•Œ, μ„œλΉ„μŠ€λ‘œ μ‹€ν–‰ ν•  λ•Œ, μŠ€μΌ€μ€„λŸ¬ ꡬ성 νŒŒμΌμ„ μ§€μ •ν•΄μ•Ό ν•œλ‹€.

μ˜΅μ…˜ 확인 방법

cat /etc/kubernetes/manifests/kube-scheduler.yaml ps -aux | grep kube-controller-manager
Bash
볡사

Kubelet

Pod 와 κ·Έ μ•ˆμ˜ μ»¨ν…Œμ΄λ„ˆ μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ ν•˜λ©°, κ·Έ μƒνƒœλ₯Ό kube API μ„œλ²„μ— μ •κΈ°μ μœΌλ‘œ 보고
λ…Έλ“œμ— μ»¨ν…Œμ΄λ„ˆλ‚˜ Pod λ₯Ό μ μž¬ν•˜λΌλŠ” μ§€μ‹œλ₯Ό λ°›μ•˜μ„ λ•Œ, μ»¨ν…Œμ΄λ„ˆ λŸ°νƒ€μž„ μ—”μ§„(Docker)μ—κ²Œ ν•„μš”ν•œ 이미지λ₯Ό 가져와 μΈμŠ€ν„΄μŠ€λ₯Ό μ‹€ν–‰ ν•˜λ„λ‘ μš”μ²­
kubelet 은 계속 ν•΄μ„œ Pod 와 κ·Έ μ•ˆμ˜ μ»¨ν…Œμ΄λ„ˆ μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ ν•˜λ©°, κ·Έ μƒνƒœλ₯Ό kube API μ„œλ²„μ— μ •κΈ°μ μœΌλ‘œ 보고
kubeadm - kubelet 을 μžλ™μœΌλ‘œ 배포 ν•˜μ§€ μ•ŠμŒ - μˆ˜λ™μœΌλ‘œ μ„€μΉ˜ ν•„μš”
wget https://dl.k8s.io/v1.31.1/bin/linux/amd64/kubelet
Bash
볡사
μ„€μΉ˜ ν”„λ‘œκ·Έλž¨μ„ λ‹€μš΄λ‘œλ“œ ν•˜κ³  압좕을 ν’€μ–΄ μ„œλΉ„μŠ€λ‘œ μ‹€ν–‰

μ˜΅μ…˜ 확인

ps -aux | grep kubelet
Bash
볡사
μ‹€ν–‰ 쀑인 ν”„λ‘œμ„ΈμŠ€λ₯Ό 확인

Kube-Proxy

kube-proxyλŠ” Kubernetes ν΄λŸ¬μŠ€ν„°μ˜ 각 λ…Έλ“œμ—μ„œ μ‹€ν–‰λ˜λŠ” ν”„λ‘œμ„ΈμŠ€
ν”„λ‘œμ„ΈμŠ€μ˜ 역할은 μƒˆλ‘œμš΄ μ„œλΉ„μŠ€λ₯Ό μ°Ύκ³ , μƒˆλ‘œμš΄ μ„œλΉ„μŠ€κ°€ 생성될 λ•Œλ§ˆλ‹€ 각 λ…Έλ“œμ— μ μ ˆν•œ κ·œμΉ™μ„ λ§Œλ“€μ–΄μ„œ ν•΄λ‹Ή μ„œλΉ„μŠ€λ‘œ ν–₯ν•˜λŠ” νŠΈλž˜ν”½μ„ λ°±μ—”λ“œ Pod둜 μ „λ‹¬ν•˜λŠ” 것
이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” ν•œ κ°€μ§€ 방법은 iptables κ·œμΉ™μ„ μ‚¬μš©
이 경우, ν΄λŸ¬μŠ€ν„°μ˜ 각 λ…Έλ“œμ— iptables κ·œμΉ™μ„ μƒμ„±ν•˜μ—¬ μ„œλΉ„μŠ€μ˜ IP(예: 10.96.0.12)둜 ν–₯ν•˜λŠ” νŠΈλž˜ν”½μ„ μ‹€μ œ Pod의 IP(예: 10.32.0.15)둜 전달
λ°”μ΄λ„ˆλ¦¬ 파일
wget https://dl.k8s.io/v1.31.1/bin/linux/amd64/kube-proxy kubectl get deamonset -n kube-system
Bash
볡사
λ‹€μš΄λ‘œλ“œ ν›„ μ„œλΉ„μŠ€λ‘œ μ‹€ν–‰

Kubernetes 객체

- pods, replicas, deployments, services

객체λ₯Ό 생성 ν•˜κΈ° μœ„ν•΄μ„œλŠ” yaml νŒŒμΌμ„ μ‚¬μš©ν•œλ‹€
Kubernetes μ •μ˜ νŒŒμΌμ—λŠ” 항상 λ„€ κ°€μ§€ μ΅œμƒμœ„ ν•„λ“œκ°€ 포함
β€’
API 버전, kind, metadata, spec
이듀은 졜 μƒμœ„ λ˜λŠ” 루트 μˆ˜μ€€μ˜ ν•„λ“œλ‘œ, λ°˜λ“œμ‹œ ꡬ성 νŒŒμΌμ— 포함

API 버전

β€’
μƒμ„±ν•˜λ €λŠ” 객체에 따라 μ˜¬λ°”λ₯Έ API 버전
β—¦
POD : v1
β—¦
Service : v1
β—¦
ReplicaSet : apps/v1
β—¦
Deployment : apps/v1

kind

β€’
μƒμ„±ν•˜λ €λŠ” 객체의 μ’…λ₯˜

metadata

β€’
객체의 이름, 라벨 λ“±μ˜ 데이터 (λ”•μ…”λ„ˆλ¦¬ ν˜•νƒœλ‘œ 제곡)
β—¦
name : 이름
β—¦
labels : ν‚€-쌍 의 ν˜•νƒœλ‘œ μΆ”κ°€

spec

β€’
객체에 λŒ€ν•œ μΆ”κ°€ 정보λ₯Ό Kubernetes에 제곡 (λ”•μ…”λ„ˆλ¦¬ ν˜•νƒœλ‘œ 제곡)
β—¦
containers
β–ͺ
리슀트 λ˜λŠ” λ°°μ—΄
β–ͺ
μ—¬λŸ¬ μ»¨ν…Œμ΄λ„ˆλ₯Ό κ°€μ§ˆ 수 있기 λ•Œλ¬Έμ— 리슀트 ν˜•μ‹
# pod-definition.yml apiVersion : v1 kind : Pod metadata: - name : - labels : app : myapp type : frond-end spec: containers: - name : nginx-container image: nginx
YAML
볡사
kubectl create -f pod-definition.yaml # Pod 생성 kubectl get pods # Pod λͺ©λ‘ kubectl describe pod # Pod μžμ„Έν•œ 사항
Bash
볡사

replicas

λ™μΌν•œ Podλ₯Ό μ—¬λŸ¬ 개 μ‹€ν–‰ν•΄ 두어 ν•œ κ°œκ°€ μ‹€νŒ¨ν•΄λ„ λ‹€λ₯Έ Podμ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 계속 μ‹€ν–‰ν•  수 μžˆλ„λ‘ ν•œλ‹€.
단일 Pod의 μ—¬λŸ¬ μΈμŠ€ν„΄μŠ€λ₯Ό μ‹€ν–‰ν•˜μ—¬ κ³ κ°€μš©μ„±μ„ 제곡
단일 Pod 여도 Replication Controller λŠ” κΈ°μ‘΄ Pod κ°€ μ‹€νŒ¨ ν–ˆμ„ λ•Œ μžλ™μœΌλ‘œ Pod λ₯Ό 생성 ν•˜μ—¬ μ§€μ • 된 개수의 Pod κ°€ 항상 μ‹€ν–‰ λ˜λ„λ‘ 보μž₯
API λ²„μ „μ˜ 경우 생성 ν•˜λ €λŠ” ν•­λͺ©μ— 따라 닀름.
Replication Controller λŠ” Kubernetes API 버전 V1을 지원, KindλŠ” Replication Controller 둜 μ„€μ • Metadata λŠ” pod 와 동일, Spec μ„Ήμ…˜μ˜ 경우 μ€‘μš”ν•œλ°, μ΄λŠ” μƒμ„±ν•˜λ €λŠ” 객체의 λ‚΄λΆ€λ₯Ό μ •μ˜ν•¨
Spec μ•„λž˜μ— template μ„Ήμ…˜μ„ μƒμ„±ν•˜μ—¬ Replication Controller κ°€ λ³΅μ œμ— μ‚¬μš© ν•  Pod ν…œν”Œλ¦Ώμ„ 제곡
Spec에 replicas 속성을 μΆ”κ°€ ν•˜κ³ , μ›ν•˜λŠ” 개수λ₯Ό μž…λ ₯.

Replication Controller VS Replica Set

λͺ©μ μ€ κ°™μ§€λ§Œ μ™„μ „νžˆ 동일 ν•œ 것 은 μ•„λ‹˜
Replication Controller λŠ” 이전 기술둜, ν˜„μž¬λŠ” Replica Set 이 ꢌμž₯ λœλ‹€.
replicaset 의 API 버전은 apps/v1
selector 의 λŒ€ν•œ μ •μ˜μ— 따라 차이가 있음.
selector μ„Ήμ…˜μ€ Replica Set이 관리할 Pod λ₯Ό μ‹λ³„ν•˜λŠ”λ° 도움을 쀌.
Replica Set 은 생성 μ‹œμ μ— selector 에 μ§€μ •λœ 라벨과 μΌμΉ˜ν•˜λŠ” κΈ°μ‘΄ Pod 도 관리 ν•  수 있음.
λ”°λΌμ„œ, Replica Set 의 selector λŠ” match labels ν•„ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ Pod 라벨과 일치 μ‹œν‚¨λ‹€
kubectl scale β€”-replicas=<μƒˆλ‘œμš΄ 수><파일λͺ…>
kubectl scale rs <replicaset> β€”replicas=<μƒˆλ‘œμš΄μˆ˜>
kubectl scale λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš© ν•˜λ©΄ 파일 λ‚΄μ˜ replicas μˆ˜λŠ” μ—…λ°μ΄νŠΈ λ˜μ§€ μ•ŠμŒ
kubectl create -f <파일λͺ…> 은 μ •μ˜ νŒŒμΌμ„ μ‚¬μš©ν•˜μ—¬ Replica Set μ΄λ‚˜ 기타 객체λ₯Ό μƒμ„±ν•˜λŠ”λ° μ‚¬μš©.

Deployment

순차적 μ—…λ°μ΄νŠΈ, λ³€κ²½ μ·¨μ†Œ(λ‘€λ°±), μΌμ‹œμ •μ§€ 및 μž¬κ°œμ™€ 같은 κΈ°λŠ₯을 제곡
Deployment μ •μ˜ 파일의 λ‚΄μš©μ€ ReplicaSet μ •μ˜ 파일과 거의 λ™μΌν•˜λ©°, kindκ°€ Deployment둜 μ„€μ •λ˜λŠ” 점만 닀름.
파일 λ‚΄μš©μ—λŠ” API 버전(apps/v1), 메타데이터(nameκ³Ό labels), 그리고 spec(template, replicas, selector)이 포함됨.
templateμ—λŠ” Pod 에 λŒ€ν•œ λ‚΄μš©μ΄ μ •μ˜ 됨
Deployment μ •μ˜ νŒŒμΌμ„ μ‹€ν–‰ kubectl create -f <파일λͺ…>
μƒμ„±λœ Deploymentλ₯Ό 확인kubectl get deployment
DeploymentλŠ” μžλ™μœΌλ‘œ ReplicaSet을 생성함. kubectl get replicaset λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λ©΄ Deployment 이름을 λ”΄ μƒˆ ReplicaSet을 확인할 수 있음.
ReplicaSet은 κ²°κ΅­ Podλ₯Ό μƒμ„±ν•˜λ―€λ‘œ, kubectl get pods λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λ©΄ Deployment 및 ReplicaSet 이름을 κ°€μ§„ Pod듀을 확인할 수 있음.
μ§€κΈˆκΉŒμ§€λŠ” ReplicaSetκ³Ό Deployment의 차이점이 크지 μ•Šμ§€λ§Œ, Deploymentκ°€ μƒˆλ‘œμš΄ Kubernetes 객체λ₯Ό μƒμ„±ν–ˆλ‹€λŠ” μ μ—μ„œ 차이가 있음.
λ§ˆμ§€λ§‰μœΌλ‘œ, μƒμ„±λœ λͺ¨λ“  객체λ₯Ό ν•œ λ²ˆμ— 보렀면 kubectl get all λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ ν•˜λ©΄ 됨, Deploymentκ°€ μƒμ„±λ˜μ—ˆκ³ , μ΄μ–΄μ„œ ReplicaSetκ³Ό Deployment의 μΌλΆ€λ‘œ μƒμ„±λœ μ„Έ 개의 Podκ°€ ν‘œμ‹œ 됨.

Service

μ—¬λŸ¬ Pod κ·Έλ£Ή κ°„μ˜ 연결을 κ°€λŠ₯ν•˜κ²Œ ν•˜κ³  마이크둜 μ„œλΉ„μŠ€ κ°„μ˜ λŠμŠ¨ν•œ 결합을 κ°€λŠ₯ν•˜κ²Œ 함
NodePort μ„œλΉ„μŠ€λ₯Ό 톡해 λ…Έλ“œμ˜ 포트λ₯Ό μˆ˜μ‹ ν•˜μ—¬ Pod 둜 μš”μ²­μ„ 전달함
이외에도 λ…Έλ“œμ˜ 포트λ₯Ό 톡해 λ‚΄λΆ€ 포트λ₯Ό μ ‘κ·Ό κ°€λŠ₯ν•˜κ²Œ 함
λ…Έλ“œμ˜ 포트λ₯Ό Pod 의 ν¬νŠΈμ™€ λ§€ν•‘ ν•˜μ—¬ μ™ΈλΆ€μ—μ„œ μ ‘κ·Ό ν•  수 μžˆλ„λ‘ 함.
1.
예λ₯Ό λ“€μ–΄, μ›Ή μ„œλ²„κ°€ μ‹€ν–‰λœ ν¬νŠΈκ°€ 80이라고 κ°€μ • ν•  λ•Œ 이걸 targetPort 라고 뢀름. μ„œλΉ„μŠ€κ°€ μš”μ²­μ„ μ „λ‹¬ν•˜λŠ” λŒ€μƒ 포트.
2.
μ„œλΉ„μŠ€ 자체의 포트둜, port 라고도 함. μ΄λ•Œ μ„œλΉ„μŠ€λŠ” ν΄λŸ¬μŠ€ν„° λ‚΄μ—μ„œ 자체 IP μ£Όμ†Œ ( ClusterIp) λ₯Ό κ°€μ§€λ©° 이λ₯Ό 톡해 ν΄λŸ¬μŠ€ν„° λ‚΄μ—μ„œ κ°€μƒμ„œλ²„ 처럼 μž‘λ™.
3.
μ›Ή μ„œλ²„μ— μ ‘κ·Ό ν•  λ•Œ μ‚¬μš©ν•˜λŠ” 포트둜 nodePort 라고도 함. 주둜 30000 ~ 32767 사이 λ²”μœ„ λ‚΄μ—μ„œ ν• λ‹Ή
Cluster IP μ„œλΉ„μŠ€λ₯Ό μ΄μš©ν•΄ ν΄λŸ¬μŠ€ν„° λ‚΄μ—μ„œ 가상 IP λ₯Ό 생성해 μ„œλ²„ κ°„μ˜ 톡신을 κ°€λŠ₯ν•˜κ²Œ 함
LoadBalancer λŠ” μ§€μ›λ˜λŠ” ν΄λΌμš°λ“œ 제곡 μ—…μ²΄μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 용 λ‘œλ“œλ°ΈλŸ°μ„œλ₯Ό μ„€μ •
μ„œλΉ„μŠ€λ₯Ό 생성 ν•˜λ €λ©΄ API 버전은 v1, kind λŠ” Service, metadata μ—μ„œλŠ” 이름을 지정함.
spec μ„Ήμ…˜μ—μ„œλŠ” μ‹€μ œ ꡬ성을 μ •μ˜ν•¨, type μ—λŠ” 생성 ν•  μ„œλΉ„μŠ€ μœ ν˜•μ„ 지정함. ports μ—λŠ” targetPort, port, nodePort 정보λ₯Ό μž…λ ₯, λ°°μ—΄ 값이 λ“€μ–΄κ°ˆ 수 있고 λŒ€μ‹œλ‘œ ν‘œμ‹œ 함.
ReplicaSet μ—μ„œ ν–ˆλ˜ 것 처럼 labels 와 selectorsλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—°κ²°, Pod 의 label을 μ„œλΉ„μŠ€ μ •μ˜ 파일의 selector μ„Ήμ…˜μ— μΆ”κ°€ ν•˜λ©΄ Pod 와 μ—°κ²° 됨
kubectl create -f <μ •μ˜νŒŒμΌ> 둜 μ‹€ν–‰ ν•˜λ©΄ λœλ‹€.
확인 ν•˜κΈ° μœ„ν•΄μ„œλŠ” kubectl get servicesλ₯Ό μ‹€ν–‰ ν•˜μž.
μ„œλΉ„μŠ€λŠ” μ•Œκ³ λ¦¬μ¦˜μ„ 톡해 μ—¬λŸ¬ Pod 간에 λΆ€ν•˜λ₯Ό λΆ„μ‚° μ‹œν‚¨λ‹€
μΈμŠ€ν„΄μŠ€λ₯Ό μ—¬λŸ¬ 개 μ‹€ν–‰ ν•˜λŠ” κ²½μš°κ°€ 있기 λ•Œλ¬Έμ—, μ—¬λŸ¬ Pod κ°€ λ™μΌν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ ν•˜λ©°, λ™μΌν•œ label 을 κ³΅μœ ν•œλ‹€. μ„œλΉ„μŠ€ 생성 μ‹œ label 을 selector 둜 μ΄μš©ν•˜λ©΄, μ„œλΉ„μŠ€λŠ” ν•΄λ‹Ή 라벨과 μΌμΉ˜ν•˜λŠ” λͺ¨λ“  Pod λ₯Ό μ°Ύμ•„ μš”μ²­μ„ 전달할 μ—”λ“œν¬μΈνŠΈλ‘œ μžλ™ 선택 ν•œλ‹€.
λ”°λΌμ„œ , μ„œλΉ„μŠ€λŠ” 랜덀 μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•΄ μ—¬λŸ¬ Pod 간에 λΆ€ν•˜λ₯Ό λΆ„μ‚° μ‹œν‚¨λ‹€
λ§ˆμ§€λ§‰μœΌλ‘œ Pod κ°€ μ—¬λŸ¬ λ…Έλ“œμ— λΆ„μ‚° λ˜μ–΄ μžˆμ„ λ•ŒλŠ”, μ„œλΉ„μŠ€λŠ” ν΄λŸ¬μŠ€ν„°μ˜ λͺ¨λ“  λ…Έλ“œμ— 걸쳐 μžλ™μœΌλ‘œ 생성 되고, λͺ¨λ“  λ…Έλ“œμ—μ„œ λ™μΌν•œ NodePort 둜 맀핑됨.
μ΄λ ‡κ²Œ 될 κ²½μš°μ—” ν΄λŸ¬μŠ€ν„° λ‚΄ μ–΄λŠ λ…Έλ“œμ˜ IP λ₯Ό μ‚¬μš© ν•˜λ˜κ°„μ— λ™μΌν•œ 포트둜 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ ‘κ·Ό ν•  수 있음.
μ •λ¦¬ν•˜λ©΄, 단이 Pod κ°€ μžˆλŠ” 단일 λ…Έλ“œ, 단일 λ…Έλ“œμ˜ λ‚˜μ€‘ Pod, λ˜λŠ” 닀쀑 λ…Έλ“œμ˜ 닀쀑 Pod λͺ¨λ‘μ—μ„œ μ„œλΉ„μŠ€ 생성 방식은 동일.
Pod κ°€ 제거 λ˜κ±°λ‚˜ μΆ”κ°€ 될 λ•Œ μ„œλΉ„μŠ€λŠ” μžλ™μœΌλ‘œ μ—…λ°μ΄νŠΈ 됨. μ„œλΉ„μŠ€κ°€ 생성 된 μ΄ν›„μ—λŠ” 일반적으둜 μΆ”κ°€ ꡬ성이 ν•„μš”ν•˜μ§€ μ•Šμ€ μƒνƒœ!

Service ClusterIP

μ„œλΉ„μŠ€λŠ” Pod 듀을 그룹으둜 λ¬Άκ³  ν•΄λ‹Ή 그룹의 Pod 에 μ ‘κ·Ό ν•  수 μžˆλŠ” 단일 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•¨.
λ°±μ—”λ“œ Pod 듀을 μœ„ν•΄ 생성 된 μ„œλΉ„μŠ€λŠ” λͺ¨λ“  λ°±μ—”λ“œ Podλ₯Ό ν•˜λ‚˜μ˜ 그룹으둜 λ¬Άκ³ , λ‹€λ₯Έ Pod κ°€ 이 μ„œλΉ„μŠ€λ₯Ό μ ‘κ·Ό ν•  수 μžˆλŠ” 단일 μΈν„°νŽ˜μ΄μŠ€λ₯Ό 제곡.
μš”μ²­μ€ μ„œλΉ„μŠ€ ν•˜μœ„μ˜ Pod λ“€ 쀑 ν•˜λ‚˜λ‘œ 랜덀 ν•˜κ²Œ 전달.
각 μ„œλΉ„μŠ€λŠ” ν΄λŸ¬μŠ€ν„° λ‚΄μ—μ„œ 고유의 IPμ£Όμ†Œμ™€ 이름을 ν• λ‹Ή λ°›κ³ , 각 Pod λŠ” 이 이름을 μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή μ„œλΉ„μŠ€μ— μ ‘κ·Ό.
이λ₯Ό ClusterIP라고 함
μ΄λŸ¬ν•œ μ„œλΉ„μŠ€λ₯Ό 생성 ν•˜λ €λ©΄ API 버전 은 v1, kindλŠ” Service, spec μ—λŠ” type κ³Ό ports λ₯Ό μ„€μ •. type 은 ClusterIP, ports μ—μ„œλŠ” targetPorts와 port 을 μ§€μ •. targetPort λŠ” λ°±μ—”λ“œκ°€ λ…ΈμΆœ λ˜λŠ” 포트, port λŠ” μ„œλΉ„μŠ€κ°€ λ…ΈμΆœ λ˜λŠ” 포트
μ„œλΉ„μŠ€λ₯Ό νŠΉμ • Pod 집합에 μ—°κ²° ν•˜κΈ° μœ„ν•΄ Selector λ₯Ό μ‚¬μš©ν•¨. Pod μ •μ˜ νŒŒμΌμ—μ„œ 라벨을 볡사 ν•˜μ—¬ selector μ„Ήμ…˜ μ•„λž˜μ— μΆ”κ°€.
kubectl create -f <μ •μ˜νŒŒμΌ> 둜 μ‹€ν–‰ ν•˜λ©΄ λœλ‹€.
확인 ν•˜κΈ° μœ„ν•΄μ„œλŠ” kubectl get servicesλ₯Ό μ‹€ν–‰ ν•˜μž.

Service LoadBalancer

NameSpace

κΈ°λ³Έ λ„€μž„μŠ€νŽ˜μ΄μŠ€κ°€ default μ΄λ‚˜ 처음 ν΄λŸ¬μŠ€ν„°κ°€ 생성 될 λ•Œ μžλ™μœΌλ‘œ 생성 함.
kube-system : λ‚΄λΆ€μ μœΌλ‘œ ν•„μš”ν•œ λ„€νŠΈμ›Œν¬ μ†”λ£¨μ…˜μ΄λ‚˜ DNS μ„œλΉ„μŠ€μ™€ 같은 Pod 와 Serviceλ₯Ό μœ„ν•΄ λ§Œλ“€μ–΄μ§„ λ„€μž„μŠ€νŽ˜μ΄μŠ€ μ‚¬μš©μžκ°€ μ‹€μˆ˜λ‘œ 이 μ„œλΉ„μŠ€λ₯Ό μ‚­μ œν•˜κ±°λ‚˜ μˆ˜μ •ν•˜λŠ” 것을 λ°©μ§€
kube-public : λͺ¨λ“  μ‚¬μš©μžμ—κ²Œ 곡개 λ˜μ–΄μ•Ό ν•˜λŠ” λ¦¬μ†ŒμŠ€λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ 쑴재
λ™μΌν•œ ν΄λŸ¬μŠ€ν„°λ₯Ό dev 와 production μ—μ„œ μ‚¬μš©ν•˜λ©° λ¦¬μ†ŒμŠ€λ₯Ό 뢄리 ν•˜κ³  싢을 λ•Œ ν™˜κ²½μ— 맞게 λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό 섀계 ν•˜λ©΄ 됨.
고유의 μ •μ±… μ„ΈνŠΈλ₯Ό μ„€μ • ν•  수 있음. 각 λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— ν• λ‹Ή ν•  λ¦¬μ†ŒμŠ€μ˜ ν• λ‹ΉλŸ‰ 을 μ§€μ • ν•  수 있음.
λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— νŠΉμ • μ–‘μ˜ λ¦¬μ†ŒμŠ€λ₯Ό 보μž₯ν•˜κ³ , ν—ˆμš©λœ ν•œλ„ 이상을 μ‚¬μš© ν•  수 없도둝 ν•  수 있음.
λ‹€λ₯Έ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μ ‘κ·Ό ν•˜λ €λ©΄ <μ„œλΉ„μŠ€μ΄λ¦„>.<λ„€μž„μŠ€νŽ˜μ΄μŠ€>.svn.cluster.local ν˜•μ‹μœΌλ‘œ μ£Όμ†Œλ₯Ό μ„€μ • ν•˜λ©΄ 됨
μžλ™μœΌλ‘œ μ΄λŸ¬ν•œ ν˜•μ‹μœΌλ‘œ DNS ν•­λͺ©μ΄ 좔가됨.
μ„œλΉ„μŠ€μ˜ DNS 이름을 μžμ„Ένžˆ μ‚΄νŽ΄λ³΄λ©΄ cluster.local 은 kubernetes ν΄λŸ¬μŠ€ν„°μ˜ κΈ°λ³Έ 도메인 이름 이며, svcλŠ” μ„œλΉ„μŠ€μ˜ μ„œλΈŒ λ„λ©”μΈμž„.
기본적으둜 κΈ°λ³Έ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— 생성 되며, λ‹€λ₯Έ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μ§€μ • ν•˜μ—¬ 생성 ν•˜λ €λ©΄ --namespace μ˜΅μ…˜μ„ μ‚¬μš© ν•˜λ©΄ 됨
kubectl create namespace <λ„€μž„μŠ€νŽ˜μ΄μŠ€ 이름> λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰.
λ‹€λ₯Έ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ‘œ 이동 ν•˜κ³  싢을 λ•ŒλŠ” kubectl config set-context --current --namespace=dev λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•΄ dev λ„€μž„μŠ€νŽ˜μ΄μŠ€λ‘œ μ „ν™˜ ν•  수 있음.
λͺ¨λ“  λ„€μž„μŠ€νŽ˜μ΄μŠ€μ˜ Pod λ₯Ό 확인 ν•  λ•ŒλŠ” --all-namespaces μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  λ„€μž„μŠ€νŽ˜μ΄μŠ€μ˜ Pod λͺ©λ‘μ„ λ³Ό 수 있음.
λ¦¬μ†ŒμŠ€λ₯Ό μ œν•œ ν•˜κ³  μ‹ΆμœΌλ©΄ λ¦¬μ†ŒμŠ€ ν• λ‹ΉλŸ‰(resource quota) 을 생성.
λ¦¬μ†ŒμŠ€ ν• λ‹ΉλŸ‰ μ •μ˜ νŒŒμΌμ—μ„œ μ œν•œν•  λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό μ§€μ •ν•˜κ³ , Pod 10 개, CPU 10개, λ©”λͺ¨λ¦¬ 10GB와 같이 μ œν•œ 사항을 μ„€μ •.
Schedule