Статьи

Kubernetes Design Patterns

14 000 коммитов и 400 участников (включая один крошечный коммит от меня !) — вот что собирает Kubernetes 1.0. Теперь доступно !

В этом блоге обсуждаются некоторые шаблоны проектирования Kubernetes. Весь исходный код для шаблонов проектирования, обсуждаемых ниже, доступен по адресу kubernetes-java-sample .

Ключевые понятия Кубернетеса

На очень высоком уровне есть три ключевых понятия:

  • Модули — это наименьшие развертываемые модули, которые можно создавать, планировать и управлять. Это логическая коллекция контейнеров, которые принадлежат приложению.
  • Мастер — это центральная контрольная точка, которая обеспечивает единое представление кластера. Существует один главный узел, который контролирует несколько миньонов.
  • Узел — это рабочий узел, который выполняет задачи, делегированные мастером. Миньоны могут управлять одним или несколькими стручками. Он предоставляет «виртуальный хост» для конкретного приложения в контейнерной среде.

kubernetes-ключ-концепция

Некоторые другие понятия, о которых нужно знать:

  • Replication Controller — это ресурс в Master, который гарантирует, что запрошенное количество модулей работает на узлах постоянно.
  • Служба — это объект на главном сервере, который обеспечивает балансировку нагрузки для реплицированной группы модулей.
  • Метка — это произвольная пара ключ / значение в распределенном наблюдаемом хранилище, которое контроллер репликации использует для обнаружения службы.

Начать Kubernetes Cluster

  1. Самый простой способ запустить кластер Kubernetes в Mac OS — это использовать Vagrant :
    1
    2
    export KUBERNETES_PROVIDER=vagrant
    curl -sS https://get.k8s.io | bash
  2. Кроме того, Kubernetes можно загрузить с github.com/GoogleCloudPlatform/kubernetes/releases/download/v1.0.0/kubernetes.tar.gz , а кластер можно запустить как:
    1
    2
    3
    cd kubernetes
    export KUBERNETES_PROVIDER=vagrant
    cluster/kube-up.sh

kubernetes-кластер-бродяга

Стручок с одним контейнером

В этом разделе объясняется, как запустить Pod с одним контейнером. В качестве контейнера будет использоваться базовое изображение Docker WildFly.

kubernetes-один стручок

Pod, Replication Controller, Service и т. Д. — все это ресурсы в Kubernetes. Они могут быть созданы с помощью kubectl с помощью файла конфигурации.

Файл конфигурации в этом случае:

01
02
03
04
05
06
07
08
09
10
11
12
apiVersion: v1
kind: Pod
metadata:
  name: wildfly-pod
  labels:
    name: wildfly
spec:
  containers:
    - image: jboss/wildfly
      name: wildfly-pod
      ports:
        - containerPort: 8080

Полная информация о том, как создать Pod, объясняется на github.com/arun-gupta/kubernetes-java-sample#a-pod-with-one-container.

Приложение Java EE, развернутое в модуле с одним контейнером

В этом разделе будет показано, как развернуть приложение Java EE в модуле с одним контейнером. WildFly с базой данных H2 в памяти будет использоваться в качестве контейнера.

javaee7-хол

Файл конфигурации:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: v1
kind: ReplicationController
metadata:
  name: javaee7-hol
  labels:
    name: javaee7-hol
spec:
  replicas: 1
  selector:
    name: javaee7-hol
  template:
    metadata:
      labels:
        name: javaee7-hol
    spec:
      containers:
      - name: master
        image: arungupta/javaee7-hol
        ports:
        - containerPort: 8080
          hostPort: 8080

Полная информация на github.com/arun-gupta/kubernetes-java-sample#java-ee-application-deployed-in-a-pod-with-one-container-wildfly–h2-in-memory-database .

Контроллер репликации с двумя репликами модуля

В этом разделе объясняется, как запустить контроллер репликации с двумя репликами модуля. Каждый Pod будет иметь один контейнер WildFly.

kubernetes-гс

Файл конфигурации:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
apiVersion: v1
kind: ReplicationController
metadata:
  name: wildfly-rc
  labels:
    name: wildfly
    context: docker-k8s-lab
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: wildfly
    spec:
      containers:
      - name: wildfly-rc-pod
        image: arungupta/wildfly-mysql-javaee7:k8s
        ports:
        - containerPort: 8080

Полная информация на github.com/arun-gupta/kubernetes-java-sample#a-replication-controller-with-two-replicas-of-a-pod-wildfly

Перепланирование стручков

Контроллер репликации обеспечивает одновременное выполнение указанного количества «реплик» модуля. Если их слишком много, контроллер репликации убивает несколько модулей. Если их слишком мало, начинается больше.

kubernetes-стручка-перепланирования

Полная информация на github.com/arun-gupta/kubernetes-java-sample#rescheduling-pods .

Масштабирующие стручки

Контроллер репликации позволяет динамически масштабировать модули вверх и вниз.

kubernetes масштабирование стручки

Полная информация на github.com/arun-gupta/kubernetes-java-sample#scaling-pods .

Кубернетес Сервис

Стручки эфемерны. На IP-адрес, назначенный модулю, нельзя положиться. Kubernetes, в частности, Replication Controller, динамически создает и уничтожает блоки. Модуль потребителя не может полагаться на IP-адрес модуля производителя .

Kubernetes Service — это абстракция, которая определяет набор логических модулей. Набор модулей, на которые ориентирована служба, определяется метками, связанными с модулями.

В этом разделе будет показано, как запускать контейнеры WildFly и MySQL в отдельных модулях. WildFly Pod будет общаться с MySQL Pod с помощью Сервиса.

kubernetes-служба

Полная информация на github.com/arun-gupta/kubernetes-java-sample#kubernetes-service .

Вот пара блогов, которые помогут вам начать:

Полный набор записей блога Kubernetes предоставляет более подробную информацию.

Наслаждайтесь!

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