소개
첫 번째 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

이 명령은 로컬 머신에 Kubernetes 클러스터를 초기화합니다. 다음은 백그라운드에서 일어나는 일입니다.
- Minikube 는 컴퓨터에 가상 머신 (VM) 을 생성합니다.
- 이 VM 내부에 Kubernetes 를 설치하고 구성합니다.
- 컴퓨터가 클러스터와 통신할 수 있도록 네트워킹을 설정합니다.
이 프로세스는 몇 분 정도 걸릴 수 있습니다. 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 가 배포를 성공적으로 생성했음을 의미합니다. 하지만 정확히 무엇을 했을까요?
- Kubernetes 는 NGINX Docker 이미지를 다운로드했습니다.
- 하나 이상의 컨테이너 그룹인 파드를 생성하고 그 안에 NGINX 컨테이너를 시작했습니다.
- 파드를 포트 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-x7tpv를kubectl 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

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 를 처음 접했습니다. 다음을 배우셨습니다.
- Minikube 를 사용하여 로컬 Kubernetes 클러스터를 시작합니다.
- kubectl 을 사용하여 배포를 생성합니다.
- 배포 및 생성된 파드를 검사합니다.
- 포트 포워딩을 사용하여 배포된 애플리케이션에 액세스합니다.
- 리소스를 정리하고 클러스터를 중지합니다.
이것들은 Kubernetes 작업을 위한 기본적인 기술입니다. 계속 학습하면서 이러한 기본 사항을 기반으로 더 복잡한 애플리케이션을 만들고 더 발전된 Kubernetes 개념을 이해하게 될 것입니다.
Kubernetes 는 강력하고 복잡한 시스템임을 기억하십시오. 일부 개념이 아직 명확하지 않은 것은 정상입니다. Kubernetes 를 배우는 것은 여정입니다. 계속 연습하면 점차 더 깊은 이해를 쌓을 수 있습니다. Kubernetes 학습 여정을 응원합니다!


