2. Strictly Confidential
LAZADA Group
■ Крупнейший маркетплейс в ЮВА
■ Работаем в 6 странах
■ Три офиса разработки в разных странах, более
1000 разработчиков
■ Часть холдинга AliBaba Group
3. Strictly Confidential
Что такое Docker?
Docker - технология запуска и управления приложениями в контейнерах
Основные идеи Docker:
■ Cgroups & namespaces
■ Golang
■ Docker Images
■ Libcontainer (resources, filesystem, ...)
5. Strictly Confidential
Что такое Kubernetes?
Kubernetes - платформа для управления кластером приложений,
запущенныхв контейнерах (docker или rkt) на нескольких хостах.
Kubernetes включает в себя:
■ Группировкaконтейнеров
■ Load balancing
■ Auto-healing
■ Scaling
■ Deployment
6. Strictly Confidential
Kubernetes: основные идеи
Организован по принципу master-slave, рассмотрим основные идеи:
■ Pods: группировкаконтейнеров
■ Labels: группировкаподов
■ Kubelet: агенты
■ Replication Controller: управление репликами
■ Scheduler: планировщик
■ API Server: KubernetesAPI Server
8. Strictly Confidential
Окружения для разработки
▪ Изолированные kvm (180 машин)
▪ Полная инсталляция Kubernetes внутри
VM
API Server, Replication
Controller, Scheduler
Kubelet, Kube-Proxy
Nginx
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
11. Strictly Confidential
Staging и Live
▪ Более легкая инсталляция
▪ API Server Kubernetes
▪ Без skydnsи kube-proxy
Nginx
pod
etcd
Confd
pod
12. Strictly Confidential
Проблемы внедрения
■ Не более 250 контейнеровна ноде
■ Не более 80 подовна ноде
■ Iptables нагружает CPU
■ Kubernetes в случае падения контейнера поднимает новый контейнер
из образа (потеря данных в memcached, elasticseach etc)
■ Задержки в репортах от kubelet к replication-controller
■ Зависание docker
■ Нестабильная работа flanneld
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
22. Strictly Confidential
Деплоймент Kubernetes
ReadinessLiveness example
■ Readiness probe fails
■ Kubernetesstops routing traffic to the pod
■ Liveness probe fails
■ Kubernetesrestarts the pod
■ Readiness probe succeeds
■ Kubernetesstarts routing traffic to the pod again
24. Strictly Confidential
Деплоймент Kubernetes
Rolling updates
Rollout
$ kubectl rolling-updatemy-app -f app.yaml
Scaling up my-app-v2from 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-updatemy-app –rollback
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. 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. Strictly Confidential
Деплоймент Kubernetes
Rolling updates
История изменений - откат на конкретнуюревизию
$ kubectl rollout undodeployment/myapp-deployment--to-revision=2
deployment "myapp-deployment"rolled back
Откат на предыдущуюревизию
$ kubectl rollout undodeployment/maypp-deployment
deployment "myapp-deployment"rolled back
28. Strictly Confidential
Управление процессом Rolling update
■ maxSurge, maxUnavailable
■ maxSurge - максимальное количество подов поверх ожидаемых.
■ MaxUnavailable - максимальное количество недоступныхподовв
процессе обновления.
strategy:
rollingUpdate:
maxSurge: 10
maxUnavailable: 5
type: RollingUpdate
34. Strictly Confidential
Канареечный деплой
Плюсы:
■ Деплой без даунтайма.
■ Возможность перенаправлять часть трафика на другую версию приложения.
■ Возможность быстро откатиться на предыдущую версию.
Load balancer
stable
stable
unstable
stable