Ключевой особенностью Kubernetes является его способность поддерживать «желаемое состояние» с помощью объявленных примитивов. Контроллеры репликации — это ключевая концепция, которая помогает достичь этого состояния.
Контроллер репликации обеспечивает одновременное выполнение заданного количества «реплик» модуля. Если их будет слишком много, это убьет некоторых. Если их будет слишком мало, начнется больше.
Давайте посмотрим, как раскрутить контроллер репликации с двумя репликами модуля. Затем мы убьем один модуль и посмотрим, как Kubernetes автоматически запустит другой модуль.
Начать Kubernetes Cluster
- Самый простой способ запустить кластер Kubernetes в Mac OS — это использовать Vagrant :
12
export
KUBERNETES_PROVIDER=vagrant
curl -sS https:
//get
.k8s.io |
bash
- Кроме того, Kubernetes можно загрузить с github.com/GoogleCloudPlatform/kubernetes/releases/download/v1.0.0/kubernetes.tar.gz , а кластер можно запустить как:
123
cd
kubernetes
export
KUBERNETES_PROVIDER=vagrant
cluster
/kube-up
.sh
Запустите и проверьте контроллер репликации и модули
- Все файлы конфигурации, необходимые Kubernetes для запуска контроллера репликации, находятся в проекте kubernetes-java-sample . Клонировать рабочее пространство:
1
git clone https:
//github
.com
/arun-gupta/kubernetes-java-sample
.git
- Запустите контроллер репликации, который имеет две реплики модуля, каждая с контейнером WildFly:
12
.
/cluster/kubectl
.sh create -f ~
/workspaces/kubernetes-java-sample/wildfly-rc
.yaml
replicationcontrollers
/wildfly-rc
Используемый файл конфигурации показан:
010203040506070809101112131415161718apiVersion: v1
kind: ReplicationController
metadata:
name: wildfly-rc
labels:
name: wildfly
spec:
replicas: 2
template:
metadata:
labels:
name: wildfly
spec:
containers:
- name: wildfly-rc-pod
image: jboss
/wildfly
ports:
- containerPort: 8080
Здесь используется изображение WildFly Docker по умолчанию.
- Получить статус стручков:
0102030405060708091011
.
/cluster/kubectl
.sh get -w po
NAME READY STATUS RESTARTS AGE
wildfly-rc-15xg5 0
/1
Pending 0 2s
wildfly-rc-d5fbs 0
/1
Pending 0 2s
NAME READY STATUS RESTARTS AGE
wildfly-rc-15xg5 0
/1
Pending 0 5s
wildfly-rc-d5fbs 0
/1
Pending 0 5s
wildfly-rc-d5fbs 0
/1
Running 0 8s
wildfly-rc-15xg5 0
/1
Running 0 8s
wildfly-rc-d5fbs 1
/1
Running 0 15s
wildfly-rc-15xg5 1
/1
Running 0 15s
Обратите внимание:
-w
обновляет статус всякий раз, когда происходит изменение. Статус изменится с «Ожидание» на «Выполнено» и затем «Готов к приему запросов» - Получить статус контроллера репликации:
123
.
/cluster/kubectl
.sh get rc
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
wildfly-rc wildfly-rc-pod jboss
/wildfly
name=wildfly 2
Если запущено несколько контроллеров репликации, вы можете запросить этот конкретный контроллер, используя метку:
123.
/cluster/kubectl
.sh get rc -l name=wildfly
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
wildfly-rc wildfly-rc-pod jboss
/wildfly
name=wildfly 2
- Получить имя запущенных модулей:
1234
.
/cluster/kubectl
.sh get po
NAME READY STATUS RESTARTS AGE
wildfly-rc-15xg5 1
/1
Running 0 36m
wildfly-rc-d5fbs 1
/1
Running 0 36m
- Найти IP-адрес каждого модуля (используя имя):
12
.
/cluster/kubectl
.sh get -o template po wildfly-rc-15xg5 --template={{.status.podIP}}
10.246.1.18
И другого стручка:
12.
/cluster/kubectl
.sh get -o template po wildfly-rc-d5fbs --template={{.status.podIP}}
10.246.1.19
- IP-адрес модуля доступен только внутри кластера. Войдите в систему minion для доступа к главной странице WildFly, размещенной в контейнерах:
010203040506070809101112131415161718192021
kubernetes> vagrant
ssh
minion-1
Last login: Tue Jul 14 21:35:12 2015 from 10.0.2.2
[vagrant@kubernetes-minion-1 ~]$ curl http:
//10
.246.1.18:8080
<!--
~ JBoss, Home of Professional Open Source.
. . .
<
/div
>
<
/body
>
<
/html
>
[vagrant@kubernetes-minion-1 ~]$ curl http:
//10
.246.1.19:8080
<!--
~ JBoss, Home of Professional Open Source.
~ Copyright (c) 2014, Red Hat, Inc., and individual contributors
. . .
<
/div
>
<
/body
>
<
/html
>
Автоматический перезапуск стручков
Давайте удалим модуль и посмотрим, как автоматически создается новый модуль.
01
02
03
04
05
06
07
08
09
10
|
kubernetes> . /cluster/kubectl .sh delete po wildfly-rc-15xg5 pods /wildfly-rc-15xg5 kubernetes> . /cluster/kubectl .sh get -w po NAME READY STATUS RESTARTS AGE wildfly-rc-0xoms 0 /1 Pending 0 2s wildfly-rc-d5fbs 1 /1 Running 0 48m NAME READY STATUS RESTARTS AGE wildfly-rc-0xoms 0 /1 Pending 0 11s wildfly-rc-0xoms 0 /1 Running 0 13s wildfly-rc-0xoms 1 /1 Running 0 21s |
Обратите внимание, как стручок с именем wildfly-rc-15xg5
был удален, и был создан новый стручок с именем wildfly-rc-0xoms
.
Наконец, удалите контроллер репликации:
1
|
kubectl.sh create -f ~ /workspaces/kubernetes-java-sample/wildfly-rc .yaml |
Последние файлы конфигурации и подробные инструкции находятся по адресу kubernetes-java-sample .
В реальном мире вы обычно оборачиваете этот контроллер репликации в службу и интерфейс с помощью балансировщика нагрузки. Но это тема для другого блога!
Наслаждайтесь!
Ссылка: | Автоматический перезапуск модулей в контроллере репликации кластера Kubernetes от нашего партнера по JCG Аруна Гупта из блога Miles to go 2.0… . |