Статьи

Couchbase на Кубернетес

Этот блог возможен из-за этого твита!

Kubernetes — это система оркестрации с открытым исходным кодом от Google для контейнеров Docker. Он управляет контейнеризованными приложениями на нескольких хостах и ​​предоставляет базовые механизмы для развертывания, обслуживания и масштабирования приложений.

Это позволяет пользователю предоставлять декларативные примитивы для желаемого состояния, например «нужно 5 серверов Couchbase». Механизмы самовосстановления Kubernetes, такие как автоматический перезапуск, перепланирование и репликация контейнеров, затем обеспечивают выполнение этого состояния. Пользователь просто определяет состояние, а Kubernetes гарантирует, что это состояние всегда выполняется в кластере.

Ключевые понятия Kubernetes объясняет ключевые понятия Kubernetes.

Эта серия блогов, состоящая из нескольких частей, покажет, как запустить Couchbase на Kubernetes несколькими способами. Первая часть начинается с простой настройки с использованием Vagrant.

Начало работы с Kubernetes

Существует несколько способов запуска Kubernetes, но я нашел самый простой (не обязательно предсказуемый) способ запустить Vagrant .

  • Загрузите последнюю версию Kubernetes , 1.1.8 на момент написания этой статьи, и разверните архив.
  • Запустите кластер Kubernetes как:
    1
    2
    3
    4
    cd kubernetes
      
    export KUBERNETES_PROVIDER=vagrant
    ./cluster/kube-up.sh

    Это показывает вывод как:

    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
    kubernetes-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 и выглядеть следующим образом:

couchbase-kubernetes-консоль десантно-страница

Введите учетные данные пароля как Administrator / password . Эти учетные данные указываются при создании образа Docker по адресу github.com/arun-gupta/docker-images/blob/master/couchbase/configure-cluster.sh#L9 .

couchbase-веб-консоль-kubernetes-главная страница-1024x445

Вуаля!

Обсудите с нами на форумах StackOverflow или Couchbase . Вы также можете подписаться на нас по адресу @couchbasedev и @couchbase .

Ссылка: Couchbase на Kubernetes от нашего партнера JCG Аруна Гупты в Miles to go 2.0… блог.