Ключевой особенностью Kubernetes является его способность поддерживать «желаемое состояние» с помощью объявленных примитивов. Контроллеры репликации — это ключевая концепция, которая помогает достичь этого состояния.
Контроллер репликации обеспечивает одновременное выполнение заданного количества «реплик» модуля. Если их будет слишком много, это убьет некоторых. Если их будет слишком мало, начнется больше.
Давайте посмотрим, как раскрутить контроллер репликации с двумя репликами модуля. Затем мы убьем один модуль и посмотрим, как Kubernetes автоматически запустит другой модуль.
Начать Kubernetes Cluster
- Самый простой способ запустить кластер Kubernetes в Mac OS — это использовать Vagrant :
12
exportKUBERNETES_PROVIDER=vagrantcurl -sS https://get.k8s.io |bash - Кроме того, Kubernetes можно загрузить с github.com/GoogleCloudPlatform/kubernetes/releases/download/v1.0.0/kubernetes.tar.gz , а кластер можно запустить как:
123
cdkubernetesexportKUBERNETES_PROVIDER=vagrantcluster/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.yamlreplicationcontrollers/wildfly-rcИспользуемый файл конфигурации показан:
010203040506070809101112131415161718apiVersion: v1kind: ReplicationControllermetadata:name: wildfly-rclabels:name: wildflyspec:replicas: 2template:metadata:labels:name: wildflyspec:containers:- name: wildfly-rc-podimage: jboss/wildflyports:- containerPort: 8080Здесь используется изображение WildFly Docker по умолчанию.
- Получить статус стручков:
0102030405060708091011
./cluster/kubectl.sh get -w poNAME READY STATUS RESTARTS AGEwildfly-rc-15xg5 0/1Pending 0 2swildfly-rc-d5fbs 0/1Pending 0 2sNAME READY STATUS RESTARTS AGEwildfly-rc-15xg5 0/1Pending 0 5swildfly-rc-d5fbs 0/1Pending 0 5swildfly-rc-d5fbs 0/1Running 0 8swildfly-rc-15xg5 0/1Running 0 8swildfly-rc-d5fbs 1/1Running 0 15swildfly-rc-15xg5 1/1Running 0 15sОбратите внимание:
-wобновляет статус всякий раз, когда происходит изменение. Статус изменится с «Ожидание» на «Выполнено» и затем «Готов к приему запросов» - Получить статус контроллера репликации:
123
./cluster/kubectl.sh get rcCONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICASwildfly-rc wildfly-rc-pod jboss/wildflyname=wildfly 2Если запущено несколько контроллеров репликации, вы можете запросить этот конкретный контроллер, используя метку:
123./cluster/kubectl.sh get rc -l name=wildflyCONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICASwildfly-rc wildfly-rc-pod jboss/wildflyname=wildfly 2 - Получить имя запущенных модулей:
1234
./cluster/kubectl.sh get poNAME READY STATUS RESTARTS AGEwildfly-rc-15xg5 1/1Running 0 36mwildfly-rc-d5fbs 1/1Running 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> vagrantsshminion-1Last 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-15xg5pods/wildfly-rc-15xg5kubernetes> ./cluster/kubectl.sh get -w poNAME READY STATUS RESTARTS AGEwildfly-rc-0xoms 0/1 Pending 0 2swildfly-rc-d5fbs 1/1 Running 0 48mNAME READY STATUS RESTARTS AGEwildfly-rc-0xoms 0/1 Pending 0 11swildfly-rc-0xoms 0/1 Running 0 13swildfly-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… . |