첫 번째 Kubernetes 랩

KubernetesBeginner
지금 연습하기

소개

첫 번째 Kubernetes 랩에 오신 것을 환영합니다! 이 랩에서는 컨테이너화된 애플리케이션 관리를 위한 강력한 시스템인 Kubernetes 를 소개합니다. 이 랩을 마치면 첫 번째 Kubernetes 배포를 생성하고 상호 작용하게 됩니다.

컨테이너 또는 오케스트레이션 (orchestration) 을 처음 접하더라도 걱정하지 마세요. 각 개념을 진행하면서 설명해 드리겠습니다. Kubernetes 의 세계로의 여정을 시작해 봅시다!

참고: 이 랩은 이미지를 가져와야 하지만, Free 사용자는 랩 환경에서 인터넷에 액세스할 수 없습니다. 이 랩은 Pro 사용자 전용입니다.

Kubernetes 클러스터 시작하기

Minikube 를 사용하여 로컬 Kubernetes 클러스터를 생성하는 것으로 시작합니다. Minikube 를 사용하면 컴퓨터에서 단일 노드 Kubernetes 클러스터를 실행할 수 있어 학습 및 개발에 적합합니다.

먼저 터미널을 엽니다. /home/labex/project 디렉토리에 있어야 합니다. 확실하지 않은 경우 다음을 입력하여 이 디렉토리로 변경할 수 있습니다.

cd /home/labex/project

이제 Minikube 클러스터를 시작해 보겠습니다.

참고: Free 사용자는 인터넷에 연결할 수 없으므로 랩을 시작할 때 minikube 가 이미 사전 시작되어 있습니다. 이 단계를 건너뛸 수 있습니다. Pro 로 업그레이드하여 직접 클러스터를 시작하는 연습을 해보세요.

Pro 사용자 전용
minikube start

Minikube cluster initialization

이 명령은 로컬 머신에 Kubernetes 클러스터를 초기화합니다. 다음은 백그라운드에서 일어나는 일입니다.

  1. Minikube 는 컴퓨터에 가상 머신 (VM) 을 생성합니다.
  2. 이 VM 내부에 Kubernetes 를 설치하고 구성합니다.
  3. 컴퓨터가 클러스터와 통신할 수 있도록 네트워킹을 설정합니다.

이 프로세스는 몇 분 정도 걸릴 수 있습니다. Minikube 가 작동하면서 많은 출력을 보게 됩니다. 모든 내용을 이해하지 못하더라도 걱정하지 마세요. 핵심은 마지막에 "Done!" 메시지가 나타날 때까지 기다리는 것입니다.

첫 번째 Deployment 생성

이제 클러스터가 실행 중이므로 첫 번째 Kubernetes 배포를 생성해 보겠습니다. 배포 (deployment) 는 동일한 파드 (pod) 그룹을 관리하는 Kubernetes 객체입니다. (걱정하지 마세요. 곧 파드가 무엇인지 설명해 드리겠습니다!)

단일 NGINX 웹 서버 컨테이너를 실행하는 배포를 생성합니다. NGINX 는 이 예제에서 사용할 인기 있는 웹 서버입니다.

다음 명령을 실행합니다.

kubectl create deployment hello-kubernetes --image=nginx:latest --port=80

이 명령을 자세히 살펴보겠습니다.

  • kubectl은 Kubernetes 와 상호 작용하기 위한 명령줄 도구입니다.
  • create deployment는 Kubernetes 에 새 배포를 생성하도록 지시합니다.
  • hello-kubernetes는 배포에 지정하는 이름입니다.
  • --image=nginx:latest는 최신 버전의 NGINX Docker 이미지를 사용하도록 지정합니다.
  • --port=80은 컨테이너가 포트 80(웹 트래픽의 표준 포트) 에서 수신 대기하도록 Kubernetes 에 지시합니다.

이 명령을 실행한 후 다음을 볼 수 있습니다.

deployment.apps/hello-kubernetes created

이는 Kubernetes 가 배포를 성공적으로 생성했음을 의미합니다. 하지만 정확히 무엇을 했을까요?

  1. Kubernetes 는 NGINX Docker 이미지를 다운로드했습니다.
  2. 하나 이상의 컨테이너 그룹인 파드를 생성하고 그 안에 NGINX 컨테이너를 시작했습니다.
  3. 파드를 포트 80 에서 액세스할 수 있도록 네트워킹을 설정했습니다.

Deployment 검토

이제 배포를 생성했으므로 Kubernetes 가 설정한 내용을 자세히 살펴보겠습니다.

먼저 배포 상태를 확인합니다.

kubectl get deployments

다음과 유사한 내용을 볼 수 있습니다.

NAME               READY   UP-TO-DATE   AVAILABLE   AGE
hello-kubernetes   1/1     1            1           2m

이 출력은 다음을 알려줍니다.

  • READY: 1/1 은 원하는 파드 중 하나의 파드가 준비되었음을 의미합니다.
  • UP-TO-DATE: 1 은 최신 구성을 실행하는 파드가 하나임을 의미합니다.
  • AVAILABLE: 1 은 트래픽을 처리할 수 있는 파드가 하나임을 의미합니다.

다음으로, 배포가 생성한 파드를 살펴보겠습니다.

kubectl get pods

다음과 유사한 내용을 볼 수 있습니다.

NAME                                READY   STATUS    RESTARTS   AGE
hello-kubernetes-6b89d599b9-x7tpv   1/1     Running   0          3m

정확한 파드 이름은 다를 수 있지만, "Running" 상태의 파드 하나를 볼 수 있습니다. 이 파드에는 NGINX 컨테이너가 포함되어 있습니다.

실행 중인 파드가 보이지 않으면 잠시 기다린 후 다시 시도하십시오. Kubernetes 가 파드를 생성하거나 NGINX 이미지를 다운로드하고 있을 수 있습니다.

파드에 대한 자세한 정보를 얻으려면 다음을 실행합니다.

kubectl describe pod hello-kubernetes-6b89d599b9-x7tpv

참고: hello-kubernetes-6b89d599b9-x7tpvkubectl get pods의 출력에 표시된 파드 이름으로 바꿉니다.

이 명령은 많은 정보를 출력합니다. 지금은 모든 내용을 이해하는 것에 대해 걱정하지 마십시오. 주목해야 할 주요 사항은 다음과 같습니다.

  • Status: "Running"이어야 합니다.
  • IP: 파드의 내부 IP 주소
  • Containers: 파드에서 실행 중인 NGINX 컨테이너에 대한 정보

이 출력에 오류가 표시되면 파드 관련 문제를 진단하는 데 도움이 될 수 있습니다.

애플리케이션 접속

이제 배포가 실행 중이므로 배포한 NGINX 웹 서버에 액세스해 보겠습니다.

일반적인 Kubernetes 환경에서는 네트워크에 배포를 노출하기 위해 Service 를 생성합니다. 이 로컬 환경의 단순성을 위해 대신 포트 포워딩을 사용합니다.

다음 명령을 실행합니다.

kubectl port-forward $(kubectl get pods -o name) 8080:80

이 명령은 다음을 수행합니다.

  • $(kubectl get pods -o name)은 파드의 이름을 가져옵니다.
  • 8080:80은 로컬 머신의 포트 8080 에서 파드의 포트 80 으로 트래픽을 전달하도록 Kubernetes 에 지시합니다.

출력은 표시되지 않지만 명령은 계속 실행됩니다. 이것은 정상입니다!

이제 새 터미널 창을 열고 다음을 실행합니다.

curl http://localhost:8080

NGINX welcome page display

HTML 콘텐츠를 볼 수 있습니다. 이것이 NGINX 환영 페이지입니다!

HTML 이 표시되지 않으면 다음을 확인하십시오.

  • 포트 포워딩 명령이 다른 터미널에서 계속 실행 중인지 확인합니다.
  • curl 명령을 올바르게 입력했는지 확인합니다.
  • curl 이 작동하지 않으면 웹 브라우저에서 http://localhost:8080에 액세스해 보십시오.

포트 포워딩을 중지하려면 원래 터미널 창으로 돌아가 Ctrl+C를 누르십시오.

정리

잘하셨습니다! Kubernetes 에서 애플리케이션을 성공적으로 배포하고 액세스했습니다. 이제 리소스를 정리해 보겠습니다.

먼저 배포를 삭제합니다.

kubectl delete deployment hello-kubernetes

다음과 같은 내용을 볼 수 있습니다.

deployment.apps "hello-kubernetes" deleted

이 명령은 Kubernetes 에 배포 및 파드를 포함한 모든 관련 리소스를 제거하도록 지시합니다.

배포 및 파드가 제거되었는지 확인합니다.

kubectl get deployments
kubectl get pods

두 명령 모두 "No resources found in default namespace."를 반환해야 합니다.

아직 리소스가 표시되면 잠시 기다린 후 다시 시도하십시오. Kubernetes 가 아직 리소스를 제거하는 중일 수 있습니다.

마지막으로 Minikube 클러스터를 중지합니다.

minikube stop

이렇게 하면 Minikube 가상 머신이 중지되지만 클러스터의 상태는 머신에 보존됩니다. 나중에 minikube start로 다시 시작할 수 있습니다.

Minikube 클러스터를 완전히 제거하려면 minikube delete를 실행할 수 있습니다. 그러나 지금은 필요하지 않습니다.

요약

축하합니다! 이 랩에서 Kubernetes 를 처음 접했습니다. 다음을 배우셨습니다.

  1. Minikube 를 사용하여 로컬 Kubernetes 클러스터를 시작합니다.
  2. kubectl 을 사용하여 배포를 생성합니다.
  3. 배포 및 생성된 파드를 검사합니다.
  4. 포트 포워딩을 사용하여 배포된 애플리케이션에 액세스합니다.
  5. 리소스를 정리하고 클러스터를 중지합니다.

이것들은 Kubernetes 작업을 위한 기본적인 기술입니다. 계속 학습하면서 이러한 기본 사항을 기반으로 더 복잡한 애플리케이션을 만들고 더 발전된 Kubernetes 개념을 이해하게 될 것입니다.

Kubernetes 는 강력하고 복잡한 시스템임을 기억하십시오. 일부 개념이 아직 명확하지 않은 것은 정상입니다. Kubernetes 를 배우는 것은 여정입니다. 계속 연습하면 점차 더 깊은 이해를 쌓을 수 있습니다. Kubernetes 학습 여정을 응원합니다!