웹사이트 검색

Kubernetes에서 다중 컨테이너 포드를 생성하는 방법


이 페이지에서

  1. 전제 조건
  2. 무엇을 할 것인가?\n
  3. 다중 컨테이너 포드 만들기
  4. 결론

포드에는 일반적으로 단일 컨테이너가 있습니다. 즉, 단일 컨테이너 포드가 가장 일반적인 사용 사례이며 포드에 단일 컨테이너가 있을 필요는 없습니다. 단일 pod가 내부에 여러 컨테이너를 가질 수 있는 몇 가지 사용 사례가 있습니다. 다중 컨테이너 포드는 네트워크 공간, 공유 볼륨 등과 같은 리소스를 공유하고 단일 단위로 함께 작동하는 두 개 이상의 관련 컨테이너를 포함하는 포드입니다.

다중 컨테이너 포드를 사용하는 이유 중 하나는 컨테이너 간의 통신이 더 간단하기 때문입니다. Pod 내부의 모든 컨테이너는 동일한 네트워크 공간을 공유하여 localhost를 통해 통신합니다. 다중 컨테이너 포드를 사용하는 또 다른 이유는 모든 컨테이너가 동일한 노드에서 실행되어야 하는 동일한 수명 주기를 갖기 때문입니다. 스토리지 볼륨의 파일을 읽고 수정하여 서로 통신할 수 있도록 모든 컨테이너에 동일한 볼륨을 탑재해야 하는 경우 여러 컨테이너 포드를 사용할 수 있습니다.

이 기사에서는 내부에 2개의 컨테이너가 있는 포드를 생성합니다. 이 예제는 여러 컨테이너가 있는 포드 생성을 이해하는 데 도움이 됩니다.

전제 조건

  1. 워커 노드가 1개 이상 있는 Kubernetes 클러스터.
    Kubernetes 클러스터를 만드는 방법을 알아보려면 여기를 클릭하세요. 이 안내서는 AWS Ubuntu 18.04 EC2 인스턴스에서 1개의 마스터와 2개의 노드가 있는 Kubernetes 클러스터를 생성하는 데 도움이 됩니다.\n

우리는 무엇을 할 것인가?

  1. 다중 컨테이너 포드 만들기

다중 컨테이너 포드 생성

다음 내용을 사용하여 다중 컨테이너 포트 정의 파일을 생성합니다.

vim multi-container-pod-example.yml
apiVersion: v1
kind: Pod
metadata:
  name: multi-container-pod
spec:
  containers:
  - name: container-1
    image: nginx
    ports:
    - containerPort: 80  
- name: container-2 image: alpine command: ["watch", "wget", "-qO-", "localhost"]

이 파일에는 동일한 네트워크, 리소스, 볼륨을 공유하는 2개의 컨테이너에 대한 정의가 있습니다.

기존 포트 목록을 가져오고 다음 명령을 사용하여 다중 컨테이너 포트를 만듭니다.

kubectl get pods #Get a list of existing pods
kubectl create -f multi-container-pod-example.yml #Create a multi container pod
kubectl get pods #Check the pods after creating in the above step

위의 스크린샷에서 READY 상태인 포드 2/2개를 볼 수 있습니다. 2개의 pod가 있고 2개의 pod 중 2개의 pod가 실행 중임을 의미합니다.

포드 목록을 가져오고 방금 만든 포드에 대해 설명합니다.

kubectl get pods
kubectl describe pod multi-container-pod #Get details of the Pod.

포드를 설명하면 그 안의 두 컨테이너에 대한 세부정보를 얻을 수 있습니다.

위의 스크린샷에서 두 개의 컨테이너 container-1과 container-2가 있음을 알 수 있습니다. 이 컨테이너는 동일한 pod에 속합니다.

이제 특정 컨테이너의 로그를 확인하기 위해 포드의 로그를 가져오는 데 사용하는 명령에 컨테이너 이름을 추가할 수 있습니다.

kubectl get pods
kubectl logs multi-container-pod #This does not work
kubectl logs multi-container-pod container-1 #Specify the container name to get the logs

위의 스크린샷에서 명령어에 컨테이너 이름이 지정되지 않은 경우 명령어에 컨테이너 이름을 지정하라는 오류가 발생하는 것을 볼 수 있습니다.

단일 컨테이너의 이름을 지정할 수 있으며 로그를 가져오는 명령에 여러 컨테이너를 지정할 수는 없습니다.

kubectl get pods
kubectl logs multi-container-pod #
kubectl logs multi-container-pod container-1 container-2 #Two containers can not be specified

위의 스크린샷에서 로그를 가져오기 위해 2개의 컨테이너를 지정하면 명령이 실패하는 것을 볼 수 있습니다.

단일 Pod 내에 여러 컨테이너가 있는 경우 Pod에 로그인하는 간단한 명령이 작동하지 않습니다.

kubectl get pods
kubectl exec -it multi-container-pod /bin/bash

특정 컨테이너에 로그인하려면 명령에서 컨테이너 이름을 지정해야 합니다. 또한 동시에 2개의 포드에 로그인할 수 없습니다.

kubectl get pods
kubectl exec -it multi-container-pod -c container-1 /bin/bash #Login into the container

더 이상 필요하지 않을 때는 다음 명령을 사용하여 삭제할 수 있습니다.

kubectl get pod
kubectl delete pod multi-container-pod #Delete the pod

결론

이 도움말에서는 다중 컨테이너 포드를 만드는 방법을 배웠습니다. 또한 특정 컨테이너의 로그를 가져오고 단일 컨테이너에 로그인하는 방법도 살펴보았습니다. 다중 컨테이너 포드는 동일한 포드에 종속 컨테이너를 두는 데 도움이 됩니다.