연습 - Kubernetes에 마이크로 서비스 컨테이너 배포
Kubernetes는 컨테이너를 실행합니다. Kubernetes가 YAML 파일을 통해 수행할 작업을 설명합니다. 이 연습에서는 Kubernetes에서 백 엔드 서비스를 배포하고 실행할 수 있도록 파일 생성 과정을 안내합니다.
중요
계속하기 전에 Kubernetes 구현이 설치되어 있는지 확인해야 합니다. 여기서는 codespace에서 실행되는 k3d 구현을 사용합니다. 이 구현을 설치하여 랩을 시작합니다.
Kubernetes 도구 및 구현 설치
kubectl 도구와 k3d Kubernetes 구현을 모두 설치해야 합니다.
codespace에서 터미널 탭으로 전환한 다음, 다음 명령을 실행하여 필수 구성 요소를 설치합니다.
sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl
다음으로 Kubernetes 패키지 리포지토리에 대한 서명 키를 다운로드하려면 다음 명령을 실행합니다.
sudo mkdir /etc/apt/keyrings curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
디렉터리가 이미 있다는 오류가 표시되면
curl
명령을 별도로 실행합니다.Kubernetes 리포지토리를 apt 구성에 추가합니다.
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
이제 kubectl 도구를 설치할 수 있습니다.
sudo apt-get update sudo apt-get install -y kubectl
마지막으로 Kubernetes의 k3d 구현을 설치하고 클러스터를 만듭니다.
curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash k3d cluster create devcluster --config k3d.yml
백 엔드 서비스용 배포 파일 만들기
YAML 파일을 사용하여 Kubernetes에 대한 컨테이너 배포를 관리하는 파일을 만들 수 있습니다. 백 엔드 서비스를 배포하는 파일을 만들어 보겠습니다.
backend-deploy.yml codespace의 donet-kubernetes 폴더에 새 파일을 만듭니다.
다음 텍스트를 파일에 복사한 다음, 저장합니다.
--- apiVersion: apps/v1 kind: Deployment metadata: name: productsbackend spec: replicas: 1 template: metadata: labels: app: productsbackend spec: containers: - name: productsbackend image: [YOUR DOCKER USER NAME]/productservice:latest ports: - containerPort: 80 env: - name: ASPNETCORE_URLS value: http://*:80 selector: matchLabels: app: productsbackend --- apiVersion: v1 kind: Service metadata: name: productsbackend spec: type: NodePort ports: - port: 80 targetPort: 80 nodePort: 32001 selector: app: productsbackend
[YOUR DOCKER USER NAME]
자리 표시자를 실제 Docker 사용자 이름으로 바꿉니다.
이 파일은 몇 가지 작업을 수행합니다.
첫 번째 부분은 Kubernetes에 배포될 컨테이너의 배포 사양을 정의합니다. 이는 하나의 복제본, 컨테이너 이미지를 찾을 위치, 컨테이너에서 열 포트를 지정하고 일부 환경 변수를 설정합니다. 이 첫 번째 부분에서는 컨테이너 및 사양을 참조하는 데 사용할 수 있는 레이블과 이름도 정의합니다.
두 번째 부분은 컨테이너가 Kubernetes NodePort 서비스로 실행되도록 정의합니다. 이 모듈에서는 NodePorts의 세부 사항을 모두 이해할 필요가 없습니다. 그러나 클러스터 외부에서 서비스를 테스트할 수 있도록 이러한 유형의 서비스가 외부 IP 주소를 노출한다는 것을 알아야 합니다.
백 엔드 마이크로 서비스 배포 및 실행
다음으로 마이크로 서비스를 배포하고 실행해 보겠습니다.
터미널 탭에서 다음 명령을 실행합니다.
kubectl apply -f backend-deploy.yml
이 명령은 만든 파일을 실행하도록 Kubernetes에 지시합니다. Docker Hub에서 이미지를 다운로드하고 컨테이너를 만듭니다.
kubectl apply
명령은 결과를 신속하게 반환합니다. 그러나 컨테이너를 만드는 데 시간이 걸릴 수 있습니다. 진행 상황을 보려면 다음 코드를 사용합니다.kubectl get pods
결과 출력에는 productsbackend가 있는 행과 NAME 열 아래에 임의의 문자열이 있습니다. 모든 것이 준비되면 READY 열 아래에 1/1이 표시되고 STATUS 열 아래에 Running이 표시됩니다.
서비스를 테스트하려면 포트 탭으로 전환한 다음 백 엔드 포트의 로컬 주소 근처에 있는 지구본 아이콘을 선택합니다. 브라우저에서 해당 주소로 새 탭이 열립니다.
일부 제품을 쿼리하려면 /api/product와 함께 주소를 추가한 다음 Enter 키를 누릅니다. JSON 형식으로 나열된 일부 제품 정보가 표시됩니다.
[ { "id": 1, "name": "Solar Powered Flashlight", "description": "A fantastic product for outdoor enthusiasts", "price": 19.99, "imageUrl": "product1.png" }, { "id": 2, "name": "Hiking Poles", "description": "Ideal for camping and hiking trips", "price": 24.99, "imageUrl": "product2.png" }, { "id": 3, "name": "Outdoor Rain Jacket", "description": "This product will keep you warm and dry in all weathers", "price": 49.99, "imageUrl": "product3.png" }, ...
배포 파일 만들기 및 프런트 엔드 서비스 실행
백 엔드 서비스와 마찬가지로 프런트 엔드용 배포 파일도 필요합니다.
donet-kubernetes에서 frontend-deploy.yml 폴더에 새 파일을 만듭니다.
다음 코드를 파일에 붙여넣습니다.
--- apiVersion: apps/v1 kind: Deployment metadata: name: storefrontend spec: replicas: 1 template: metadata: labels: app: storefrontend spec: containers: - name: storefrontend image: [YOUR DOCKER USER NAME]/storeimage:latest ports: - containerPort: 80 env: - name: ASPNETCORE_URLS value: http://*:80 - name: ProductEndpoint value: http://productsbackend selector: matchLabels: app: storefrontend --- apiVersion: v1 kind: Service metadata: name: storefrontend spec: type: NodePort ports: - port: 80 targetPort: 80 nodePort: 32000 selector: app: storefrontend
[YOUR DOCKER USERNAME]
자리 표시자를 실제 Docker 사용자 이름으로 바꿉니다.이 파일은 백 엔드 마이크로 서비스용으로 만든 파일과 비슷합니다. 다음과 같은 두 가지 차이점이 있습니다.
- 배포의
spec.template.spec.containers.image
값에서 실행할 다른 컨테이너를 지정합니다. spec.template.spec.containers.env
섹션 아래에 새 환경 변수가 있습니다. storefrontend 애플리케이션의 코드가 백 엔드를 호출하지만 FQDN(정규화된 도메인 이름)을 지정하지 않았고 백 엔드 마이크로 서비스의 IP 주소를 알 수 없기 때문에Deployment
의metadata.name
노드에서 지정한 이름을 사용합니다. Kubernetes는 나머지를 처리합니다.
- 배포의
다음 명령을 사용하여 Kubernetes에 컨테이너를 배포합니다.
kubectl apply -f frontend-deploy.yml
다시
kubectl get pods
를 사용하여 배포 상태를 볼 수 있습니다. storefrontend 행에 Running이 STATUS 열 아래에 표시되면 모든 준비가 완료된 것입니다.프런트 엔드 서비스를 테스트하려면 포트 탭으로 전환한 다음 프런트 엔드 포트의 로컬 주소 오른쪽에 있는 지구본 아이콘을 선택합니다. 브라우저에 홈 페이지가 표시됩니다.
제품을 선택합니다. 카탈로그에는 Contoso의 상품이 표시됩니다.
이 연습에서는 Kubernetes 내에서 컨테이너를 실행하는 방법을 정확히 설명하는 배포 파일을 만들었습니다. 그런 다음, Kubernetes가 Docker Hub에서 이미지를 다운로드하고 컨테이너를 시작하도록 합니다.