Евгений Штольц - Облачная экосистема
- Название:Облачная экосистема
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:2021
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Евгений Штольц - Облачная экосистема краткое содержание
Облачная экосистема - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Существует нативное решение Docker-swarm. Из взрослых систем наибольшую популярность показали Kubernetes (Kubernetes) и Mesos, при этом первый представляет из себя универсальную и полностью готовую к работе систему, а второй – комплекс разнообразных проектов, объединённых в единый пакет и позволяющие заменить или изменять свои компоненты. Существует также огромное количество менее популярных решений, не продвигаемы такими гигантами, как Google, Twitter и другими: Nomad, Scheduling, Scalling, Upgrades, Service Descovery, но мы их рассматривать не будем. Здесь мы будем рассматривать наиболее готовое решение – Kubernetes, которое завоевало большую популярность за низкий порог вхождения, поддержки и достаточную гибкость в большинстве случае, вытеснив Mesos в нишу кастомизируемых решений, когда кастомизация и разработка экономически оправдана.
У Kubernetes есть несколько готовых конфигураций:
* MiniKube – кластер из одной локальной машины, предназначен для преодоления порога вхождения и экспериментов;
* kubeadm;
* kops;
* Kubernetes-Ansible;
* microKubernetes;
* OKD;
* MicroK8s.
Для самостоятельного запуска кластера можно воспользоваться
KubeSai – бесплатный Kubernetes
Наименьшая структурная единица называется 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 сети (создаётся и настраивается автоматически): Contig, Flannel, GCE networking, Linux bridging, Calico, 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: ....
А для добавления секрета в POD, нужно его указать в конфиге POD:
....
valumes:
secret:
secretName: test_secret
…
У Kubernetes больше разновидностей Volumes:
* 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
Docker – более современный аналог контейнеров RKT.
В Linux, когда завершается процесс с PID=1, то зарывается и NameSpace, что приводит к завершению работы ОС, в случае контейнера, аналогично, так как он является частным случаем ОС. Разграничение процессов сам по себе не даёт дополнительного оверхед, также как и мониторинг и ограничение ресурсов на процессы, ибо такие же возможности по настройки предоставляет systemd в хостовой ОС. Виртуализация сети происходит полностью: и localhost и мост, что позволяет создать мосты от нескольких контейнеров к одному localhost и тем самым сделать его единым для них, что активно используется в POD Kubernetes.
Запуск временного контейнера в интерактивном режиме -it. Для входа нужно нажать Ctrl+D, которое отравит сигнал на завершение работы, после чего он будет удалён –rm во избежание засорения системы остановленными современными контейнерами. Если образ создан таким образом, что в контейнере приложение запускается в оболочке, что неправильно, то сигнал буде отравлен приложению, а контейнер продолжит работать с оболочкой, в таком случае для выхода в отдельном терминале нужно будет его убить по его имени –name name_container. Например,:
Docker run –rm -it –name name_container ubuntu BASH
В начале CLI Docker имел простой набор команд, позволяющий управлять жизненным циклом контейнеров. Среди них:
* Docker run для запуска контейнера;
* Docker ps для просмотра запущенных контейнеров;
* Docker rm для удаления контейнера;
* Docker build для создания своего образа;
* Docker images для просмотра существующих контейнеров;
* Docker rmi для удаления образа.
Но с ростом популярности, команд становилось всё больше и их было решено сгруппировать в группы, так вместо простого "Docker run" появилась команда "Docker container", которая имеет 25 команд в 19 версии Docker. Это очистка, и остановка с восстановлением, и логи и различные виды подсоединений к контейнеру. Таже судьба постигла и работы с образами. Но, старые команды остались пока из-за совместимости и удобства, ведь в большинстве случаев требуется базовый набор. На нём и остановимся:
Запуск контейнера:
docker run -d –name name_container ubuntu bash
Удалить работающий контейнер:
docker rm -f name_container
Вывод всех контейнеров:
docker ps -a
Вывод работающих контейнеров:
docker ps
Вывод контейнеров с потребляемыми ресурсами:
docker stats
Вывод процессов в контейнере:
docker top {name_container}
Подключиться к контейнеру через оболочку sh (BASH в контейнерах alpine нет):
docker exec -it sh
Чистка системы от неиспользуемых образов:
docker image prune
Удалить весящие образа:
docker rmi $(docker images -f "dangling=true" -q)
Показать образа:
docker images
Создать образ в папке dir с Dockerfile:
docker build -t docker_user/name_image dir
Удалить образ:
docker rmi docker_user/name_image dir
Подключиться к Docker hub:
docker login
Отравить последнюю редакцию (тэг ставится и смещается автоматически, если не указан иной) образ на Docker hub:
docker push ocker_user/name_image dir:latest
Более широкий список в https://niqdev.github.io/devops/docker/.
Создание Docker Machine можно описать следующими этапами:
Создание виртуальной машины VirtualBox
docker-machine create name_virtual_system
Создание виртуальной машины generic
docker-machine create -d generic name_virtual_system
Список виртуальных машин:
docker-machine ls
Остановить виртуальную машину:
docker-machine stop name_virtual_system
Запустить остановленную виртуальную машину:
docker-machine start name_virtual_system
Удалить виртуальную машину:
docker-machine rm name_virtual_system
Подключиться к виртуальной машине:
eval "$(docker-machine env name_virtual_system)"
Отключить Docker от виртуальной машины:
eval $(docker-machine env -u)
Зайти по SSH:
docker-machine ssh name_virtual_system
Выйти из виртуальной машины:
exit
Запуcк команды sleep 10 в виртуальной машине:
docker-machine ssh name_virtual_system 'sleep 10'
Запуск команд в среде BASH:
docker-machine ssh dev 'bash -c "sleep 10 && echo 1"'
Скопировать папку dir в вируальную машину:
docker-machine scp -r /dir name_virtual_system:/dir
Читать дальшеИнтервал:
Закладка: