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

44BITS 소식과 클라우드 뉴스를 전해드립니다. 지금 5,000명 이상의 구독자와 함께 하고 있습니다 📮

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

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

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

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

$ brew cask install docker

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

메뉴 막대의 도커 메뉴

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

도커 버전 - 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/v1.10.0/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

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

쿠버네티스 대시보드 화면

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

44BITS 로고

컨테이너란? 리눅스의 프로세스 격리 기능

🏷️ 키워드, 2020-01-23 - 리눅스 컨테이너는 운영체제 수준의 가상화 기술로 리눅스 커널을 공유하면서 프로세스를 격리된 환경에서 실행하는 기술을 의미합니다. 하드웨어를 가상화하는 가상 머신과 달리 커널을 공유하는 방식이기 때문에 실행 속도가 빠르고, 성능 상의 손실이 거의 없다는 장점이 있습니다.
도움이 되셨나요?
RSS 리더 피들리에서 최신 글을 구독할 수 있습니다.
트위터, 페이스북으로 44BITS의 새소식을 전해드립니다.
✔ 44BITS의 다른 활동도 확인해보세요. 다양한 채널에서 만나볼 수 있습니다.
✔ 따뜻한 댓글 하나와 피드백은 큰 힘이 됩니다.

루비(Ruby): 블록, Proc 객체, 람다 함수의 차이

🗒 기사, 2015-12-07 - 프로그래밍 언어 루비에서는 블록 문법이 많이 활용됩니다. 블록 문법은 루비의 익명 함수 표현법 중 하나입니다. 루비에는 블록 뿐만아니라 Proc 객체나 lambda 문을 통해서도 익명 함수를 정의할 수 있습니다. 이 글에서는 블록 문법, Proc 객체, 람다 함수의 사용법과 차이에 대해서 소개합니다.

유비쿼티 유니파이(Ubiquiti Unifi) 제품 기반 홈 네트워크 구축기

🗒 기사, 2019-11-18 - 이번에 홈 네트워크를 ipTime에서 유비쿼티 유니파이(Ubiquiti UniFi) 제품들로 변경했습니다. Unifi 시큐리티 게이트웨이, UniFi 스위치, Unifi AP AC Lite, UniFi 클라우드키 젠2로 홈 네트워크를 구성하고, 장비들을 셋업하는 방법에 대해서 소개합니다.

아마존 EC2(Amazon EC2) 인스턴스 타입 검색 기능 추가

🗞 새소식, 2020-01-10 - 지난 10월 22일 아마존 EC2에는 인스턴스 타입을 검색하고 비교할 수 있는 검색 메뉴가 추가되었습니다. 아마존 EC2는 다양한 인스턴스 타입을 제공해서 선택하는 것도 쉽지 않았습니다. 인스턴스 검색 기능을 사용해 현재 상황에서 적절한 인스턴스 타입을 선택하는데 도움이 될 것으로 보입니다. 이 기능은 웹 콘솔과 API로 제공됩니다.