5. Linkerd
1. Linkerd κ°μ
Linkerdλ Kubernetesμ©μΌλ‘ μ€κ³λ κ²½λ μλΉμ€μ΄λ©° λΆμ° μ ν리μΌμ΄μ μμ μ½λλ₯Ό λ³κ²½ν νμ μμ΄ λ°νμ λλ²κΉ , μ΅μ λ²λΉλ¬ν° κΈ°λ₯, μμ μ± λ° λ³΄μμ μ 곡ν©λλ€.
Linkerd ꡬ쑰
Linkerdμλ UI, data-plane, control-planeμ 3κ°μ§ κ΅¬μ± μμκ° μλ€. κ° μλΉμ€ μΈμ€ν΄μ€ μμ κ²½λ transparent proxyλ₯Ό μ€μΉνμ¬ λμν©λλ€.
Control-plane
μλΉμ€λ©μμ ν΅μ¬ κΈ°λ₯μ μ 곡νλ μλΉμ€ μ§ν©μ
λλ€.
ν
λ λ©νΈλ¦¬ λ°μ΄ν°λ₯Ό μμ§νκ³ APIλ₯Ό μ 곡νλ©°, Data-plane νλ‘μμ μ μ΄ λ°μ΄ν°λ₯Ό μ 곡ν©λλ€.
Control-planeμ ꡬμ±μμλ λ€μκ³Ό κ°μ΅λλ€.
Controller : CLI λ° Dashboardμ© APIλ₯Ό μ 곡νλ Public API 컨ν μ΄λλ‘ κ΅¬μ±
Destination : Data-planeμ μλ κ°κ°μ νλ‘μλ metric, retries, timeoutκ³Ό κ°μ λ°μ΄ν°μ μμ²μ λ³΄λΌ μμΉλ₯Ό κ²μ
Identity : CA(Certificate Authority)κΈ°λ₯μ μ 곡νλ©° νλ‘μλ‘λΆν° CSR(Certificate Signing Request)μ μλ½νκ³ μλͺ λ μ¬λ°λ₯Έ μΈμ¦μ λ°ννλ μν μ μν
Proxy Injector : μΉμΈ 컨νΈλ‘€λ¬λ‘μ
linkerd.io/inject: enabled
μ΄λ Έν μ΄μ μ μ°Ύκ³ pod λͺ μΈλ₯Ό μμ νμ¬ initcontainerμ μ¬μ΄λμΉ΄λ₯Ό ν¬ν¨νλ νλ‘μλ₯Ό λͺ¨λ μΆκ°Service Profile Validator : μλ‘μ΄ μλΉμ€ νλ‘νμ΄ μ μ₯λκΈ° μ μ μ ν¨μ± κ²μ¬λ₯Ό νλ μΉμΈ 컨νΈλ‘€λ¬
Tap : CLIλ λμ보λμμ μμ²μ λ°μ μ΄ν리μΌμ΄μ μ μ΅μ λ²λΉλ¬ν°λ₯Ό μ€μκ°μΌλ‘ μ 곡
Web : μΉμμ λμ보λλ₯Ό μ 곡
Grafana : Grafanaλ₯Ό ν΅νμ¬ μ¦μ μ¬μ© κ°λ₯ν λμ보λλ₯Ό μ 곡
Prometheus : linkerd λ©νΈλ¦μ 4191λ² ν¬νΈλ₯Ό ν΅νμ¬ λ§€ 10μ΄λ§λ€ μμ§
Data-plane
Data-planeμ κ²½λ νλ‘μλ‘ μλΉμ€ 컨ν
μ΄λμ κ° μΈμ€ν΄μ€μ ν¨κ» μ¬μ΄λμΉ΄ 컨ν
μ΄λλ‘μ¨ λ°°ν¬λ©λλ€.
νΉμ μ΄λ
Έν
μ΄μ
μ΄ μλ podμ μ΄κΈ°ν λ¨κ³μμ νλ‘μκ° μ£Όμ
λ©λλ€.
Linkerd2-Proxy
μ ν리μΌμ΄μ
μ μ½λ λ³κ²½ μμ΄ κ° podμμ ν΅μ μμ μνΈν κΈ°λ₯κ³Ό μ€κ° μν μ μν ν μ μμ΅λλ€.
μΏ λ²λ€ν°μ€μ κ°μ΄ 컨ν
μ΄λ νκ²½μμ μ¬μ©νκΈ° μν΄ λ§λ€μ΄μ‘κΈ° λλ¬Έμ λ§€μ° κ°λ³μ΅λλ€.
2. Linkerd μ¬μ©
Linkerdμμ μ 곡νλ λ°λͺ¨ μ΄ν리μΌμ΄μ μ λ°°ν¬ν©λλ€.
(k8s-venv) root@k8s-master01:~# curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/emojivoto.yml \
> | kubectl apply -f -
namespace/emojivoto created
serviceaccount/emoji created
serviceaccount/voting created
serviceaccount/web created
service/emoji-svc created
service/voting-svc created
service/web-svc created
deployment.apps/emoji created
deployment.apps/vote-bot created
deployment.apps/voting created
deployment.apps/web created
(k8s-venv) root@k8s-master01:~# kubectl get all -n emojivoto
NAME READY STATUS RESTARTS AGE
pod/emoji-5dbdd567bd-v9tmw 1/1 Running 0 15s
pod/vote-bot-58b4f5fdb7-bzpsl 1/1 Running 0 15s
pod/voting-5fdcddcfc-jltvb 1/1 Running 0 15s
pod/web-67c857998c-w5dxm 1/1 Running 0 15s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/emoji-svc ClusterIP 10.233.5.28 <none> 8080/TCP,8801/TCP 16s
service/voting-svc ClusterIP 10.233.35.137 <none> 8080/TCP,8801/TCP 16s
service/web-svc ClusterIP 10.233.15.55 <none> 80/TCP 16s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/emoji 1/1 1 1 16s
deployment.apps/vote-bot 1/1 1 1 16s
deployment.apps/voting 1/1 1 1 15s
deployment.apps/web 1/1 1 1 15s
NAME DESIRED CURRENT READY AGE
replicaset.apps/emoji-5dbdd567bd 1 1 1 16s
replicaset.apps/vote-bot-58b4f5fdb7 1 1 1 16s
replicaset.apps/voting-5fdcddcfc 1 1 1 15s
replicaset.apps/web-67c857998c 1 1 1 15s
Linkerd λͺ λ Ήμ΄λ₯Ό ν΅ν΄ λ°λͺ¨ μ΄ν리μΌμ΄μ μ Proxy Podλ₯Ό μΆκ°ν©λλ€.
(k8s-venv) root@k8s-master01:~# kubectl get -n emojivoto deploy -o yaml \
> | linkerd inject - \
> | kubectl apply -f -
deployment "emoji" injected
deployment "vote-bot" injected
deployment "voting" injected
deployment "web" injected
deployment.apps/emoji configured
deployment.apps/vote-bot configured
deployment.apps/voting configured
deployment.apps/web configured
(k8s-venv) root@k8s-master01:~# kubectl get all -n emojivoto
NAME READY STATUS RESTARTS AGE
pod/emoji-55c59cf485-c4hbx 2/2 Running 0 5m1s
pod/vote-bot-57d4c898bb-965fq 2/2 Running 0 5m1s
pod/voting-87469d4bb-xx6gf 2/2 Running 0 5m1s
pod/web-847cbcb586-5gw4m 2/2 Running 0 5m1s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/emoji-svc ClusterIP 10.233.5.28 <none> 8080/TCP,8801/TCP 7m44s
service/voting-svc ClusterIP 10.233.35.137 <none> 8080/TCP,8801/TCP 7m44s
service/web-svc ClusterIP 10.233.15.55 <none> 80/TCP 7m44s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/emoji 1/1 1 1 7m44s
deployment.apps/vote-bot 1/1 1 1 7m44s
deployment.apps/voting 1/1 1 1 7m43s
deployment.apps/web 1/1 1 1 7m43s
NAME DESIRED CURRENT READY AGE
replicaset.apps/emoji-55c59cf485 1 1 1 5m1s
replicaset.apps/emoji-5dbdd567bd 0 0 0 7m44s
replicaset.apps/vote-bot-57d4c898bb 1 1 1 5m1s
replicaset.apps/vote-bot-58b4f5fdb7 0 0 0 7m44s
replicaset.apps/voting-5fdcddcfc 0 0 0 7m43s
replicaset.apps/voting-87469d4bb 1 1 1 5m1s
replicaset.apps/web-67c857998c 0 0 0 7m43s
replicaset.apps/web-847cbcb586 1 1 1 5m1s
Linkerd λμ보λμμ λ°λͺ¨ μ΄ν리μΌμ΄μ μ λ©μ¬νλ κ²μ νμΈν©λλ€.
Proxyκ° μ¬μ΄λμΉ΄ ν¨ν΄μΌλ‘ μ£Όμ λ λ€μμ€νμ΄μ€λ₯Ό ν΄λ¦νλ©΄ λ€μκ³Ό κ°μ μ λ³΄κ° ννλ©λλ€.
κ° λ€μμ€νμ΄μ€λ³ 리μμ€μ μνλ₯Ό μ’μΈ‘μ μν¬λ‘λ νμμ νμΈν μ μμΌλ©° κ° λ¦¬μμ€λ³ νμΈν μ μλ μ 보λ μλμ κ°μ΅λλ€.
Mashed: proxyμ κ°μ λ° νμ±νλ proxy μ
Success Rate: 200 codeμ λΉμ¨
RPS: Request Per Second μ΄λΉ μμ² νμ
P50 Latency: νκ· μ§μ°μκ° p50
P95 Latency: νκ· μ§μ°μκ° p95
P59 Latency: νκ· μ§μ°μκ° p99
3. Linkerd κΈ°μ μλ£
https://linkerd.io/2.12/overview/