Google Cloud Platform에서 Docker 사용하기
- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
이재홍 http://www.pyrasis.com 2014.08.02 ~ 2014.09.20
Container Engine에서 Docker 사용하기
구글 클라우드 콘솔(https://console.developers.google.com)에 접속한 뒤 프로젝트를 선택합니다. 그리고 컴퓨팅 → Container Engine을 클릭하고 Create a cluster 버튼을 클릭합니다.
클러스터를 생성합니다.
- 이름: 클러스터 이름입니다. 여기서는 examplecluster를 입력합니다.
- 설명: 클러스터 설명입니다. 각자 상황에 맞게 입력합니다.
- 영역: VM 인스턴스가 생성될 영역입니다. 저는 asia-east1-a를 설정하였습니다.
- CLUSTER SIZE: 클러스터 VM 인스턴스 개수입니다. 여기서 기본값 그대로 사용합니다. 배포를 위한 인스턴스는 제외되므로 1을 설정하면 VM 인스턴스는 2개 생성됩니다.
- 머신 유형: VM 인스턴스 머신 유형입니다. 저는 f1-micro를 설정하였습니다.
설정이 완료되었으면 만들기 버튼을 클릭합니다.
Container Engine 클러스터가 만들어졌습니다.
Container Engine은 이 책을 쓰는 시점에 Alpha 버전입니다. 따라서 Google Cloud SDK에 preview 명령을 설치하고, 이 명령을 기준으로 설명하겠습니다. 추후 정식 버전이 출시되면 preview 명령은 설치하지 않아도 됩니다.
$ gcloud components update preview
다음 내용을 nginx-pod.json 파일로 저장합니다.
{
"apiVersion": "v1beta1",
"kind": "Pod",
"id": "nginx-pod",
"desiredState": {
"manifest": {
"version": "v1beta1",
"id": "nginx-pod",
"containers": [{
"name": "hello-nginx",
"image": "nginx",
"ports": [{ "hostPort": 80, "containerPort": 80 }]
}]
}
},
"labels": { "name": "hello-nginx" }
}
Kubernetes Pod 형식이며 주요 부분만 간단하게 설명하겠습니다.
- apiVersion: Pod 설정 파일 버전입니다. 이 부분은 추후 바뀔 수 있으므로 다음 링크를 참조하기 바랍니다.
https://cloud.google.com/container-engine/docs/pods/operations#manifest - kind: Pod을 만들어야 하므로 Pod을 설정합니다. Pod은 여러 개의 컨테이너를 포함하고 있으며 동일한 물리 호스트(Physical host)에서 실행됩니다.
- id: Pod을 구별하는 ID입니다.
- desiredState: 실행할 컨테이너를 설정합니다.
- containers: 컨테이너 설정을 배열 형태로 작성합니다.
- name: Docker 컨테이너 이름입니다.
- image: 컨테이너로 생성할 Docker 이미지입니다. Docker Hub에서 이미지를 받아오며, 여기서는 nginx 공식 이미지를 사용하겠습니다.
- ports: 외부에서 접속할 수 있도록 hostPort, containerPort에 80번을 설정합니다.
- containers: 컨테이너 설정을 배열 형태로 작성합니다.
- labels: Pod을 구분하는 값이며 여러 개를 설정할 수 있습니다. 서비스에서 Pod을 연결할 때 labels에 설정된 값을 사용합니다.
다음 명령을 실행하여 Pod을 생성합니다.
$ gcloud preview container pods --cluster=examplecluster create --name nginx-pod \
--zone=asia-east1-a \
--config-file=./nginx-pod.json
- --cluster: 클러스터 이름입니다. 앞에서 생성한 examplecluster를 설정합니다.
- --name: 생성할 Pod 이름입니다. nginx-pod을 설정합니다.
- --zone: VM 인스턴스가 생성된 영역입니다. 앞에서 asia-east1-a에 생성했으므로 asia-east1-a를 설정합니다.
- --config-file: 설정 파일 경로입니다. nginx-pod.json을 설정합니다.
다음 내용을 nginx-service.json으로 저장합니다.
{
"apiVersion": "v1beta1",
"kind": "Service",
"id": "nginx",
"port": 80,
"containerPort": 80,
"selector": { "name": "hello-nginx" },
"createExternalLoadBalancer": true
}
- apiVersion: 서비스 설정 파일 버전입니다.
- kind: 서비스를 만들어야 하므로 Service을 설정합니다.
- id: 서비스를 구분하는 ID입니다.
- port: 서비스 포트 번호입니다. 여기서는 80번을 설정합니다.
- containerPort: Pod의 컨테이너에서 열어놓은 포트번호입니다. 앞에서 설정한대로 80번을 설정합니다.
- selector: 연결할 Pod을 설정합니다. 앞에서 설정한대로 hello-nginx를 설정합니다.
- createExternalLoadBalancer: 네트워크 부하 분산을 생성 설정입니다. 네트워크 부하 분산을 생성할 것이므로 true로 설정합니다.
다음 명령을 실행하여 서비스를 생성합니다.
$ gcloud preview container services --cluster=examplecluster create \
--zone=asia-east1-a \
--config-file=./nginx-service.json
- --cluster: 클러스터 이름입니다. 앞에서 생성한 examplecluster를 설정합니다.
- --zone: VM 인스턴스가 생성된 영역입니다. 앞에서 asia-east1-a에 생성했으므로 asia-east1-a를 설정합니다.
- --config-file: 설정 파일 경로입니다. nginx-service.json을 설정합니다.
다음 명령을 실행하여 클러스터 노드의 방화벽에서 80번 포트를 열어줍니다.
$ gcloud compute firewall-rules create examplecluster-node-80 \
--allow=tcp:80 \
--target-tags k8s-examplecluster-node
- examplecluster-node-80: 방화벽 규칙 이름입니다. 각자 상황에 맞게 설정합니다.
- --allow: 허용할 프로토콜과 포트 번호입니다. 여기서는 tcp:80으로 설정합니다.
- --target-tags: 방화벽 규칙을 적용할 노드입니다.
k8s-<클러스터 이름>-node
형식입니다. 클러스터 이름을 examplecluster로 생성했으므로 k8s-examplecluster-node를 설정합니다.
다시 구글 클라우드 콘솔로 접속하여 컴퓨팅 → Compute Engine → 네트워크 부하 분산을 클릭한 뒤 IP 주소를 확인합니다.
웹 브라우저를 실행하고 네트워크 부하 분산의 IP 주소로 접속하면 Container Engine의 Pod에서 실행한 nginx의 기본 페이지가 표시됩니다.
Kubernetes
Kubernetes는 구글에서 개발하고 있는 컨테이너, 클러스터 관리 도구입니다.
저작권 안내
이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.- 블로그, 게시판 등에 퍼가는 것을 금지합니다.
- 비공개 포스트에 퍼가는 것을 금지합니다.
- 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
- 링크 및 SNS 공유는 허용합니다.