쿠버네티스 클러스터에 linkerd를 설치하고 샘플 애플리케이션을 배포하여 linkerd를 사용해 보려고 한다. k8s 클러스터는 minikube를 사용하여 진행했고, https://linkerd.io/2.16/getting-started/ 에 나온 내용을 기반으로 공부한 내용을 추가하여 포스팅을 작성한다.
1. linkerd 설치
local machine에 linkerd를 설치하기 위해 아래 커맨드를 입력한다.
$ curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/install-edge | sh
$ export PATH=$HOME/.linkerd2/bin:$PATH
그 이후에 정상적으로 설치되어 있는지 확인하기 위해 아래 커맨드를 입력한다. 만약 아래처럼 버전이 나타난다면 정상적으로 설치된 것이다.
$ linkerd version
Client version: edge-24.11.5
Server version: stable-2.14.10
2. cluster에 linkerd 설치
linkerd check --pre
커맨드를 입력하면 클러스터에 linkerd를 설치할 수 있는 상태인지 확인해 준다. 만약 정상적으로 통과하지 못한다면(= x 표시가 뜨는 구간이 있다면) 오류 메시지를 확인하여 설치 전에 문제를 해결해야 한다.
$ linkerd check --pre
클러스터에 linkerd를 설치할 준비가 되었다면 아래 커맨드를 입력해 클러스터에 linkerd를 설치한다. 이 커맨드를 입력하면 linkerd를 구성하기 위해 필요한 리소스를 생성하는 manifest가 생성된다.
$ linkerd install --crds | kubectl apply -f -
$ linkerd install --set proxyInit.runAsRoot=true | kubectl apply -f -
설치가 완료되면 설치가 잘 되었는지 확인하기 위해 아래 커맨드를 입력한다.
$ linkerd check
3. Demo App 설치
linkerd가 모두 설치되면 demo application을 설치한다. linkerd에서 제공해 주는 demo application인 Emojivoto라는 애플리케이션이며, gRPC와 HTTP를 모두 사용하여 원하는 이모지에게 투표하는 기능을 제공한다. 아래 커맨드를 사용하여 다운로드한다.
$ curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/emojivoto.yml \
| kubectl apply -f -
애플리케이션이 다운로드한다고 linkerd가 바로 동작하는 게 아니라, 애플리케이션을 “mesh”해야 한다. 이 작업을 하기 전, 제대로 동작하는지 확인하기 위해 port-forward을 해준다.
$ kubectl -n emojivoto port-forward svc/web-svc 8080:80
그 뒤, http://localhost:8080에 방문하면 아래와 같은 웹 페이지를 확인할 수 있고, 도넛 이모지를 입력하면 다른 이모지들과 달리 404 페이지가 뜨는 것을 확인할 수 있다.
이제 이 애플리케이션을 “mesh” 하여 linkerd를 사용해보려고 한다. 아래 커맨드를 사용하면 emoji, vote-bot, voting, web deployment가 injected 되었다는 메시지를 확인할 수 있다. inject
커맨드를 사용함으로써 매니페스트를 실행한 다음, 클러스터에 다시 적용하는데, Pod가 생성될 때 linkerd가 프록시를 Pod에 주입하도록 지시하는 annotation을 Pod 사양에 추가하는 것이다.
$ 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
이것으로 linkerd를 애플리케이션에 추가했다. check
커맨드를 사용해 data plane에서 제대로 작동하는지 확인한다.
$ linkerd -n emojivoto check --proxy
4. Linkerd Dashboard
이제는 linkerd가 잘 동작하는지 실제로 확인해 보려고 한다. core control plane은 정말 필요한 최소한의 기능만 들어가 있기 때문에 대시보드 같은 기능을 추가로 사용하기 위해서는 extension을 설치해야 한다. 여기에서는 viz라는 이름의 extension을 설치할 예정이다.
$ linkerd viz install | kubectl apply -f - # install the on-cluster metrics stack
$ linkerd check
check가 모두 체크 표시로 뜨며 viz extension 준비가 완료되면 아래 커맨드를 사용해 dashboard를 활성화한다. 가이드에서는 포트를 따로 지정하지 않았지만 나는 포트를 8000번 포트로 지정하여 대시보드가 뜨게 했다.
$ linkerd viz dashboard --port 8000
그 이후 http://localhost:8000/namespaces로 들어가면(보통 자동으로 열리는데 arc 브라우저 기준으로 자동으로 열리지 않는 경우도 있었다) 대시보드를 확인할 수 있다.
잘 동작하는 것은 확인했는데 linkerd가 어떻게 돌아가고 어떤 철학을 가지고 있는지는 아직 잘 모르겠다. 앞으로 공부해 봐야겠다.