Docker в масштабах компании
Давайте посмотрим в масштабах компании: у нас есть контейнера и есть сервера. Не важно, это две виртуалки и несколько контейнеров или это сотни серверов и тысячи контейнеров, проблема в том, чтобы распределить контейнера на серверах нужен системный администратор и время, если мало времени и много контейнеров, нужно много системных администраторов, иначе они будут неоптимальное распределены, то есть сервер (виртуальная машина) работает, но не в полную силу и ресурсы продают. В этой ситуации для оптимизации распределения и экономии человеческих ресурсов предназначены системы оркестрации контейнеров.
Рассмотрим эволюцию:
* Разработчик создаёт необходимые контейнера руками.
* Разработчик создаёт необходимые контейнера используя для этого заранее подготовленные скрипты.
* Системный администратор, с помощью какой-либо системы управления конфигурации и развёртывания, таких как Chef,
Pupel, Ansible, Salt, задаёт топологию системы. В топологии указывается какой контейнер в на каком месте
располагается.
* Оркестрация (планировщики) – полуавтоматическое распределение, поддержание состояния и реакция на изменение
системы. Например: Google Kubernetes, Apache Mesos, Hashicorp Nomad, Docker Swarm mode и YARN, который мы
рассмотрим. Также появляются новые: Flocker (https://github.com/ClusterHQ/Flocker/),
Helios (https://github.com/spotify/helios/)
Существует нативное решение docker-swarm. Из взрослых систем наибольшую популярность показали Kubernetes (Kubernetes) и Mesos, при этом первый представляет из себя универсальную и полностью готовую к работе систему, а второй – комплекс разнообразных проектов, объединённых в единый пакет и позволяющие заменить или изменять свои компоненты. Cуществует, также, огромное количество менее популярных решений, не продвигаемы такими гигантами, как Google, Twitter и другими: Nomad, Scheduling, Scalling, Upgrades, Service Descovery, но мы их рассматривать не будем. Здесь мы будем рассматривать наиболее готовое решение – Kuberntes, которое завоевало большую популярность за низкий порог вхождения, поддержки и достаточную гибкость в большинстве случае, вытеснив Mesos в нишу кастомизуруемых решений, когда кастомизация и разработка экономически оправдана.
У Kubernetes есть несколько готовых конфигураций:
* MiniKube – кластер из одной локальной машины, предназначен для преодоления порога вхождения и экспериментов
* kubeadm
* kops
* kubernetes-ansible
* microKubernetes
Мониторинг – Heapster
Наименьшая структурная единица называется Pod, которая соответствует yml-файлу в docker-compose. Процесс создания Pod, как и других сущностей производится декларативно: через написание или изменение конфигурационного yml-файла и применение его к кластеру. И так, создадим Pod:
# test_pod.yml
# kybectl create – f test_pod.yaml
containers:
– name: test
image: debian
Для запуска нескольких реплик:
# test_replica_controller.yml
# kybectl create – f test_replica_controller.yml
apiVersion: v1
kind: ReplicationController
metadata:
name: Nginx
spec:
replicas: 3
selector:
app: Nginx // метка, по которой реплика определяет наличие запущенных контейнеров
template:
containers:
– name: test
image: debian
Для балансировки используется разновидность service (логическая сущность) – LoadBalancer, кроме которого существует ещё ClasterIP и Node Port:
appVersion: v1
kind: Service
metadata:
name: test_service
apec:
type: LoadBalanser
ports:
– port: 80
– targetPort: 80
– protocol: TCP
– name: http
selector:
app: Web
Плагины overlay сети (создаётся и настраивается автоматически): Contiv, Flannel, GCE networking, Linux bridging, Callico, Kube-DNS, SkyDNS. #configmap apiVersion: v1 kind: ConfigMap metadata: name: config_name data:
Аналогично секретам в docker-swarm существует секрет и для Kubernetes, примером которых могут быть настройки Nginx:
#secrets
apiVersion: v1
kind: Secrets
metadata: name: test_secret
data:
password:….
А для добавления секрета в под, нужно его указать в конфиге пода:
….
valumes:
secret:
secretName: test_secret
…
У Kubernetes больше разновидностей Valumes:
* emptyDir
* hostPatch
* gcePersistentDisc – диск на Google Cloud
* awsElasticBlockStore – диск на Amazon AWS
volumeMounts:
– name: app
nountPath: ""
volumes:
– name: app
hostPatch:
….
Особенностью буде UI: Dashbord UI
Дополнительно имеется:
* Main metrics – сбор метрик
* Logs collect – сбор логов
* Scheduled jobs
* Autentification
* Federation – распределение по дата-центрам
* Helm – пакетный менеджер, аналог Docker Hub
https://www.youtube.com/watch?v=FvlwBWvI-Zg
Альтернативы Docker
* Rocket или rkt – контейнеры для операционной среды CoreOS от RedHut, специально созданной на использование
контейнеров.
* Hyper-V – среда для запуска Docker в операционной системе Windows, представляющая из себя обертку (легковесную
виртуальную машину) контейнера.
Читать дальше