Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Kubernetes
Indonesia PhilippinesMalaysia ThailandSingapore Vietnam
Роман Кранкус Алексей Борисов
Strictly Confidential
LAZADA Group
■ Крупнейший маркетплейс в ЮВА
■ Работаем в 6 странах
■ Три офиса разработки в разных с...
Strictly Confidential
Что такое Docker?
Docker - технология запуска и управления приложениями в контейнерах
Основные идеи ...
Strictly Confidential
Архитектура Docker
Docker Registry
push, pull, search, ...
Docker
Daemon
Host OS
Hardware
libcontain...
Strictly Confidential
Что такое Kubernetes?
Kubernetes - платформа для управления кластером приложений,
запущенных в конте...
Strictly Confidential
Kubernetes: основные идеи
Организован по принципу master-slave, рассмотрим основные идеи:
■ Pods: гр...
Strictly Confidential
Kubernetes: окружения
 Development: окружение разработчика
 Showrooms: тестовое окружение
 Stagin...
Strictly Confidential
Окружения для разработки
 Изолированные kvm (180 машин)
 Полная инсталляция Kubernetes внутри
VM
A...
Strictly Confidential
Окружения для тестирования
 3 DC (VN, TH, MSK)
 Slaves (150 nodes)
 ~ 160 showrooms
API Server, R...
Strictly Confidential
DevOps-портал
Strictly Confidential
Staging и Live
 Более легкая инсталляция
 API Server Kubernetes
 Без skydns и kube-proxy
Nginx
po...
Strictly Confidential
Проблемы внедрения
■ Не более 250 контейнеров на ноде
■ Не более 80 подов на ноде
■ Iptables нагружа...
Deployment
Indonesia PhilippinesMalaysia ThailandSingapore Vietnam
Strictly Confidential
Схема деплоймента
1.New code
2.SCM poll
trigger build
3.push
image
4.BAD tool
runs
deployment
5. con...
Strictly Confidential
Деплоймент Docker
1. Code pushed to the bitbucket
2. Jenkins build image job
3. Building BAD tool on...
Strictly Confidential
Деплоймент Docker
BAD tool
Pull images
Checking current docker port
Starting new container on next p...
Strictly Confidential
Деплоймент Kubernetes
Deployment Rolling updates Canary deployment
Strictly Confidential
Деплоймент Kubernetes
Deployments
Описание конфигурации приложения.
■ Imagetag
■ Env variables
■ Dat...
Strictly Confidential
Деплоймент Kubernetes
Deployments
Описание желаемого состояния
$ kubectl create -f myapp-deployment....
Strictly Confidential
Деплоймент Kubernetes
Liveness probes
■ HTTP
■ TCP
■ Command
livenessProbe:
httpGet:
path: /health_c...
Strictly Confidential
Деплоймент Kubernetes
Readiness probes
■ HTTP
■ TCP
■ Command
readinessProbe:
httpGet:
path: /health...
Strictly Confidential
Деплоймент Kubernetes
ReadinessLiveness example
■ Readiness probe fails
■ Kubernetes stops routing t...
Strictly Confidential
Деплоймент Kubernetes
Rolling updates
Service
+ +
v1 v1v1 v2
Replication controller
-replicas 3
-sel...
Strictly Confidential
Деплоймент Kubernetes
Rolling updates
Rollout
$ kubectl rolling-update my-app -f app.yaml
Scaling up...
Strictly Confidential
Деплоймент Kubernetes
История изменений
$ kubectl rollout history deployment/my-app
deployments "my-...
Strictly Confidential
Деплоймент Kubernetes
Rolling updates
История изменений - подробная информация
$ kubectl rollout his...
Strictly Confidential
Деплоймент Kubernetes
Rolling updates
История изменений - откат на конкретную ревизию
$ kubectl roll...
Strictly Confidential
Управление процессом Rolling update
■ maxSurge, maxUnavailable
■ maxSurge - максимальное количество ...
Strictly Confidential
Управление процессом Rolling update
■ MaxSurge: 2
MaxUnavailable: 1
Strictly Confidential
Управление процессом Rolling update
■ MaxSurge: 2
MaxUnavailable: 1
Strictly Confidential
Управление процессом Rolling update
■ MaxSurge: 2
MaxUnavailable: 1
Strictly Confidential
Управление процессом Rolling update
■ MaxSurge: 2
MaxUnavailable: 1
Strictly Confidential
Канареечный деплой
Strictly Confidential
Канареечный деплой
Плюсы:
■ Деплой без даунтайма.
■ Возможность перенаправлять часть трафика на друг...
Strictly Confidential
Канареечный деплой
■ STABLE
■ name: frontend
replicas: 3
...
labels:
app: guestbook
tier: frontend
t...
Strictly Confidential
Бонусы
■ Отсутствие даунтайма при деплое
■ Быстрое масштабирование
■ Динамическая конфигурация класт...
Strictly Confidential
Вопросы?
Upcoming SlideShare
Loading in …5
×

Kubernetes

959 views

Published on

Доклад Романа Кранкуса и Алексея Борисова на конференции SQA Days-21
www.sqadays.com

Published in: Education
  • Be the first to comment

  • Be the first to like this

Kubernetes

  1. 1. Kubernetes Indonesia PhilippinesMalaysia ThailandSingapore Vietnam Роман Кранкус Алексей Борисов
  2. 2. Strictly Confidential LAZADA Group ■ Крупнейший маркетплейс в ЮВА ■ Работаем в 6 странах ■ Три офиса разработки в разных странах, более 1000 разработчиков ■ Часть холдинга AliBaba Group
  3. 3. Strictly Confidential Что такое Docker? Docker - технология запуска и управления приложениями в контейнерах Основные идеи Docker: ■ Cgroups & namespaces ■ Golang ■ Docker Images ■ Libcontainer (resources, filesystem, ...)
  4. 4. Strictly Confidential Архитектура Docker Docker Registry push, pull, search, ... Docker Daemon Host OS Hardware libcontainer Client App App cgroups, namespaces
  5. 5. Strictly Confidential Что такое Kubernetes? Kubernetes - платформа для управления кластером приложений, запущенных в контейнерах (docker или rkt) на нескольких хостах. Kubernetes включает в себя: ■ Группировкa контейнеров ■ Load balancing ■ Auto-healing ■ Scaling ■ Deployment
  6. 6. Strictly Confidential Kubernetes: основные идеи Организован по принципу master-slave, рассмотрим основные идеи: ■ Pods: группировка контейнеров ■ Labels: группировка подов ■ Kubelet: агенты ■ Replication Controller: управление репликами ■ Scheduler: планировщик ■ API Server: Kubernetes API Server
  7. 7. Strictly Confidential Kubernetes: окружения  Development: окружение разработчика  Showrooms: тестовое окружение  Staging/Live: «боевое» окружение
  8. 8. Strictly Confidential Окружения для разработки  Изолированные kvm (180 машин)  Полная инсталляция Kubernetes внутри VM API Server, Replication Controller, Scheduler Kubelet, Kube-Proxy Nginx
  9. 9. Strictly Confidential Окружения для тестирования  3 DC (VN, TH, MSK)  Slaves (150 nodes)  ~ 160 showrooms API Server, Replication Controller, Scheduler, quagga, etcd Kubelet, Kube-Proxy Kubelet, Kube-Proxy Kubelet, Kube-Proxy Kubelet, Kube-Proxy Nginx  API Server Kubernetes  Skydns  Kube-Proxy
  10. 10. Strictly Confidential DevOps-портал
  11. 11. Strictly Confidential Staging и Live  Более легкая инсталляция  API Server Kubernetes  Без skydns и kube-proxy Nginx pod etcd Confd pod
  12. 12. Strictly Confidential Проблемы внедрения ■ Не более 250 контейнеров на ноде ■ Не более 80 подов на ноде ■ Iptables нагружает CPU ■ Kubernetes в случае падения контейнера поднимает новый контейнер из образа (потеря данных в memcached, elasticseach etc) ■ Задержки в репортах от kubelet к replication-controller ■ Зависание docker ■ Нестабильная работа flanneld
  13. 13. Deployment Indonesia PhilippinesMalaysia ThailandSingapore Vietnam
  14. 14. Strictly Confidential Схема деплоймента 1.New code 2.SCM poll trigger build 3.push image 4.BAD tool runs deployment 5. containers started
  15. 15. Strictly Confidential Деплоймент Docker 1. Code pushed to the bitbucket 2. Jenkins build image job 3. Building BAD tool on deploy node 4. Pulling image 5. Running BAD tool with params which starts new containers 6. Health checking 7. Stopping old containers if healthy or rollback
  16. 16. Strictly Confidential Деплоймент Docker BAD tool Pull images Checking current docker port Starting new container on next port Health checking Rollback PIU-PIU
  17. 17. Strictly Confidential Деплоймент Kubernetes Deployment Rolling updates Canary deployment
  18. 18. Strictly Confidential Деплоймент Kubernetes Deployments Описание конфигурации приложения. ■ Imagetag ■ Env variables ■ Data volumes ■ Number of replicas ■ Labels
  19. 19. Strictly Confidential Деплоймент Kubernetes Deployments Описание желаемого состояния $ kubectl create -f myapp-deployment.yaml deployment "myapp-deployment" created $ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE myapp-deployment 3 3 3 3 35s
  20. 20. Strictly Confidential Деплоймент Kubernetes Liveness probes ■ HTTP ■ TCP ■ Command livenessProbe: httpGet: path: /health_check port: 8080 initialDelaySeconds: 15 timeoutSeconds: 1 periodSeconds: 15
  21. 21. Strictly Confidential Деплоймент Kubernetes Readiness probes ■ HTTP ■ TCP ■ Command readinessProbe: httpGet: path: /health_check port: 8080 initialDelaySeconds: 5 timeoutSeconds: 1 periodSeconds: 15
  22. 22. Strictly Confidential Деплоймент Kubernetes ReadinessLiveness example ■ Readiness probe fails ■ Kubernetes stops routing traffic to the pod ■ Liveness probe fails ■ Kubernetes restarts the pod ■ Readiness probe succeeds ■ Kubernetes starts routing traffic to the pod again
  23. 23. Strictly Confidential Деплоймент Kubernetes Rolling updates Service + + v1 v1v1 v2 Replication controller -replicas 3 -selector: - app: my-app-v1 -version: v1 Replication controller -replicas 1 -selector: - app: my-app-v2 -version: v2
  24. 24. Strictly Confidential Деплоймент Kubernetes Rolling updates Rollout $ kubectl rolling-update my-app -f app.yaml Scaling up my-app-v2 from 0 to 3, scaling down my-app from 3 to 0 Check status $ kubectl rollout status deployment/my-app Waiting for rollout to finish: 2 out of 3 new replicas have been updated... deployment "myapp-deployment" successfully rolled out Rollback to previous version $ kubectl rolling-update my-app –rollback
  25. 25. Strictly Confidential Деплоймент Kubernetes История изменений $ kubectl rollout history deployment/my-app deployments "my-app": REVISION CHANGE-CAUSE 1 kubectl create -f my-app-deployment.yaml --record 2 kubectl set image deployment/my-app app=myapp:1.9 3 kubectl set image deployment/my-app app=myapp:2.0
  26. 26. Strictly Confidential Деплоймент Kubernetes Rolling updates История изменений - подробная информация $ kubectl rollout history deployment/myapp-deployment --revision=2 deployments "myapp-deployment" revision 2 Labels: app=myapp pod-template-hash=1159050644 Annotations: kubernetes.io/change-cause=kubectl set image deployment/myapp- deployment myapp=myapp:1.9 Containers: myapp: Image: myapp:1.9 Port: 80/TCP
  27. 27. Strictly Confidential Деплоймент Kubernetes Rolling updates История изменений - откат на конкретную ревизию $ kubectl rollout undo deployment/myapp-deployment --to-revision=2 deployment "myapp-deployment" rolled back Откат на предыдущую ревизию $ kubectl rollout undo deployment/maypp-deployment deployment "myapp-deployment" rolled back
  28. 28. Strictly Confidential Управление процессом Rolling update ■ maxSurge, maxUnavailable ■ maxSurge - максимальное количество подов поверх ожидаемых. ■ MaxUnavailable - максимальное количество недоступных подов в процессе обновления. strategy: rollingUpdate: maxSurge: 10 maxUnavailable: 5 type: RollingUpdate
  29. 29. Strictly Confidential Управление процессом Rolling update ■ MaxSurge: 2 MaxUnavailable: 1
  30. 30. Strictly Confidential Управление процессом Rolling update ■ MaxSurge: 2 MaxUnavailable: 1
  31. 31. Strictly Confidential Управление процессом Rolling update ■ MaxSurge: 2 MaxUnavailable: 1
  32. 32. Strictly Confidential Управление процессом Rolling update ■ MaxSurge: 2 MaxUnavailable: 1
  33. 33. Strictly Confidential Канареечный деплой
  34. 34. Strictly Confidential Канареечный деплой Плюсы: ■ Деплой без даунтайма. ■ Возможность перенаправлять часть трафика на другую версию приложения. ■ Возможность быстро откатиться на предыдущую версию. Load balancer stable stable unstable stable
  35. 35. Strictly Confidential Канареечный деплой ■ STABLE ■ name: frontend replicas: 3 ... labels: app: guestbook tier: frontend track: stable ... image: gb-frontend:v3 ■ UNSTABLE ■ name: frontend-unstable replicas: 1 ... labels: app: guestbook tier: frontend track: unstable ... image: gb-frontend:v4 Load balancer stable stable stable unstable
  36. 36. Strictly Confidential Бонусы ■ Отсутствие даунтайма при деплое ■ Быстрое масштабирование ■ Динамическая конфигурация кластера - легко добавлятьудалять нодыподы ■ Тонко конфигурируемый деплой ■ Быстрый ролаут и ролбек
  37. 37. Strictly Confidential Вопросы?

×