Ключевой особенностью Kubernetes является его способность поддерживать «желаемое состояние» с помощью объявленных примитивов. Контроллеры репликации — это ключевая концепция, которая помогает достичь этого состояния.
Контроллер репликации обеспечивает одновременное выполнение заданного количества «реплик» модуля. Если их будет слишком много, это убьет некоторых. Если их будет слишком мало, начнется больше.
Давайте посмотрим, как раскрутить контроллер репликации с двумя репликами модуля. Затем мы убьем один модуль и посмотрим, как Kubernetes автоматически запустит другой модуль.
Начать Kubernetes Cluster
- Самый простой способ запустить кластер Kubernetes в Mac OS — это использовать Vagrant :
export KUBERNETES_PROVIDER=vagrant curl -sS https://get.k8s.io | bash
- Кроме того, Kubernetes можно загрузить с github.com/GoogleCloudPlatform/kubernetes/releases/download/v1.0.0/kubernetes.tar.gz , а кластер можно запустить как:
cd kubernetes export KUBERNETES_PROVIDER=vagrant cluster/kube-up.sh
Запустите и проверьте контроллер репликации и модули
- Все файлы конфигурации, необходимые Kubernetes для запуска контроллера репликации, находятся в проекте kubernetes-java-sample . Клонировать рабочее пространство:
git clone https://github.com/arun-gupta/kubernetes-java-sample.git
- Запустите контроллер репликации, который имеет две реплики модуля, каждая с контейнером WildFly:
./cluster/kubectl.sh create -f ~/workspaces/kubernetes-java-sample/wildfly-rc.yaml replicationcontrollers/wildfly-rc
Используемый файл конфигурации показан:
apiVersion: 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 по умолчанию .
- Получить статус стручков:
./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
обновляет статус всякий раз, когда происходит изменение. Статус изменится с «Ожидание» на «Выполнение», а затем «Готов к приему запросов». - Получить статус контроллера репликации:
./cluster/kubectl.sh get rc CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS wildfly-rc wildfly-rc-pod jboss/wildfly name=wildfly 2
Если запущено несколько контроллеров репликации, вы можете запросить этот конкретный контроллер, используя метку:
./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
- Получить имя запущенных модулей:
./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-адрес каждого модуля (используя имя):
./cluster/kubectl.sh get -o template po wildfly-rc-15xg5 --template={{.status.podIP}} 10.246.1.18
И другого стручка:
./cluster/kubectl.sh get -o template po wildfly-rc-d5fbs --template={{.status.podIP}} 10.246.1.19
- IP-адрес модуля доступен только внутри кластера. Войдите в миньон, чтобы получить доступ к главной странице WildFly, размещенной в контейнерах:
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>
Автоматический перезапуск стручков
Давайте удалим модуль и посмотрим, как автоматически создается новый модуль.
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
.
Наконец, удалите контроллер репликации:
kubectl.sh create -f ~/workspaces/kubernetes-java-sample/wildfly-rc.yaml
Последние файлы конфигурации и подробные инструкции находятся по адресу kubernetes-java-sample .
В реальном мире вы, как правило, оборачиваете этот контроллер репликации в службу и интерфейс с балансировщиком нагрузки. Но это тема для другого блога!