첫 번째 Kubernetes 랩

KubernetesBeginner
지금 연습하기

소개

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

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

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

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 중급 레벨의 실험이며 완료율은 55%입니다.학습자들로부터 93%의 긍정적인 리뷰율을 받았습니다.

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 학습 여정을 응원합니다!