Этот блог возможен из-за этого твита!
Kubernetes — это система оркестрации с открытым исходным кодом от Google для контейнеров Docker. Он управляет контейнеризованными приложениями на нескольких хостах и предоставляет базовые механизмы для развертывания, обслуживания и масштабирования приложений.
Это позволяет пользователю предоставлять декларативные примитивы для желаемого состояния, например «нужно 5 серверов Couchbase». Механизмы самовосстановления Kubernetes, такие как автоматический перезапуск, перепланирование и репликация контейнеров, затем обеспечивают выполнение этого состояния. Пользователь просто определяет состояние, а Kubernetes гарантирует, что это состояние всегда выполняется в кластере.
Ключевые понятия Kubernetes объясняет ключевые понятия Kubernetes.
Эта серия блогов, состоящая из нескольких частей, покажет, как запустить Couchbase на Kubernetes несколькими способами. Первая часть начинается с простой настройки с использованием Vagrant.
Начало работы с Kubernetes
Существует несколько способов запуска Kubernetes, но я нашел самый простой (не обязательно предсказуемый) способ запустить Vagrant .
- Загрузите последнюю версию Kubernetes , 1.1.8 на момент написания этой статьи, и разверните архив.
- Запустите кластер Kubernetes как:
1234
cd
kubernetes
export
KUBERNETES_PROVIDER=vagrant
.
/cluster/kube-up
.sh
Это показывает вывод как:
01020304050607080910111213141516171819202122232425kubernetes-1.1.8 > .
/kubernetes/cluster/kube-up
.sh
... Starting cluster using provider: vagrant
... calling verify-prereqs
... calling kube-up
Bringing 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 ERROR
controller-manager Healthy ok nil
scheduler Healthy ok nil
etcd-0 Healthy {
"health"
:
"true"
} nil
etcd-1 Healthy {
"health"
:
"true"
} nil
Cluster validation succeeded
Done, listing cluster services:
Kubernetes master is running at https:
//10
.245.1.2
Heapster is running at https:
//10
.245.1.2
/api/v1/proxy/namespaces/kube-system/services/heapster
KubeDNS is running at https:
//10
.245.1.2
/api/v1/proxy/namespaces/kube-system/services/kube-dns
KubeUI is running at https:
//10
.245.1.2
/api/v1/proxy/namespaces/kube-system/services/kube-ui
Grafana is running at https:
//10
.245.1.2
/api/v1/proxy/namespaces/kube-system/services/monitoring-grafana
InfluxDB is running at https:
//10
.245.1.2
/api/v1/proxy/namespaces/kube-system/services/monitoring-influxdb
Запустите Couchbase на кластере Kubernetes
Самый простой способ запустить контейнер Docker в Kubernetes — использовать команду kubectl run
.
Использование команды:
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 |
Контейнер Docker Couchbase объясняет другой контейнер Docker для Couchbase. Для этого блога мы будем использовать arungupta/couchbase
как он предварительно настроен.
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 |
Давайте проверим состояние модуля:
01
02
03
04
05
06
07
08
09
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 |
Веб-консоль Couchbase в кластере Kubernetes
Теперь, когда ваш контейнер Couchbase работает в кластере Kubernetes, вы можете просмотреть веб-консоль .
Каждому модулю назначается уникальный IP-адрес, но этот адрес доступен только внутри кластера. Он может быть выставлен с помощью команды kubectl expose
.
Эта команда берет контроллер репликации, службу или модуль и представляет его как новую службу Kubernetes. Это можно сделать, дав команду:
1
2
|
. /cluster/kubectl .sh expose rc couchbase --target-port=8091 --port=8091 --external-ip=10.245.1.4 service "couchbase" exposed |
В этой команде:
-
--target-port
— это имя или номер порта в контейнере, на который служба должна направлять трафик -
--port
— это порт, на котором должна обслуживаться служба -
--external-ip
— это внешний IP-адрес, который нужно установить для службы. Обратите внимание, что этот IP-адрес был получен сkubectl describe pod
командыkubectl describe pod
ранее.
Теперь вы можете получить доступ к веб-консоли Couchbase по адресу http://10.245.1.4:8091 и выглядеть следующим образом:
Введите учетные данные пароля как Administrator
/ password
. Эти учетные данные указываются при создании образа Docker по адресу github.com/arun-gupta/docker-images/blob/master/couchbase/configure-cluster.sh#L9 .
Вуаля!
Обсудите с нами на форумах StackOverflow или Couchbase . Вы также можете подписаться на нас по адресу @couchbasedev и @couchbase .
Ссылка: | Couchbase на Kubernetes от нашего партнера JCG Аруна Гупты в Miles to go 2.0… блог. |