이 블로그는 이 트윗이 있었기에 가능했습니다!
훌륭한 #Couchbase #쿠버네티스 해킹 세션 @saturnism많은 것을 배웠고, 멋진 블로그를 기대합니다.
- 아룬 굽타 (@arungupta) 2016년 2월 27일

Kubernetes는 Google의 Docker 컨테이너용 오픈 소스 오케스트레이션 시스템입니다. 여러 호스트에서 컨테이너화된 애플리케이션을 관리하고 애플리케이션의 배포, 유지 관리 및 확장을 위한 기본 메커니즘을 제공합니다. 사용자는 원하는 상태에 대한 선언적 기본 요소를 제공할 수 있습니다(예: "Couchbase 서버 5개 필요"). 그러면 자동 재시작, 스케줄 재조정, 컨테이너 복제 등의 Kubernetes 자가 복구 메커니즘이 이 상태를 충족하도록 보장합니다. 사용자는 상태를 정의하기만 하면 Kubernetes가 클러스터에서 항상 상태를 충족하도록 보장합니다. 쿠버네티스의 주요 개념 에서 Kubernetes의 핵심 개념을 설명합니다. 여러 파트로 구성된 이 블로그 시리즈에서는 다음을 실행하는 방법을 보여줍니다. 카우치베이스 를 여러 가지 방법으로 살펴봅니다. 첫 번째 파트는 Vagrant를 사용한 간단한 설정으로 시작합니다.
쿠버네티스 시작하기
Kubernetes를 실행하는 방법은 여러 가지가 있지만 가장 간단한(반드시 예측 가능한 것은 아닙니다;) 방법은 Vagrant를 사용하여 실행하는 것입니다.
- 최신 다운로드 쿠버네티스 릴리즈, 1.1.8로 업데이트하고 아카이브를 확장하세요.
- 다음 이름으로 Kubernetes 클러스터를 시작합니다:
1234cd kubernetesexport KUBERNETES_PROVIDER=vagrant./cluster/kube-up.sh
출력은 다음과 같이 표시됩니다:
12345678910111213141516171819202122232425kubernetes-1.1.8 > ./kubernetes/cluster/kube-up.sh... Starting cluster using provider: vagrant... calling verify-prereqs... calling kube-upBringing machine 'master' up with 'virtualbox' provider...Bringing machine 'minion-1' up with 'virtualbox' provider...==> master: Importing base box 'kube-fedora21'.... . .Validate output:NAME STATUS MESSAGE ERRORcontroller-manager Healthy ok nilscheduler Healthy ok niletcd-0 Healthy {"health": "true"} niletcd-1 Healthy {"health": "true"} nilCluster validation succeededDone, listing cluster services:Kubernetes master is running at https://10.245.1.2Heapster is running at https://10.245.1.2/api/v1/proxy/namespaces/kube-system/services/heapsterKubeDNS is running at https://10.245.1.2/api/v1/proxy/namespaces/kube-system/services/kube-dnsKubeUI is running at https://10.245.1.2/api/v1/proxy/namespaces/kube-system/services/kube-uiGrafana is running at https://10.245.1.2/api/v1/proxy/namespaces/kube-system/services/monitoring-grafanaInfluxDB is running at https://10.245.1.2/api/v1/proxy/namespaces/kube-system/services/monitoring-influxdb
쿠버네티스 클러스터에서 카우치베이스 실행하기
쿠버네티스에서 도커 컨테이너를 실행하는 가장 쉬운 방법은 kubectl 실행 명령을 사용합니다. 명령 사용법은 다음과 같습니다:
|
1 |
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [flags] |
이 명령은 복제된 특정 이미지를 실행합니다. 이미지 복제는 생성된 컨테이너를 관리할 복제 컨트롤러를 생성하여 처리합니다. 이 명령을 실행하기 위한 전체 옵션 목록은 다음을 통해 확인할 수 있습니다:
|
1 |
./cluster/kubectl.sh run --help |
카우치베이스 도커 컨테이너 에서 다양한 Couchbase용 Docker 컨테이너에 대해 설명합니다. 이 블로그에서는 아룽업타/카우치베이스 이미지가 미리 구성되어 있습니다.
|
1 |
./cluster/kubectl.sh run couchbase --image=arungupta/couchbase |
출력 결과가 표시됩니다:
|
1 |
replicationcontroller "couchbase" created |
출력에서 복제 컨트롤러가 생성되었음을 확인할 수 있습니다. 확인해 보겠습니다:
|
1 2 3 |
./kubernetes/cluster/kubectl.sh get rc CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE couchbase couchbase arungupta/couchbase run=couchbase 1 17s |
이제 포드를 확인합니다:
|
1 2 3 |
./kubernetes/cluster/kubectl.sh get po NAME READY STATUS RESTARTS AGE couchbase-tzdhl 0/1 Pending 0 36s |
파드의 상태를 확인해 보겠습니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
./kubernetes/cluster/kubectl.sh describe pod couchbase-tzdhl Name: couchbase-tzdhl Namespace: default Image(s): arungupta/couchbase Node: 10.245.1.4/10.245.1.4 Start Time: Fri, 26 Feb 2016 18:05:10 -0800 Labels: run=couchbase Status: Running Reason: Message: IP: 10.246.67.2 Replication Controllers: couchbase (1/1 replicas created) Containers: couchbase: Container ID: docker://56dddb66bf60a590e588b972d5cae997ec96149066a9fb8075548c982eb14961 Image: arungupta/couchbase Image ID: docker://080e2e96b3fc22964f3dec079713cdf314e15942d6eb135395134d629e965062 QoS Tier: cpu: Burstable Requests: cpu: 100m State: Running Started: Fri, 26 Feb 2016 18:05:56 -0800 Ready: True Restart Count: 0 Environment Variables: Conditions: Type Status Ready True Volumes: default-token-clfeb: Type: Secret (a secret that should populate this volume) SecretName: default-token-clfeb Events: FirstSeen LastSeen Count From SubobjectPath Reason Message ───────── ──────── ───── ──── ───────────── ────── ─────── 1m 1m 1 {scheduler } Scheduled Successfully assigned couchbase-tzdhl to 10.245.1.4 1m 1m 1 {kubelet 10.245.1.4} implicitly required container POD Pulling Pulling image "gcr.io/google_containers/pause:0.8.0" 59s 59s 1 {kubelet 10.245.1.4} implicitly required container POD Created Created with docker id 2dac5f81f4c2 59s 59s 1 {kubelet 10.245.1.4} spec.containers{couchbase} Pulling Pulling image "arungupta/couchbase" 59s 59s 1 {kubelet 10.245.1.4} implicitly required container POD Started Started with docker id 2dac5f81f4c2 59s 59s 1 {kubelet 10.245.1.4} implicitly required container POD Pulled Successfully pulled image "gcr.io/google_containers/pause:0.8.0" 19s 19s 1 {kubelet 10.245.1.4} spec.containers{couchbase} Pulled Successfully pulled image "arungupta/couchbase" 18s 18s 1 {kubelet 10.245.1.4} spec.containers{couchbase} Created Created with docker id 56dddb66bf60 18s 18s 1 {kubelet 10.245.1.4} spec.containers{couchbase} Started Started with docker id 56dddb66bf60 |
출력의 다섯 번째 줄에 노드의 IP가 10.245.1.4라고 나와 있습니다. 이것은 나중에 웹 콘솔에 액세스하는 데 사용됩니다. 이 출력의 마지막 줄은 이제 파드가 준비되었음을 보여줍니다. 파드의 상태를 다시 확인하면 다음과 같이 표시됩니다:
|
1 2 3 |
./kubernetes/cluster/kubectl.sh get po NAME READY STATUS RESTARTS AGE couchbase-tzdhl 1/1 Running 0 2m |
쿠버네티스 클러스터의 카우치베이스 웹 콘솔
이제 카우치베이스 컨테이너가 쿠버네티스 클러스터에서 실행 중이므로, 이제 쿠버네티스 클러스터에서 웹 콘솔. 각 파드에는 고유한 IP 주소가 할당되지만 이 주소는 클러스터 내에서만 액세스할 수 있습니다. 이 주소는 kubectl 노출 명령을 실행한다. 이 명령은 리플리케이션 컨트롤러, 서비스 또는 파드를 가져와서 새 쿠버네티스 서비스로 노출합니다. 이 명령어를 사용하면 됩니다:
|
1 2 |
./cluster/kubectl.sh expose rc couchbase --target-port=8091 --port=8091 --external-ip=10.245.1.4 service "couchbase" exposed |
이 명령에서
--대상-포트는 서비스가 트래픽을 전달해야 하는 컨테이너의 포트 이름 또는 번호입니다.--port는 서비스가 제공되어야 하는 포트입니다.--external-ip는 서비스에 설정할 외부 IP 주소입니다. 이 IP 주소는kubectl 설명 파드명령어를 사용하세요.
이제 https://10.245.1.4:8091 에서 Couchbase 웹 콘솔에 액세스할 수 있으며 다음과 같습니다:

비밀번호 자격 증명을 다음과 같이 입력합니다. 관리자/비밀번호.

짜잔!
다음 주소로 문의하세요. 스택오버플로우 또는 카우치베이스 포럼. 에서 팔로우할 수도 있습니다. @couchbasedev 그리고 @couchbase.