SlideShare une entreprise Scribd logo
1  sur  59
Télécharger pour lire hors ligne
Kubernetes 101
Production-Grade Container Orchestration
whoami
• Виталий Фокин

• Python-, Java-, Javascript-, Whatever-developer

• 8 лет коммерческого продакшена

• https://www.linkedin.com/in/vitalifokin/

• https://www.facebook.com/quozd
Но сначала..
• Kubernetes и оркестрация приложений - очень сложная и большая
тема, поэтому смотреть будем свысока и опустим некоторые детали

• Смотрим со стороны разработчика приложений, администрирование
Kubernetes - отдельная вселенная со своей магией

• Все примеры для Kubernetes 1.8
Кто такой этот ваш Kubernetes
и зачем он мне нужен?
Open-source system for automating deployment, scaling, and
management of containerized applications
Контейнеризация
• Виртуализация на уровне операционной системы — метод
виртуализации, при котором ядро операционной системы
поддерживает несколько изолированных экземпляров пространства
пользователя, вместо одного. Эти экземпляры (часто называемые
контейнерами или зонами) с точки зрения пользователя полностью
идентичны реальному серверу. Ядро обеспечивает полную
изолированность контейнеров, поэтому программы из разных
контейнеров не могут воздействовать друг на друга. (Педивикия)
И зачем это всё?
• Меньше overhead по сравнению с виртуальными машинами

• Не требует поддержки железа

• Все еще хорошая изоляция

• Проще в использовании

• НО меньше возможностей (shared ядро, нельзя запустить другую ОС
и т.д.)

• LXC, FreeBSD Jails, Docker, rkt, etc..
Docker
• Система userspace контейнеризации

• Преимущественно для Linux

• Использует LXC linux namespaces и
cgroups

• Позволяет «упаковать» приложение со
всем его окружением и зависимостями в
контейнер
• Воспроизводимость: больше нет "Работает на моем компе"

• Атомарность: все зависимости носим с собой и не зависим от хоста

• Легковестность: масштабирование и восстановление после сбоя в 1
клик

• Изолированность: контейнеры не влияют друг на друга и на хост (не
совсем)

• Управление ресурсами хоста
С чего все началось?
История первая, короткая
Представим, что вы таки подцепили болезнь под названием Docker
BigDataApp
BigDataApp Frontend
BigDataApp Backend
BigDataApp Frontend
BigDataApp Backend
BigDataApp DB
BigDataApp DB
Frontend Frontend
BackendBackendBackendBackend
BigDataApp DB
Frontend Frontend
Backend Backend BackendBackend
Server
BigDataApp DB
Frontend Frontend
Backend Backend BackendBackend
Server
• CoreOS Fleet

• Fig

• Apache Mesos + Maraphon

• Rancher

• HashiCorp Nomad

• Kubernetes
История вторая, длинная
Где-то в далеком-далеком Google
http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43438.pdf
Kubernetes
aka k8s
• Автоматическое распределение ресурсов

• Горизонтальное масштабирование

• Автоматическое развертывание и откат

• Управление системой хранения

• Автоматическое восстановление при сбоях

• Балансировка и service discovery

• Управление секретами и конфигурациями

• Одноразовые задачи
https://kubernetes.io/docs/concepts/architecture
Pods
Pod spec
apiVersion: v1
kind: Pod
metadata:
name: hellosetcon
labels:
app: hellosetcon
spec:
containers:
- name: hellosetcon-container
image: busybox
command: ['sh', '-c', 'echo Hello SetCon! && sleep 3600']
Services
Service spec
kind: Service
apiVersion: v1
metadata:
name: hellosetcon-service
spec:
selector:
app: hellosetcon
ports:
- protocol: TCP
port: 80
targetPort: 9376
Expose service
• LoadBalancer (только некоторые cloud платформы, например, GKE)

• NodePort

• Ingress (nginx, HAProxy, etc)
Controllers
• ReplicaSet

• Deployments

• StatefulSets

• DaemonSet

• Jobs

• CronJobs

• etc
Deployments
Управление Pods и ReplicaSets
Deployment spec
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: hellosetcon-deployment
labels:
app: hellosetcon
spec:
replicas: 3
selector:
matchLabels:
app: hellosetcon
template:
metadata:
...
Rollouts
Rollback
StatefulSets
• Русская языка очень сложная	 

• Stable, unique network identifiers.

• Stable, persistent storage.

• Ordered, graceful deployment and scaling.

• Ordered, graceful deletion and termination.

• Ordered, automated rolling updates.
DaemonSets
• Запускает pods на каждой ноде кластера (или выбранных нодах)

• Автоматически появится на новых нодах

• Удобно использовать для различных сервисов мониторинга
(prometheus, collectd), коллекторов логов (logstash, fluentd) и т.п.
Jobs
• Одноразово запускает поды и ждет их завершения

• Можно применять для внеплановых бекапов баз, работ по
восстановлению из бекапов, сбора информации по системе,
наполнения системы начальными данными, запуска тестов в CI и др.
CronJobs
И снова третье сентября
Ограничение ресурсов
• Kubernetes в данный момент поддерживает 2 типа ограничений

• CPU

• Memory

• Лимитов по IO/Network пока нет (но это решаемо)
Ограничение ресурсов
spec:
containers:
- name: db
image: mysql
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
Ограничение ресурсов
• CPU лимиты измеряются в юнитах-"миллиядрах"

• 1CPU = 1000m

• requests.cpu конвертируется в --cpu-shares флаг контейнера

• limits.cpu конвертируется в CPU time на каждые 100ms

• Превышение лимита приведет к тротлингу, но контейнер не умрет
Ограничение ресурсов
• Memory лимиты измеряются в байтах

• Превышение limit может привести к рестарту (если можно) или к
удалению контейнера

• Превышение requests приведет к удалению контейнера, если на ноде
заканчивается память
Раскладываем поды по
нодам и друг с другом
nodeSelector
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
disktype: ssd
Node (Anti-)Affinity
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/e2e-az-name
operator: In
values:
- e2e-az1
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: another-node-label-key
operator: In
values:
- another-node-label-value
Liveness & readiness probes
Liveness probe
spec:
containers:
- name: liveness
image: k8s.gcr.io/liveness
args:
- /server
livenessProbe:
httpGet:
path: /healthz
port: 8080
httpHeaders:
- name: X-Custom-Header
value: Awesome
initialDelaySeconds: 3
periodSeconds: 3
Readiness probe
spec:
containers:
- name: readiness
image: k8s.gcr.io/readiness
args:
- /server
livenessProbe:
httpGet:
path: /ping
port: 8080
initialDelaySeconds: 3
periodSeconds: 3
Storage
• 	awsElasticBlockStore

• 	azureDisk

• 	azureFile

• 	cephfs

• 	configMap

• 	csi

• 	downwardAPI

• 	emptyDir

• 	fc (fibre channel)

• 	flocker

• 	gcePersistentDisk

• 	gitRepo

• 	glusterfs

• 	hostPath

• 	iscsi

• 	local

• 	nfs

• 	persistentVolumeClaim

• 	projected

• 	portworxVolume

• 	quobyte

• 	rbd

• 	scaleIO

• 	secret

• 	storageos

• 	vsphereVolume
Minikube
А так же Docker for Mac и Windows
Kubespray
Chef-Kubernetes
Kubeadm
Helm
Tips (контейнеры)
• Контейнеры должны быть stateless

• Не раздувайте контейнеры

• Не запускайте процессы от root

• Один контейнер - один процесс

• Не надо делать авторестарт внутри контейнера, лучше завершиться

• Сканируйте на уязвимости и обновляйте базовый образ
Tips (deployments)
• Используйте --record при деплое, поможет с роллбеком

• Больше лейблов богу лейблов

• Используйте initContainers для бутстрапа

• Никогда не используйте latest тэг контейнера

• Readness & liveness probes - маст хэв

• Не забывайте про лимиты

• ExternalService поможет с внешними зависимостями
Tips (всего понемножку)
• Ingress - это хорошо

• Используйте Helm

• Не переборщите с Micro в микросервисах

• Используйте Namespaces для разделения кластера

• ChaosMonkey укажет на косяки

• Не ходите на ноды по SSH, используйте kubectl exec

• Мониторинг, логи
Кто такой этот ваш Kubernetes
и зачем он мне нужен?
SETCON'18 - Vitali Fokin - Kubernetes 101

Contenu connexe

Tendances

Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupBadoo Development
 
Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)Ontico
 
Введение в Docker
Введение в Docker Введение в Docker
Введение в Docker Andrey Markelov
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Ontico
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайOntico
 
Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?Anton Turetsky
 
Локальное окружение на Docker
Локальное окружение на DockerЛокальное окружение на Docker
Локальное окружение на DockerМихаил Бакулин
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиOleg Nenashev
 
My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25Alex Chistyakov
 
Михаил Боднарчук "Docker для PHP разработчиков"
Михаил Боднарчук "Docker для PHP разработчиков" Михаил Боднарчук "Docker для PHP разработчиков"
Михаил Боднарчук "Docker для PHP разработчиков" Fwdays
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годBadoo Development
 
Docker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоватьсяDocker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоватьсяСергей Ладыгин
 
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...Ontico
 
Docker с чем едят и для чего используют
Docker с чем едят и для чего используютDocker с чем едят и для чего используют
Docker с чем едят и для чего используютITCrowd Almaty
 

Tendances (20)

Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
 
Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)
 
Docker 1.9
Docker 1.9Docker 1.9
Docker 1.9
 
Введение в Docker
Введение в Docker Введение в Docker
Введение в Docker
 
Что такое Docker
Что такое DockerЧто такое Docker
Что такое Docker
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
 
Docker for JS people
Docker for JS peopleDocker for JS people
Docker for JS people
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
 
Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?
 
Continuousdelivery
ContinuousdeliveryContinuousdelivery
Continuousdelivery
 
Локальное окружение на Docker
Локальное окружение на DockerЛокальное окружение на Docker
Локальное окружение на Docker
 
Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
 
My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25
 
Михаил Боднарчук "Docker для PHP разработчиков"
Михаил Боднарчук "Docker для PHP разработчиков" Михаил Боднарчук "Docker для PHP разработчиков"
Михаил Боднарчук "Docker для PHP разработчиков"
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через год
 
Docker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоватьсяDocker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоваться
 
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
 
Docker с чем едят и для чего используют
Docker с чем едят и для чего используютDocker с чем едят и для чего используют
Docker с чем едят и для чего используют
 

Similaire à SETCON'18 - Vitali Fokin - Kubernetes 101

Нюансы запуска приложений в Kubernetes
Нюансы запуска приложений в KubernetesНюансы запуска приложений в Kubernetes
Нюансы запуска приложений в KubernetesАндрей Новиков
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Ontico
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализацияYandex
 
Масштабирование сервисов с помощью Apache Mesos
Масштабирование сервисов с помощью Apache MesosМасштабирование сервисов с помощью Apache Mesos
Масштабирование сервисов с помощью Apache MesosBitworks Software
 
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Tanya Denisyuk
 
Dev ops.events.v tymoshyk-20-oct-2016
Dev ops.events.v tymoshyk-20-oct-2016Dev ops.events.v tymoshyk-20-oct-2016
Dev ops.events.v tymoshyk-20-oct-2016Vad Tymoshyk
 
Magento 2 in Kubernetes Cluster
Magento 2  in Kubernetes ClusterMagento 2  in Kubernetes Cluster
Magento 2 in Kubernetes ClusterKirill Morozov
 
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...Ontico
 
Клуб Большого мозга - DevOps Evening
Клуб Большого мозга - DevOps EveningКлуб Большого мозга - DevOps Evening
Клуб Большого мозга - DevOps EveningArtjoker
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON
 
DevCon School. Azure Microservices and Containers
DevCon School. Azure Microservices and ContainersDevCon School. Azure Microservices and Containers
DevCon School. Azure Microservices and ContainersStas Pavlov
 
Yet Another PaaS
Yet Another PaaSYet Another PaaS
Yet Another PaaSProvectus
 
Приватный клауд на базе OpenStack
Приватный клауд на базе OpenStackПриватный клауд на базе OpenStack
Приватный клауд на базе OpenStackIlya Alekseyev
 
Тернии контейнеризованных приложений и микросервисов
Тернии контейнеризованных приложений и микросервисовТернии контейнеризованных приложений и микросервисов
Тернии контейнеризованных приложений и микросервисовIvan Kruglov
 
Как превратить приложение в платформу
Как превратить приложение в платформуКак превратить приложение в платформу
Как превратить приложение в платформуVadim Kruchkov
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayAndrey Rebrov
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...Provectus
 
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)Ontico
 

Similaire à SETCON'18 - Vitali Fokin - Kubernetes 101 (20)

Нюансы запуска приложений в Kubernetes
Нюансы запуска приложений в KubernetesНюансы запуска приложений в Kubernetes
Нюансы запуска приложений в Kubernetes
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Windows Azure Internals
Windows Azure InternalsWindows Azure Internals
Windows Azure Internals
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Масштабирование сервисов с помощью Apache Mesos
Масштабирование сервисов с помощью Apache MesosМасштабирование сервисов с помощью Apache Mesos
Масштабирование сервисов с помощью Apache Mesos
 
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
 
Dev ops.events.v tymoshyk-20-oct-2016
Dev ops.events.v tymoshyk-20-oct-2016Dev ops.events.v tymoshyk-20-oct-2016
Dev ops.events.v tymoshyk-20-oct-2016
 
Magento 2 in Kubernetes Cluster
Magento 2  in Kubernetes ClusterMagento 2  in Kubernetes Cluster
Magento 2 in Kubernetes Cluster
 
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
 
Клуб Большого мозга - DevOps Evening
Клуб Большого мозга - DevOps EveningКлуб Большого мозга - DevOps Evening
Клуб Большого мозга - DevOps Evening
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
 
DevCon School. Azure Microservices and Containers
DevCon School. Azure Microservices and ContainersDevCon School. Azure Microservices and Containers
DevCon School. Azure Microservices and Containers
 
Yet Another PaaS
Yet Another PaaSYet Another PaaS
Yet Another PaaS
 
Приватный клауд на базе OpenStack
Приватный клауд на базе OpenStackПриватный клауд на базе OpenStack
Приватный клауд на базе OpenStack
 
Тернии контейнеризованных приложений и микросервисов
Тернии контейнеризованных приложений и микросервисовТернии контейнеризованных приложений и микросервисов
Тернии контейнеризованных приложений и микросервисов
 
Как превратить приложение в платформу
Как превратить приложение в платформуКак превратить приложение в платформу
Как превратить приложение в платформу
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps way
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
 
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
 

Plus de Nadzeya Pus

SETCON'18 - Yauheni Pakala - .NET Embedding
SETCON'18 - Yauheni Pakala - .NET Embedding SETCON'18 - Yauheni Pakala - .NET Embedding
SETCON'18 - Yauheni Pakala - .NET Embedding Nadzeya Pus
 
SETCON'18 - Siarhei Tuzik - Enterprise Orchestration
SETCON'18 - Siarhei Tuzik - Enterprise OrchestrationSETCON'18 - Siarhei Tuzik - Enterprise Orchestration
SETCON'18 - Siarhei Tuzik - Enterprise OrchestrationNadzeya Pus
 
SETCON'18 - Siarhei Skavarodkin - Docker for developers
SETCON'18 - Siarhei Skavarodkin - Docker for developersSETCON'18 - Siarhei Skavarodkin - Docker for developers
SETCON'18 - Siarhei Skavarodkin - Docker for developersNadzeya Pus
 
SETCON'18 - Ilya labacheuski - GraphQL adventures
SETCON'18 - Ilya labacheuski - GraphQL adventuresSETCON'18 - Ilya labacheuski - GraphQL adventures
SETCON'18 - Ilya labacheuski - GraphQL adventuresNadzeya Pus
 
SETCON'18 - Dzmitry Nichyparuk - Designing reliable software
SETCON'18 - Dzmitry Nichyparuk - Designing reliable softwareSETCON'18 - Dzmitry Nichyparuk - Designing reliable software
SETCON'18 - Dzmitry Nichyparuk - Designing reliable softwareNadzeya Pus
 
SETCON'18 - Aliaksander Stsepaniuk - Effective CPU
SETCON'18 - Aliaksander Stsepaniuk - Effective CPUSETCON'18 - Aliaksander Stsepaniuk - Effective CPU
SETCON'18 - Aliaksander Stsepaniuk - Effective CPUNadzeya Pus
 
SETCON'18 - Aleh Toba - Путь из Developer-a в Manager-ы
SETCON'18 - Aleh Toba - Путь из Developer-a в Manager-ы SETCON'18 - Aleh Toba - Путь из Developer-a в Manager-ы
SETCON'18 - Aleh Toba - Путь из Developer-a в Manager-ы Nadzeya Pus
 

Plus de Nadzeya Pus (7)

SETCON'18 - Yauheni Pakala - .NET Embedding
SETCON'18 - Yauheni Pakala - .NET Embedding SETCON'18 - Yauheni Pakala - .NET Embedding
SETCON'18 - Yauheni Pakala - .NET Embedding
 
SETCON'18 - Siarhei Tuzik - Enterprise Orchestration
SETCON'18 - Siarhei Tuzik - Enterprise OrchestrationSETCON'18 - Siarhei Tuzik - Enterprise Orchestration
SETCON'18 - Siarhei Tuzik - Enterprise Orchestration
 
SETCON'18 - Siarhei Skavarodkin - Docker for developers
SETCON'18 - Siarhei Skavarodkin - Docker for developersSETCON'18 - Siarhei Skavarodkin - Docker for developers
SETCON'18 - Siarhei Skavarodkin - Docker for developers
 
SETCON'18 - Ilya labacheuski - GraphQL adventures
SETCON'18 - Ilya labacheuski - GraphQL adventuresSETCON'18 - Ilya labacheuski - GraphQL adventures
SETCON'18 - Ilya labacheuski - GraphQL adventures
 
SETCON'18 - Dzmitry Nichyparuk - Designing reliable software
SETCON'18 - Dzmitry Nichyparuk - Designing reliable softwareSETCON'18 - Dzmitry Nichyparuk - Designing reliable software
SETCON'18 - Dzmitry Nichyparuk - Designing reliable software
 
SETCON'18 - Aliaksander Stsepaniuk - Effective CPU
SETCON'18 - Aliaksander Stsepaniuk - Effective CPUSETCON'18 - Aliaksander Stsepaniuk - Effective CPU
SETCON'18 - Aliaksander Stsepaniuk - Effective CPU
 
SETCON'18 - Aleh Toba - Путь из Developer-a в Manager-ы
SETCON'18 - Aleh Toba - Путь из Developer-a в Manager-ы SETCON'18 - Aleh Toba - Путь из Developer-a в Manager-ы
SETCON'18 - Aleh Toba - Путь из Developer-a в Manager-ы
 

SETCON'18 - Vitali Fokin - Kubernetes 101

  • 2. whoami • Виталий Фокин • Python-, Java-, Javascript-, Whatever-developer • 8 лет коммерческого продакшена • https://www.linkedin.com/in/vitalifokin/ • https://www.facebook.com/quozd
  • 3. Но сначала.. • Kubernetes и оркестрация приложений - очень сложная и большая тема, поэтому смотреть будем свысока и опустим некоторые детали • Смотрим со стороны разработчика приложений, администрирование Kubernetes - отдельная вселенная со своей магией • Все примеры для Kubernetes 1.8
  • 4. Кто такой этот ваш Kubernetes и зачем он мне нужен?
  • 5. Open-source system for automating deployment, scaling, and management of containerized applications
  • 6.
  • 7. Контейнеризация • Виртуализация на уровне операционной системы — метод виртуализации, при котором ядро операционной системы поддерживает несколько изолированных экземпляров пространства пользователя, вместо одного. Эти экземпляры (часто называемые контейнерами или зонами) с точки зрения пользователя полностью идентичны реальному серверу. Ядро обеспечивает полную изолированность контейнеров, поэтому программы из разных контейнеров не могут воздействовать друг на друга. (Педивикия)
  • 8. И зачем это всё? • Меньше overhead по сравнению с виртуальными машинами • Не требует поддержки железа • Все еще хорошая изоляция • Проще в использовании • НО меньше возможностей (shared ядро, нельзя запустить другую ОС и т.д.) • LXC, FreeBSD Jails, Docker, rkt, etc..
  • 9. Docker • Система userspace контейнеризации • Преимущественно для Linux • Использует LXC linux namespaces и cgroups • Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер
  • 10. • Воспроизводимость: больше нет "Работает на моем компе" • Атомарность: все зависимости носим с собой и не зависим от хоста • Легковестность: масштабирование и восстановление после сбоя в 1 клик • Изолированность: контейнеры не влияют друг на друга и на хост (не совсем) • Управление ресурсами хоста
  • 11. С чего все началось?
  • 12. История первая, короткая Представим, что вы таки подцепили болезнь под названием Docker
  • 17. BigDataApp DB Frontend Frontend Backend Backend BackendBackend Server BigDataApp DB Frontend Frontend Backend Backend BackendBackend Server
  • 18.
  • 19.
  • 20.
  • 21. • CoreOS Fleet • Fig • Apache Mesos + Maraphon • Rancher • HashiCorp Nomad • Kubernetes
  • 22. История вторая, длинная Где-то в далеком-далеком Google
  • 25. • Автоматическое распределение ресурсов • Горизонтальное масштабирование • Автоматическое развертывание и откат • Управление системой хранения • Автоматическое восстановление при сбоях • Балансировка и service discovery • Управление секретами и конфигурациями • Одноразовые задачи
  • 27. Pods
  • 28. Pod spec apiVersion: v1 kind: Pod metadata: name: hellosetcon labels: app: hellosetcon spec: containers: - name: hellosetcon-container image: busybox command: ['sh', '-c', 'echo Hello SetCon! && sleep 3600']
  • 30. Service spec kind: Service apiVersion: v1 metadata: name: hellosetcon-service spec: selector: app: hellosetcon ports: - protocol: TCP port: 80 targetPort: 9376
  • 31. Expose service • LoadBalancer (только некоторые cloud платформы, например, GKE) • NodePort • Ingress (nginx, HAProxy, etc)
  • 32. Controllers • ReplicaSet • Deployments • StatefulSets • DaemonSet • Jobs • CronJobs • etc
  • 34. Deployment spec apiVersion: apps/v1beta2 kind: Deployment metadata: name: hellosetcon-deployment labels: app: hellosetcon spec: replicas: 3 selector: matchLabels: app: hellosetcon template: metadata: ...
  • 37. StatefulSets • Русская языка очень сложная • Stable, unique network identifiers. • Stable, persistent storage. • Ordered, graceful deployment and scaling. • Ordered, graceful deletion and termination. • Ordered, automated rolling updates.
  • 38. DaemonSets • Запускает pods на каждой ноде кластера (или выбранных нодах) • Автоматически появится на новых нодах • Удобно использовать для различных сервисов мониторинга (prometheus, collectd), коллекторов логов (logstash, fluentd) и т.п.
  • 39. Jobs • Одноразово запускает поды и ждет их завершения • Можно применять для внеплановых бекапов баз, работ по восстановлению из бекапов, сбора информации по системе, наполнения системы начальными данными, запуска тестов в CI и др.
  • 41. Ограничение ресурсов • Kubernetes в данный момент поддерживает 2 типа ограничений • CPU • Memory • Лимитов по IO/Network пока нет (но это решаемо)
  • 42. Ограничение ресурсов spec: containers: - name: db image: mysql resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m"
  • 43. Ограничение ресурсов • CPU лимиты измеряются в юнитах-"миллиядрах" • 1CPU = 1000m • requests.cpu конвертируется в --cpu-shares флаг контейнера • limits.cpu конвертируется в CPU time на каждые 100ms • Превышение лимита приведет к тротлингу, но контейнер не умрет
  • 44. Ограничение ресурсов • Memory лимиты измеряются в байтах • Превышение limit может привести к рестарту (если можно) или к удалению контейнера • Превышение requests приведет к удалению контейнера, если на ноде заканчивается память
  • 46. nodeSelector apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent nodeSelector: disktype: ssd
  • 47. Node (Anti-)Affinity spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/e2e-az-name operator: In values: - e2e-az1 preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: another-node-label-key operator: In values: - another-node-label-value
  • 49. Liveness probe spec: containers: - name: liveness image: k8s.gcr.io/liveness args: - /server livenessProbe: httpGet: path: /healthz port: 8080 httpHeaders: - name: X-Custom-Header value: Awesome initialDelaySeconds: 3 periodSeconds: 3
  • 50. Readiness probe spec: containers: - name: readiness image: k8s.gcr.io/readiness args: - /server livenessProbe: httpGet: path: /ping port: 8080 initialDelaySeconds: 3 periodSeconds: 3
  • 51. Storage • awsElasticBlockStore • azureDisk • azureFile • cephfs • configMap • csi • downwardAPI • emptyDir • fc (fibre channel) • flocker • gcePersistentDisk • gitRepo • glusterfs • hostPath • iscsi • local • nfs • persistentVolumeClaim • projected • portworxVolume • quobyte • rbd • scaleIO • secret • storageos • vsphereVolume
  • 52. Minikube А так же Docker for Mac и Windows
  • 54. Helm
  • 55. Tips (контейнеры) • Контейнеры должны быть stateless • Не раздувайте контейнеры • Не запускайте процессы от root • Один контейнер - один процесс • Не надо делать авторестарт внутри контейнера, лучше завершиться • Сканируйте на уязвимости и обновляйте базовый образ
  • 56. Tips (deployments) • Используйте --record при деплое, поможет с роллбеком • Больше лейблов богу лейблов • Используйте initContainers для бутстрапа • Никогда не используйте latest тэг контейнера • Readness & liveness probes - маст хэв • Не забывайте про лимиты • ExternalService поможет с внешними зависимостями
  • 57. Tips (всего понемножку) • Ingress - это хорошо • Используйте Helm • Не переборщите с Micro в микросервисах • Используйте Namespaces для разделения кластера • ChaosMonkey укажет на косяки • Не ходите на ноды по SSH, используйте kubectl exec • Мониторинг, логи
  • 58. Кто такой этот ваш Kubernetes и зачем он мне нужен?