Canvas 1 Layer 1

도커(Docker), 쿠버네티스(Kubernetes) 통합 도커 데스크톱을 스테이블 채널에 릴리즈

쿠버네티스 통합 버전 도커 데스크톱

도커Docker가 컨테이너 런타임으로서 자리잡은 이후 한동안 컨테이너 오케스트레이션 분야의 경쟁이 치열했습니다. 도커 사에서 직접 만들었던 스웜Swarm을 비롯해, 구글Google의 쿠버네티스Kubernetes, 랜처Rancher의 캐틀Cattle, 하시코프Hashicorp의 노마드Nomad 등 다양한 도구가 등장했습니다. 이외에도 클라우드 기반의 매니지드 서비스로는 구글 클라우드 플랫폼Google Cloud Platform의 구글 쿠버네티스 엔진이 인기를 끌었으며, 아마존 웹 서비스Amazon Web Service에서도 독자적인 컨테이너 관리 서비스인 엘라스틱 컨테이너 서비스ECS, Elastic Container Service를 제공한 바있습니다. 또한 도커 사에서는 도커 1.12에서 스웜을 아예 도커 엔진에 포함시킨 스웜 모드Swarm mode를 내놓았습니다. 현재는 쿠버네티스가 데 실질적인 표준으로 자리 잡으면서 일단락 된 상황입니다.

도커 사에서는 스웜을 여전히 개발중이지만, 대세에 따라 도커콘DockerCon 2017 EU에서 도커 포 맥Docker for mac과 도커 포 윈도우Docker for Windows에서 쿠버네티스를 지원하겠다고 발표한 바 있습니다. 올 해 1월 9월 도커 블로그에서는 도커 포 맥 커뮤니티 에디션의 엣지 릴리즈에서 쿠버네티스 지원을 발표했습니다.* 이에 따라 엣지 릴리즈 17.12.0-ce-mac45부터 이미 쿠버네티스가 통합된 도커 포 맥을 사용할 수 있습니다. 또한 도커 포 윈도우에서도 엣지 릴리즈 18.02 버전부터 쿠버네티스가 통합된 버전을 사용할 수 있었습니다.

* 도커 포 맥과 도커 포 윈도우 릴리즈는 크게 두 개의 채널에서 이루어집니다. 개발중이거나 실험중인 기능을 포함한 버전은 엣지 채널에 먼저 릴리즈 됩니다. 이와 달리 안정 버전은 스테이블 채널에 릴리즈됩니다.

지난 달 7월 25일에는 쿠버네티스 지원이 공식적으로 스테이블 채널에 릴리즈 되었다는 발표가 있었습니다. 따라서 이제 엣지 채널을 굳이 사용하지 않더라도 최신 버전의 도커 포 맥이나 도커 포 윈도우를 설치하기만 하면 곧바로 쿠버네티스를 사용할 수 있게 되었습니다.

쿠버네티스 통합 버전 도커 설치

쿠버네티스가 통합된 최신 버전 도커는 도커 공식 웹사이트에서 다운로드 받을 수 있습니다. 스테이블 채널의 최신 버전을 다운로드 받아 설치하면 됩니다. 현재는 공식 웹사이트에서 도커를 다운로드 받으려면 도커 공식 사이트에 가입하고 로그인을 해야만합니다.

맥에서는 홈브류 캐스크Homebrew Cask를 사용해 설치하는 것도 가능합니다.*

* 홈브류 캐스크는 맥OSmacOS의 GUI 애플리케이션 설치를 도와주는 패키지 관리자입니다. 하지만 패키지 등록 및 관리 기준이 명확하지 않아서 사용하기 전에 패키지 정보에서 설치 파일의 출처를 확인할 것을 권장합니다. master 브랜치의 도커 패키지 정보는 docker.rb 파일에서 확인할 수 있습니다.

$ brew cask install docker

설치가 완료되면 도커는 맥OS의 애플리케이션으로 등록됩니다. 이 애플리케이션을 실행해줍니다. 도커가 실행되면 맥OS 메뉴 막대 오른편의 상태 메뉴에 도커 아이콘이 등록됩니다. 이 아이콘을 클릭하면 도커의 메뉴가 나타납니다.

메뉴 막대의 도커 메뉴
메뉴 막대의 도커 메뉴

도커에 관하여About Docker를 선택합니다.

도커 버전 - 18.06.0-ce-mac70(26399)
도커 버전 - 18.06.0-ce-mac70(26399)

현재 설치된 도커와 다른 도구들의 버전을 확인할 수 있습니다. 이를 통해 쿠버네티스 v1.10.3이 함께 설치되어있는 것을 확인할 수 있습니다.

도커 포 맥에서 쿠버네티스 활성화

도커 포 맥에서 쿠버네티스를 사용하려면 먼저 활성화를 해주어야합니다. 도커 메뉴에서 설정Preferences을 선택합니다. 도커 설정 창이 나타나면 쿠버네티스Kubernetes 탭을 선택합니다.

도커 데스크톱의 쿠버네티스 설정 탭
도커 데스크톱의 쿠버네티스 설정 탭

쿠버네티스 활성화Enable Kubernetes를 선택합니다. docker stack 명령어의 기본 오케스트레이터도 쿠버네티스Kubernetes를 선택해줍니다*. 적용Apply을 클릭하면 쿠버네티스를 실행합니다. 5분 정도 걸립니다.

* 이는 선택사항입니다. 필요에 따라서 설정해주세요

쿠버네티스가 실행되고 나면 오른쪽 아래에 표시됩니다
쿠버네티스가 실행되고 나면 오른쪽 아래에 표시됩니다

쿠버네티스가 정상적으로 실행되고 나면 설정 화면의 오른쪽 아래에 쿠버네티스가 실행중입니다Kubernetes is running이라고 표시됩니다.

쿠버네티스 대시보드 실행 예제

셸로 이동해서 간단한 예제를 실행해보겠습니다. 쿠버네티스가 활성화되어야만 kubectl 명령어를 사용할 수 있습니다. 먼저 kubectl version 명령어 클라이언트와 서버 버전을 확인해봅니다.

$ kubectl version --output yaml
clientVersion:
  buildDate: 2018-05-21T09:17:39Z
  compiler: gc
  gitCommit: 2bba0127d85d5a46ab4b778548be28623b32d0b0
  gitTreeState: clean
  gitVersion: v1.10.3
  goVersion: go1.9.3
  major: "1"
  minor: "10"
  platform: darwin/amd64
serverVersion:
  buildDate: 2018-05-21T09:05:37Z
  compiler: gc
  gitCommit: 2bba0127d85d5a46ab4b778548be28623b32d0b0
  gitTreeState: clean
  gitVersion: v1.10.3
  goVersion: go1.9.3
  major: "1"
  minor: "10"
  platform: linux/amd64

v1.10.3이 설치되어있는 것을 확인할 수 있습니다. 먼저 컨텍스트를 확인해봅니다.

$ kubectl config get-contexts
CURRENT   NAME                 CLUSTER                      AUTHINFO             NAMESPACE
*         docker-for-desktop   docker-for-desktop-cluster   docker-for-desktop

도커 포 맥에서 생성한 docker-for-desktop으로 설정되어있습니다. 노드node를 확인해봅니다.

$ kubectl get nodes
NAME                 STATUS    ROLES     AGE       VERSION
docker-for-desktop   Ready     master    4m        v1.10.3

docker-for-desktop 노드를 확인할 수 있습니다. 다음으로 팟pod을 확인해봅니다.

$ kubectl get pods --all-namespaces
NAMESPACE     NAME                                         READY     STATUS    RESTARTS   AGE
docker        compose-7447646cf5-f4qpb                     1/1       Running   0          2m
docker        compose-api-6fbc44c575-ps92s                 1/1       Running   0          2m
kube-system   etcd-docker-for-desktop                      1/1       Running   0          1m
kube-system   kube-apiserver-docker-for-desktop            1/1       Running   0          1m
kube-system   kube-controller-manager-docker-for-desktop   1/1       Running   0          1m
kube-system   kube-dns-86f4d74b45-2q4mc                    3/3       Running   0          2m
kube-system   kube-proxy-2d77h                             1/1       Running   0          2m
kube-system   kube-scheduler-docker-for-desktop            1/1       Running   0          1m

쿠버네티스에서 기본적으로 실행되는 팟들이 실행되어있음을 확인할 수 있습니다. 이번에는 쿠버네티스 대시보드Kubernetes Dashboard를 실행해보겠습니다. apply 명령어는 웹 상의 파일을 곧바로 사용할 수 있습니다. 이 기능을 사용해 공식 저장소에서 제공하는 kubernetes-dashboard.yaml 파일을 적용합니다.

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

서비스 목록을 출력해봅니다.

$ kubectl get services --all-namespaces
NAMESPACE     NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
default       kubernetes             ClusterIP   10.96.0.1       <none>        443/TCP         3m
docker        compose-api            ClusterIP   10.103.58.23    <none>        443/TCP         2m
kube-system   kube-dns               ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP   2m
kube-system   kubernetes-dashboard   ClusterIP   10.110.125.52   <none>        443/TCP         22s

kube-system 네임스페이스에 대시보드가 등록된 것을 확인할 수 있습니다. 대시보드에 접속하려면 쿠버네티스 서버의 프록시를 실행해야합니다.

$ kubectl proxy
Starting to serve on 127.0.0.1:8001

서버가 실행되어있는 상태에서 아래 주소로 접속합니다.

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/overview?namespace=default

대시보드가 출력되는 것을 볼 수 있습니다(설정 화면이 나오면 일단 스킵해줍니다).

쿠버네티스 대시보드 화면
쿠버네티스 대시보드 화면

여기까지 도커 포 맥에서 쿠버네티스를 사용하는 간단한 예제를 살펴보았습니다.