Lab3
Lab3 : Orchestrating the Cloud with Kubernetes
Lab λͺ©ν
Kubernetes Engineμ νμ©ν Kubernetes cluster provision
kubectl μ΄μ©ν λ컀 컨ν μ΄λ λ°°ν¬ λ° κ΄λ¦¬
Kubernetesμ Deploymentsμ Servicesλ₯Ό νμ©ν΄ applicationμ microservice λ‘ μͺΌκ°κΈ°
gcloud config set compute/zone us-central1-bzone μ€μ
gcloud container clusters create ioν΄λ¬μ€ν° μμ±
1. Get the sample code
gsutil cp -r gs://spls/gsp021/* .GitHub repositoryλ₯Ό ν΄λ‘ νλ€.
gs λ‘ μμνλκ² google cloud storage μ κ·Όνλκ².
νμν λλ ν λ¦¬λ‘ μ΄λνλ€.

2. Quick Kubernetes Demo
μΏ λ²λ€ν°μ€λ₯Ό μμνλ κ°μ₯ μ¬μ΄ λ°©λ²μ kbect1 create 컀맨λλ₯Ό μ¬μ©νλ κ²μ΄λ€.
μ λͺ λ Ήμ΄ μ¬μ©νμ¬ μΏ λ²λ€ν°μ€ λ°°ν¬λ₯Ό μμ±νλ€.
μ€νμ€μΈ λ Έλμ μ₯μ κ° λ°μνλλΌλ λ°°ν¬λ κ³μ μ€νλλ€.
μΏ λ²λ€ν°μ€μμλ λͺ¨λ 컨ν μ΄λλ€μ΄ podμμ μ€νλλ€.
μ€νμ€μΈ nginx 컨ν μ΄λλ₯Ό νμΈνλ€.
nginx 컨ν μ΄λκ° μ€νμ€μ΄λ©΄ μ λͺ λ Ήμ΄λ₯Ό ν΅ν΄ μΏ λ²λ€ν°μ€ μΈλΆμ expose ν μ μλ€.

μΏ λ²λ€ν°μ€κ° κ³΅μ© IP μ£Όμλ₯Ό ν΅ν΄ μΈλΆ λ‘λλ°Έλ°μλ₯Ό μμ±νλ€.
ν΄λΉ κ³΅μ© IP μ£Όμλ₯Ό μ‘°ννλ λͺ¨λ ν΄λΌμ΄μΈνΈλ ν΄λΉ podλ‘ λΌμ°ν λλ€.
μ κ²½μ°μλ nginx podλ‘ λΌμ°ν λλ€.
νμ¬ μ¬μ©μ€μΈ μλΉμ€ 리μ€νΈλ₯Ό μ‘°ννλ€.

Nginx 컨ν μ΄λλ₯Ό μ격μΌλ‘ hit νκΈ° μν΄ μ λͺ λ Ήμ΄λ₯Ό μ¬μ©νλ€.
3. Pods
μΏ λ²λ€ν°μ€μ ν΅μ¬μλ Pod κ° μλ€.

Podsλ νλ μ΄μμ 컨ν μ΄λ μ§ν©μ λνλΈλ€. μλ‘μ λν μμ‘΄λκ° λμ μ¬λ¬κ°μ 컨ν μ΄λκ° μλ κ²½μ° μ»¨ν μ΄λλ₯Ό λ¨μΌ pod λ΄μ ν¨ν€μ§νλ€.
Podsμλ Volumesκ° μλ€.
λ³Όλ₯¨μ podsκ° μ΄μμλ λμ μ§μλλ λ°μ΄ν° λμ€ν¬λ‘, ν΄λΉ podμ 컨ν μ΄λμμ μ¬μ© κ°λ₯νλ€. Podsλ κ°μ§κ³ μλ λ΄μ©μ λν shared namespaceλ₯Ό μ 곡νμ¬ pod λ΄λΆμ 컨ν μ΄λλ€μ΄ μλ‘ ν΅μ ν μ μκ³ , μ°κ²°λμ΄ μλ λ³Όλ₯¨λ 곡μ ν μ μλλ‘ νλ€.
Podsλ network namespaceλ 곡μ νμ¬ νλμ podλΉ νλμ IP Addressλ₯Ό κ°μ§κ³ μλ€.
4. Creating pods
Podλ pod configuration fileμ ν΅ν΄ μμ±λλ€.

νμ¬ podλ νλμ 컨ν μ΄λ (monolith)λ‘ μ΄λ£¨μ΄μ Έμλ€.
컨ν μ΄λκ° μμν λ λͺκ°μ§ argumentλ€μ μ λ¬νλ€.
http traffic μ μν΄ 80λ² ν¬νΈλ₯Ό μ°λ€.
μ λͺ λ Ήμ΄λ₯Ό μ¬μ©ν΄ monolith podλ₯Ό μμ±νλ€.

default namespaceμμ μ€νμ€μΈ λͺ¨λ pod 리μ€νΈλ₯Ό νμΈνλ€.
monolith pod μ λν μ λ³΄λ€ μΆλ ₯

Pod IP μ£Όμμ event logλ₯Ό ν¬ν¨ν μ 보λ€μ νμΈ κ°λ₯νλ€.
troubleshooting μ μ©μ΄νκ² μ¬μ©κ°λ₯
5. Interacting with pods
κΈ°λ³Έμ μΌλ‘ podλ€μ ν λΉλ μ¬μ€ IP μ£Όμμ΄κ³ ν΄λ¬μ€ν° μΈλΆμμ μ κ·Όμ΄ λΆκ°λ₯νλ€. λ°λΌμ kubecgtl port-forward λͺ λ Ήμ΄λ₯Ό ν΅ν΄ λ‘컬 ν¬νΈλ₯Ό monolith pod λ΄λΆλ‘ λ§€νν΄μΌνλ€.
μλ‘μ΄ ν°λ―Έλμ μ΄μ΄ νλλ kubectl port-forward λͺ λ Ήμ΄λ₯Ό μ€ννκ³ λ€λ₯Έ ν°λ―Έλμ curl λͺ λ Ήμ΄λ₯Ό μ€ννλ€.


curl λͺ λ Ήμ΄λ₯Ό μ΄μ©ν΄ podμ μν΅νκΈ°
컨ν μ΄λμμ βhelloβ λ©μμ§λ₯Ό μμ ν κ²μ νμΈν μ μλ€.
authroization fail μλ΅μ μμ νλ€.
passwordλ₯Ό μ λ ₯νλΌκ³ ν΄μ μ λ ₯νλ©΄ λ‘κ·ΈμΈμ΄ μ±κ³΅νκ³ , JWT tokenμ μμ λ°λλ€.
ν ν° μ 보 λ³μ μμ±
Bearer Tokenμ λ΄μ λ€μ 보λ΄λ©΄ μ λλ‘λ μλ΅μ λ°κ² λλ€.


monolith Podμ λ‘κ·Έλ₯Ό 보기 μν΄ μ λͺ λ Ήμ΄λ₯Ό μ¬μ©νλ€.
μλ‘μ΄ ν°λ―Έλμμ -f μ΅μ μ λΆμ¬ μ€ννλ©΄ μ€μκ°μΌλ‘ λ°μνλ λ‘κ·Έ μ€νΈλ¦Όμ λ°μ μ μλ€.
Monolith Pod λ΄λΆμμ interactive shellμ μ€ννκΈ° μν΄ μ λͺ λ Ήμ΄λ₯Ό μ¬μ©νλ€.

μ΄λ°μμΌλ‘ μΈλΆμ ping λͺ λ Ήμ΄ λ±μ μ΄μ©ν΄ μΈλΆ μ°κ²°μ±μ ν μ€νΈν μ μλ€.
interactive shellμ μ’ λ£ν λλ exit λͺ λ Ήμ΄λ₯Ό μ¬μ©νλ€.
μλΉμ€λ podμλ€κ° λ§€νν΄μ κ³μ κ΄λ¦¬ν΄μ£Όλ νλμ clusterλ μ΅μ λ§μ€ν° μλΉμ€λ₯Ό κ°μ§κ³ μμ.
6. Services
Podsλ€μ μμνμ§μλ€. λ§μ½ μ¬μμλλ©΄ ν΄λΉ podλ€μ λ€λ₯Έ IP μ£Όμλ₯Ό κ°μ§κ² λ κ²μ΄λ€. μ΄λ΄ λ Servicesλ₯Ό μ¬μ©νλ€.
Servicesλ podsλ€μ κ³ μ endpointλ₯Ό μ 곡νλ€.

μλΉμ€λ λΌλ²¨μ μ¬μ©νμ¬ μ΄λ€ podμμ μλνλμ§ νλ³νλ€.
μλΉμ€ νμ μ λ°λ₯Έ service λ¨κ³
ClusterIP (internal) : ν΄λΉ μλΉμ€κ° ν΄λ¬μ€ν° λ΄λΆμμλ§ λ³΄μΈλ€
NodePort : ν΄λ¬μ€ν°μ κ° λ Έλμ μΈλΆμμ μ‘μΈμ€ν μ μλ Ipλ₯Ό μ 곡
LoadBalancer : ν΄λΌμ°λ μ 곡μμ λ‘λλ°Έλ°μλ₯Ό μ¬μ©νμ¬ μλΉμ€μμ λ Έλλ‘ νΈλν½μ μ λ¬νλ€.
μ΄μ μλΉμ€λ₯Ό μμ±νκ³ label selectorsλ₯Ό μ΄μ©νμ¬ μΈλΆμ λ ΈμΆνμ.
7. Creating a service
μλΉμ€ μμ± μ https trafficλ₯Ό λ€λ£¨λ μμ ν podλ₯Ό μμ±νλ€.

secure-monolith pods μ configuration dataλ₯Ό μμ±νλ€.

monolith service configuration file
λΌλ²¨ app: monolith μ secure: enbaled κ° μλ podλ€μ μλμΌλ‘ μ°Ύκ³ expose νλ selectorκ° μλ€.
μ¬κΈ°μ nodeportλ₯Ό exposeν΄μ 31000λ² ν¬νΈμμ ngins(port 443)μΌλ‘ μΈλΆ νΈλν½μ μ μ‘ν΄μΌνλ€.
μ λͺ λ Ήμ΄λ₯Ό μ¬μ©ν΄ monolith service configuration fileλ‘λΆν° monolith serviceλ₯Ό μμ±νλ€.
μ΄μ μλΉμ€λ₯Ό expose νκΈ° μν΄ 31000λ² ν¬νΈλ₯Ό μ¬μ©νκ³ μλ€.
λ€λ₯Έ μ±μ΄ ν΄λΉ ν¬νΈμ λ°μΈλ©νλ €κ³ νλ©΄ μΆ©λμ΄ μκΈ΄λ€.
μΌλ°μ μΌλ‘ μΏ λ²λ€ν°μ€λ μ΄λ¬ν ν¬νΈ assignmentλ₯Ό μ‘°μ νλ€.
μ λͺ λ Ήμ΄λ₯Ό μ΄μ©ν΄ exposed node portμ monolith serviceλ‘μ νΈλν½μ νμ©νλ€.
μ΄μ ν΄λ¬μ€ν° μΈλΆμμ port forwarding μμ΄λ secure-monolith serviceμ hit ν μ μλ€.

μ λͺ λ Ήμ΄λ₯Ό ν΅ν΄ λ Έλ μ€ νλμ μΈλΆ IP μ£Όμλ₯Ό νμΈνλ€.
μ΄λ¬λ©΄ λ¬Έμ κ° λ°μνλ€. μ΄μ ν΄κ²°ν΄λ³΄μ
8. Adding labels to pods
μ§κΈ monolith serviceλ endpointλ₯Ό κ°μ§κ³ μμ§ μλ€.

monolith labelμ κ°μ§κ³ μλ μ€νμ€μΈ podsλ€μ νμΈν μ μλ€.
ꡬ체μ μΈ λΌλ²¨λ€μ νμΈνλ©΄?

μλ¬΄λ° λ¦¬μμ€λ μλ κ²μ νμΈν μ μλ€.
κ·Έλ κΈ° λλ¬Έμ μμμ μ€λ₯κ° λ¬λ κ²μ΄κ³ , secure=enabled λΌλ²¨μ μΆκ°ν΄μ£Όμ΄μΌνλ€.

λΌλ²¨μ λΆμ΄κ³ λΌλ²¨μ΄ μ λ°μ΄νΈ λμλμ§ νμΈνλ€.
μ μμ μΌλ‘ μ λΆμλ€λ©΄ monolith μλΉμ€μ μλν¬μΈνΈ 리μ€νΈλ₯Ό νμΈνλ€.

μ λμκ°λ€!
9. Deploying applications with Kubernetes
μ΄μ 컨ν μ΄λλ€μ scalingνκ³ λ§€λμ§ν΄λ³΄μ.
Deploymentsλ μ€ν μ€μΈ podsμ μκ° μ¬μ©μκ° μ§μ ν μνλ podsμ μμ κ°λλ‘ νλ λ°©λ²μ΄λ€.

The main benefit of Deployments is in abstracting away the low level details of managing Pods. Behind the scenes Deployments use Replica Sets to manage starting and stopping the Pods. If Pods need to be updated or scaled, the Deployment will handle that. Deployment also handles restarting Pods if they happen to go down for some reason.
10. Creating deployments
νμ¬ μ§ννλ μ±μ μΈκ°μ§ ννΈλ‘ λλλ©΄
auth : μΈμ¦λ μ¬μ©μλ€μκ² JWT token μμ±
hello : μΈμ¦λ μ¬μ©μλ€μκ² μΈμ¬
frontend : authμ hello μλΉμ€λ€μ νΈλν½μ λΌμ°ν ν¨.
authμ hello deploymentsλ₯Ό μν λ΄λΆμ μΈ μλΉμ€λ€μ μ μνκ³ frontend deploymentλ₯Ό μν μΈλΆ μλΉμ€λ₯Ό μ μνλ€.
auth deployment configuration file μμ±

deploymentλ νλμ replicaλ₯Ό μμ±νλ κ²μ΄λ€.
auth 컨ν μ΄λμ λ²μ 2.0.0 μ μ¬μ©νλ€.
When you run the kubectl create command to create the auth deployment it will make one pod that conforms to the data in the Deployment manifest. This means you can scale the number of Pods by changing the number specified in the Replicas field.
μ λͺ λ Ήμ΄λ‘ deployment objectλ₯Ό μμ±νλ€.
auth deploymentλ₯Ό μν μλΉμ€λ₯Ό μμ±νλ€.
λμΌνκ² hello deploymentμ frontend Deploymentμλ μ μ©νλ€.
frontendμ μΈλΆ IP μ£Όμλ₯Ό ν΅ν΄ curlingν΄μ interact νλ€.

Study More
Podκ° λ¬΄μμΈμ§?
LoadBalancer
Scaling μ΄ λ¬΄μμ΄λμ
LoadBalancer μλΉμ€ νμ μ λ¨μ§ νκ°μ λ΄λΆ μλΉμ€λ₯Ό μΈλΆ μ¬μ©μλ€μκ² μ κ·Ό κ°λ₯νλλ‘ λ§λλ μΌμ λ΄λΉν©λλ€. λ°λλ‘ Ingress μλΉμ€ νμ μ μ¬λ¬κ°μ μλΉμ€κ° νκ° λ‘λ λ°Έλ°μλ₯Ό ν΅ν΄ μ μ°ν μ€μ μ ν μ μκ² λ§λλλ€.
Kubernetes NodePort vs LoadBalancer vs Ingress? When should I use what?
Load Balancerλ νκ°μ λ΄λΆ μλΉμ€λ₯Ό μΈλΆλ‘ μ κ·Ό κ°λ₯νκ±°κ³
Ingressλ load balancerλ₯Ό λ체νλ©΄μ λ€μ΄κ°. L7 κ³μΈ΅μμ λΌμ°ν μν΄μ£Όλκ². κ·Έλμ urlκΉμ§ λΌμ°ν ν΄μ€.
L4 λ λ¨μν λΆνλ₯Ό λΆμ°μν€λκ².
Last updated