ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • kubernetes 로 컨테이너 실행해 보기
    Kubernetes 2018. 6. 4. 09:00
    쿠버네티스를 이용해서 컨테이너를 실행해 보도록 하겠습니다. 컨테이너를 실행하기 위해서는 몇 가지 방법이 있습니다. kubectl 명령어로 직접 실행할수도 있고, 컨테이너를 어떻게 실행할지에 대한 상세한 내용을 yaml형식의 파일에 기록해서 사용할수도 있습니다. yaml 파일을 이용해서 실행하게 되면 버전관리 시스템과 연동해서 해당 컨테이너를 과거엔 어떤 사양으로 실행시켰었는지 확인할 수 있는 장점이 있습니다. 그 부분은 나중에 상세히 살펴보기로 하고 우선은 kubectl 명령어로 직접 컨테이너를 실행시켜 보도록 하겠습니다.
    nginx를 컨테이너로 실행시켜 보도록하겠습니다. 아래 명령어를 입력해 봅니다.
    kubectl run nginx --image nginx --port=80
    
    kubectl 명령어를 입력할때는 kubectl run을 사용하고 실행하려는 컨테이너의 이름을 입력하고 --image옵션에 실행할 컨테이너 이미지를 입력합니다. port옵션으로 이 컨테이너가 사용할 포트를 지정해 줍니다. 여기서는 nginx-app이라는 이름으로 nginx컨테이너를 실행하도록 했습니다. nginx가 제대로 실행됐는지 확인하기 위해서 컨테이너 상태를 확인해 보겠습니다.
    kubectl get pods
    
    쿠버네티스에 있는 자원의 현황을 보기위해서 가장 많이 사용하는 명령어가 kubectl get 입니다. get뒤에 보고 싶은 자원과 옵션을 명시해서 현황을 확인할 수 있습니다. 여기서는 pods를 입력했습니다. nginx-app-xxxxxx로 컨테이너가 생성되고 있는걸 확인할 수 있습니다. 조금 시간이 지난후에 running상태로 컨테이너가 실행된 걸 확인할 수 있습니다. 포드(pod)는 쿠버네티스 안에서 실행되는 컨테이너들의 모음입니다. 쿠버네티스는 컨테이너를 실행할때 사용하는 가장 작은 단위로 포드를 사용합니다. 같은 목적을 지닌 여러개의 컨테이너들을 모아서 하나의 포드로 실행하도록 하고 있습니다. 포드의 자세한 내용은 뒷부분에 알아보도록 하겠습니다.
    쿠버네티스에서는 포드를 실행하기 위해서 여러가지 컨트롤러를 제공하고 있습니다. kubectl run으로 포드를 실행시켰을때 기본 옵션은 디플로이먼트(deployment)입니다. 


    디플로이먼트를 이용해서 실행중인 포드 개수를 늘려보도록 하겠습니다. 아래 명령어를 이용해서 포드 개수를 2개로 늘릴수 있습니다.
    kubectl scale deploy nginx-app --replicas=2
    
    kubectl get pods를 이용해서 포드가 2개로 늘어난걸 확인할 수 있습니다.
    이제 실제로 컨테이너로 실행중인 nginx에 접속하는 방법을 알아보도록 하겠습니다. 80포트를 이용하도록 설정해서 컨테이너를 띄웠지만 실제로 localhost로 웹브라우저에서 접속해 보면 사이트에 연결할 수 없다는 메세지를 볼 수 있습니다. 이렇게 되는 이유는 쿠버네티스 내부에서 사용하는 네트워크는 외부와는 격리되어 있기 때문입니다. 쿠버네티스 내부에서 띄운 컨테이너를 외부에서 접근가능하게 하기위해서는 쿠버네티스의 서비스(service)를 사용해야 합니다. 서비스를 설정하는 방법은 아래와 같습니다. 서비스의 타입은 ClusterIP, NodePort, LoadBalancer, ExteralName등 4가지가 있습니다. 서비스 타입에 대한 자세한 내용은 나중에 알아보기로 하고 우선 여기서는 NodePort를 이용해 보도록 하겠습니다.
    kubectl expose deployment nginx-app --type=NodePort
    

    NodePort를 사용하면 서비스가 생성되고 kubectl get service를 이용해서 nginx-app이라는 서비스가 생성된걸 확인할 수 있습니다. 서비스 내용중 PORT부분을 보면 80:30362라는 부분이 보입니다. 쿠버네티스 내부의 80포트가 30362라는 외부포트와 연결되었다는 의미입니다. 이제 브라우저에서 localhost:30362로 접근해 보면 nginx 페이지가 보이는걸 확인할 수 있습니다.


    kubectl describe 명령을 사용해서 좀 더 상세한 내용을 확인할 수 있습니다. Endpoints 항목을 보면 service에 2개의 컨테이너가 연결되어 있는걸 확인할 수 있습니다.

    이제 사용한 자원들을 정리해 보겠습니다. 다음 처럼 입력하면 사용한 자원들이 쿠버네티스에서 지워지는걸 확인할 수 있습니다.
    kubectl delete deploymene nginx-app
    kubectl delete service nginx-app
    



    댓글

Designed by Tistory.