Предпосылки
Первое, что вам понадобится, это доступ к кластеру Kubernetes. Вы можете создать его с помощью Minikube или использовать Docker для Windows или Docker для Mac, оба из которых теперь поставляются с одноузловым дистрибутивом Kubernetes, который вы можете включить в настройках Docker.
Вам также необходимо иметь некоторые априорные знания о Kubernetes. Вот действительно хорошая отправная точка.
Создание подов
Обычно мы создаем поды, используя файл yaml, в котором указывается, какой образ контейнера использовать, какие порты открывать и т. Д. Вот простой файл для создания пода nginx.
apiVersion: v1вид: Стручок
метаданные:
имя: nginx-1
метка:
приложение: веб-сервер
спецификация:
контейнеры:
- имя: nginx
изображение: nginx: 1.7.9
порты:
- containerPort: 80
Сохраните его под именем nginx-pod.ямл в каталоге, а затем из этого же каталога выполните команду:
$ kubectl create -f ./ nginx-pod.ямл## Убедитесь, что модуль создан, запустив:
$ kubectl получить поды
Вы заметите, что один модуль с именем «Nginx-1» запущен и работает. Но вы не можете масштабировать эту единственную капсулу. Бег kubectl создать снова выдаст вам ошибку, так как имя nginx-1 не может быть повторно использован снова.
Kubernetes дал возможность создавать поды для более высоких абстракций, таких как Развертывания и ReplicaSets. Которые создают модули из заданного шаблона модуля, указывая, какие изображения использовать, какие порты открывать в каждом из новых модулей и т. Д., Но ничего особенного в одном модуле. ReplicaSet (а также Deployments) затем приступает к созданию новых модулей, давая каждому новому модулю уникальное имя, а также неуникальную метку, которая помогает ReplicaSet отслеживать модули, созданные на основе данного шаблона.
ReplicaSet гарантирует, что в любой момент времени определенное количество модулей данной метки всегда работает и работает. Если, например, какой-то узел выходит из строя, ReplicaSet должен создать дополнительные поды на других узлах, чтобы компенсировать потерю. Чтобы написать yaml-файл репликации, мы будем следовать шаблону, аналогичному написанию пода. У него будет версия api (приложения / v1), тип (ReplicaSet) и имя в метаданных. На самом наборе реплик могут быть ярлыки, но мы пока будем простыми и просто дадим ему уникальное имя мой набор реплик.
Затем нам нужно перейти от метаданные раздел к мясу материи спецификация. Здесь мы указываем количество репликаций, которое мы хотим, в разделе реплики. Затем мы даем этому ReplicaSet a селектор который будет использоваться для сопоставления метки, скажем, приложение к значению, скажем, веб сервер, среди работающих в настоящее время подов. Если таких подов меньше, то он создаст поды в соответствии с заданным шаблоном и добавит ту же метку к этим новым подам. Если контейнеров больше, чем требуется, он удаляет несколько.
Указание шаблона, который будет служить основой для создания новых модулей, является наиболее сложным шагом. У этого шаблона не будет имени, поскольку набор реплик будет создавать новое имя для каждого нового созданного модуля. Однако у них будут ярлыки, и вы можете заметить, что тот же ярлык приложение = веб-сервер который есть в шаблоне, выбирается через селектор параметр в спецификации набора реплик.
apiVersion: apps / v1вид: ReplicaSet
метаданные:
имя: my-replicaset
спецификация:
реплик: 3
селектор:
matchLabels:
приложение: веб-сервер
шаблон:
метаданные:
ярлыки:
приложение: веб-сервер
спецификация:
контейнеры:
- имя: nginx
изображение: nginx: 1.7.9
порты:
- containerPort: 80
Сохраните этот файл как nginx-replicaset.yaml и создайте набор реплик с помощью команды:
$ kubectl create -f nginx-replicaset.ямлПоскольку ранее мы создали пакет с таким же ярлыком приложение = веб-сервер, набор реплик просто создаст еще два модуля. Вы можете перечислить все поды, используя команду:
$ kubectl получить подыНАЗВАНИЕ ГОТОВ СОСТОЯНИЕ ВОЗРАСТ
my-replicaset-nmvt9 1/1 Выполняется 0 9 с
my-replicaset-xf9mx 1/1 Выполняется 0 9 с
nginx-1 1/1 Работает 0 28 с
Каждому из модулей будет присвоено уникальное имя. Как и у самого первого модуля, который мы создали, было имя nginx-1. Вы можете попробовать удалить его с помощью команды:
$ kubectl удалить pod nginx-1$ kubectl получить поды
НАЗВАНИЕ ГОТОВ СОСТОЯНИЕ ВОЗРАСТ НАЗАД
my-replicaset-nmvt9 1/1 Бег 0 1 мес
my-replicaset-pkn4q 1/1 Выполняется 0 22 с
my-replicaset-xf9mx 1/1 Бег 0 1 мес
Вы заметите, что почти мгновенно контроллер ReplicaSet создал новый под, чтобы заменить тот, который мы удалили. Таким образом, убедившись, что количество работающих модулей с этикеткой приложение = веб-сервер всегда равно 3, как указано в манифесте набора реплик, приведенном выше.
Вы получаете большой контроль благодаря ярлыкам и селекторам. Вы можете дополнительно распределить поды по нескольким узлам с помощью nodeSelectors, которые используются для выделения определенного количества подов на определенных узлах.
Что не допускает наборов реплик, так это обновления. Если более новая версия вашего приложения, скажем, nginx: 1.8, вам нужно будет удалить этот набор реплик и создать новый с этим изображением, указанным в манифесте yaml набора реплик. Вот где пригодится концепция развертывания. Он включает в себя идею наборов реплик и расширяется за счет предоставления дополнительной поддержки для обновления ваших приложений. Теперь, когда вы освоились с наборами реплик, неплохо было бы изучить развертывания Kubernetes.
Рекомендации
- Создание подов
- Создание наборов реплик