docker, kubernetes, ccp...•ui –kubernetes, api •security (policies, encryption) •add /...
Post on 20-May-2020
41 Views
Preview:
TRANSCRIPT
Docker, Kubernetes, CCPНиколай КораблинИльдар ИсхаковРазработчики, отдел Облачных Технологий
Cisco Systems
Agenda
• Зачем нужны контейнеры?
• Из чего они состоят?• namespaces• cgroups• unionFs
• Kubernetes• Основные компоненты• Ключевые концепции
• Запустим django приложение с помощью k8s• Cisco Container Platform
• Kubernetes-as-a-Service
© 2019 Cisco and/or its affiliates. All rights reserved.
Why containers?
© 2019 Cisco and/or its affiliates. All rights reserved.
Guest OS
Libs
Guest OS
Libs
Guest OS
Libs
App 2 App3App 1
Libs
Guest OS/Docker Engine
App 2
Libs
App 3
Libs
App 1
Bare Metal VM Container
Host
OS
Libraries
App 1, 2, 3
Host Host
Hypervisor Hypervisor
Why containers?
© 2019 Cisco and/or its affiliates. All rights reserved.
Guest OS
Libs
Guest OS
Libs
Guest OS
Libs
App 2 App3App 1
Libs
Guest OS/Docker Engine
App 2
Libs
App 3
Libs
App 1
Bare Metal VM Container
Host
OS
Libraries
App 1, 2, 3
Host Host
Hypervisor Hypervisor
Scaling Big overhead
LINUX CONTAINERS
• Namespaces• Cgroups• * Union File system
© 2019 Cisco and/or its affiliates. All rights reserved.
Namespaces
© 2019 Cisco and/or its affiliates. All rights reserved.
Пространство имён Что изолирует
PID PID процессов
NETWORK Сетевые устройства, стеки, порты и т.п.
USER ID пользователей и групп
MOUNT Точки монтирования
IPC SystemV IPC, очереди сообщений POSIX
UTS Имя хоста и доменное имя NIS
1
2 3
54
7 8 (1)
9 (2) 10 (3)
6
Родительское пространство имен PID
Дочернее пространство имен
Control groups
© 2019 Cisco and/or its affiliates. All rights reserved.
CPU
GROUP 1GROUP 2
MEMORY
GROUP 1GROUP 2
I/O
GROUP 3GROUP 1
GROUP 2
• cpu — обеспечивает доступ процессов в рамках контрольной группы к CPU;
• memory — управляет выделением памяти для групп процессов;
• blkio — устанавливает лимиты на чтение и запись с блочных устройств
• devices — разрешает или блокирует доступ к устройствам;
• netprio — используется для динамической установки приоритетов по трафику;
• cpuset — распределяет задачи в рамках контрольной группы между процессорными ядрами;
Union FS
© 2019 Cisco and/or its affiliates. All rights reserved.
Base Image( /etc, /bin, /boot, /home, /sbin …)
/app + /etc, /bin, /boot, /home, /sbin …COPY . /app
FROM ubuntu:18.04
RUN make build INSTALLED REQUIREMENTS + /app, /etc, /bin, /boot, /home, /sbin …
DOCKERFILE READ ONLY
everything in linux is a file
CMD python /app/app.py Running the app
Но как управлять контейнерами когда их слишком много?
© 2019 Cisco and/or its affiliates. All rights reserved.
Контейнеры
• Управление контейнерами в масштабе – боль• Распределение ресурсов между нодами• Перезапуск в случае падения• Хранение данных (контейнеры эфемерны)• Настройка сети, балансировка трафика• Обновление• Мониторинг
© 2019 Cisco and/or its affiliates. All rights reserved.
Системы оркестрации
© 2019 Cisco and/or its affiliates. All rights reserved.
• Mesos, Docker Swarm, Kubernetes
Kubernetes (k8s)
Среда для управления контейнерами в большом масштабе• Основан выходцами из Google, концептуально похож на их внутренний продукт -
Borg• Opensource и активное комьюнити (~50000 Звезд на github, 2049
контрибьюторов), часть Cloud Native Computing Foundation• Поддерживает 5000 нод в кластере и 150000 подов в текущей версииЧем же он полезен?
• Абстрагирует приложение от железа или провайдера облака, исключая vendor lock-in
• Предоставляет примитивы (объекты k8s API) для построения приложений• Предоставляет большое количество готовых решений, которые можно запустить
одной командой
© 2019 Cisco and/or its affiliates. All rights reserved.
Архитектура
© 2019 Cisco and/or its affiliates. All rights reserved.
K8s worker K8s worker K8s worker
K8s master
x 5000
Архитектура
© 2019 Cisco and/or its affiliates. All rights reserved.
kube-apiserver
K8s worker K8s worker K8s worker
K8s master
Архитектура
© 2019 Cisco and/or its affiliates. All rights reserved.
kube-apiserver
K8s worker K8s worker K8s worker
etcdcluster
K8s master
Архитектура
© 2019 Cisco and/or its affiliates. All rights reserved.
kube-apiserver
kube-controller-manager
kube-sheduler
K8s worker K8s worker K8s worker
etcdcluster
K8s master
Архитектура
© 2019 Cisco and/or its affiliates. All rights reserved.
kube-apiserver
kube-controller-manager
kube-sheduler
kubelet/kube-proxy
K8s worker
kubelet/kube-proxy
K8s worker
kubelet/kube-proxy
K8s worker
kubelet/kube-proxy
etcdcluster
K8s master
Архитектура
© 2019 Cisco and/or its affiliates. All rights reserved.
kube-apiserver
kube-controller-manager
kube-sheduler
CRI
kubelet/kube-proxy
K8s worker
CRI
kubelet/kube-proxy
K8s worker
CRI
kubelet/kube-proxy
K8s worker
kubelet/kube-proxy
etcdcluster
K8s master
Remote Container Image Registry
Архитектура
© 2019 Cisco and/or its affiliates. All rights reserved.
YAML
kubectl kube-apiserver
kube-controller-manager
kube-sheduler
CRI
kubelet/kube-proxy
K8s worker
CRI
kubelet/kube-proxy
K8s worker
CRI
kubelet/kube-proxy
K8s worker
kubelet/kube-proxy
etcdcluster
K8s master
Remote Container Image Registry
K8S API Objects
© 2019 Cisco and/or its affiliates. All rights reserved.
POD REPLICA SET
DEPLOYMENT SERVICE PVC
Pod
• Атомарный объект K8S API
• Может содержать любое количество контейнеров, обычно 1-2
• Эти контейнеры будут размещены на одной ноде
• Контейнеры внутри пода используют единый IP адрес и сетевые порты. Контейнеры внутри пода могут взаимодействовать через localhost
© 2019 Cisco and/or its affiliates. All rights reserved.
apiVersion: v1kind: Podmetadata:
name: myapp-podlabels:
app: myapptier: frontend
spec:containers:- name: myapp-container
image: busyboxcommand:
- sh- -c- echo Hello K8s! &&
sleep 3600
Service
© 2019 Cisco and/or its affiliates. All rights reserved.
Ресурс в котором объявляется какие сервисы предоставляет приложение• Универсальный метод доступа к
реплицированным подам• DNS name => Service Discovery
Типы• ClusteIP –доступ только внутри
кластера• NodePort – Пробрасывает порт
сервиса на статический порт врешнего IP адреса ноды
• LoadBalancer – доступ через 3-ие приложения (LB) – облачный провайдер либо внешний LB
kind: ServiceapiVersion: v1metadata:
name: my-servicespec:
selector:tier: frontend
ports:- protocol: TCP
port: 80targetPort: 9376
Labels
• Labels - Пары ключ-значение используемые для идентификации, применяются к объектам k8s API
• Selectors – Селекторы используют лейблы для фильтрации или выбора объектов.
© 2019 Cisco and/or its affiliates. All rights reserved.
metadata:labels:
tier: frontend
spec:selector:
tier: frontend
POD
POD
POD
POD
POD
POD
tier: frontend
tier: backend
tier: frontend
tier: frontend
tier: backend
tier: backend
SERVICE my-serviceselector:tier:frontend
http://my-service:80
http://68.10.20.30
ReplicaSet
• Горизонтальное масштабирование
• Включает шаблон Pod для создания любого количества копий пода
• Предоставляет логику для масштабирования
• Может быть использован для rolling deploys выкатка релизов без даунтайма и возможность отката
© 2019 Cisco and/or its affiliates. All rights reserved.
apiVersion: apps/v1kind: ReplicaSetmetadata:
name: frontendlabels:
app: guestbooktier: frontend
spec:replicas: 3selector:
matchLabels:tier: frontend
template:metadata:labels:
app: myapptier: frontend
spec:containers:- name: myapp-container
image: busyboxcommand:- sh- -c- echo Hello K8s! && sleep 3600
POD
POD
POD
ReplicaSet
• Горизонтальное масштабирование
• Включает шаблон Pod для создания любого количества копий пода
• Предоставляет логику для масштабирования
• Может быть использован для rolling deploys выкатка релизов без даунтайма и возможность отката
© 2019 Cisco and/or its affiliates. All rights reserved.
apiVersion: apps/v1kind: ReplicaSetmetadata:
name: frontendlabels:
app: guestbooktier: frontend
spec:replicas: 3selector:
matchLabels:tier: frontend
template:metadata:labels:
app: myapptier: frontend
spec:containers:- name: myapp-container
image: busyboxcommand:- sh- -c- echo Hello K8s! && sleep 3600
POD
POD
POD
Deployment
• Самый популярный тип объявления
• Идеален для Stateless приложений• Определяет как обновлять
приложение
• Statefulset
• DaemonSet
© 2019 Cisco and/or its affiliates. All rights reserved.
apiVersion: apps/v1kind: Deploymentmetadata:
name: frontendlabels:
app: guestbooktier: frontend
spec:replicas: 3selector:
matchLabels:tier: frontend
strategy:type: RollingUpdaterollingUpdate:
maxSurge: 1maxUnavailable: 1
template:metadata:labels:
app: myapptier: frontend
spec:containers:- name: myapp-container
…
POD v1
POD v1
POD v1
Deployment
• Самый популярный тип объявления
• Идеален для Stateless приложений• Определяет как обновлять
приложение• Создает новую версию ReplicaSet
• Statefulset
• DaemonSet
© 2019 Cisco and/or its affiliates. All rights reserved.
apiVersion: apps/v1kind: Deploymentmetadata:
name: frontendlabels:
app: guestbooktier: frontend
spec:replicas: 3selector:
matchLabels:tier: frontend
strategy:type: RollingUpdaterollingUpdate:
maxSurge: 1maxUnavailable: 1
template:metadata:labels:
app: myapptier: frontend
spec:containers:- name: myapp-container
…
POD v1
POD v1
POD v1
POD v2
POD v2
POD v2
Deployment
• Самый популярный тип объявления
• Идеален для Stateless приложений• Определяет как обновлять
приложение• Создает новую версию ReplicaSet
• Statefulset
• DaemonSet
© 2019 Cisco and/or its affiliates. All rights reserved.
apiVersion: apps/v1kind: Deploymentmetadata:
name: frontendlabels:
app: guestbooktier: frontend
spec:replicas: 3selector:
matchLabels:tier: frontend
strategy:type: RollingUpdaterollingUpdate:
maxSurge: 1maxUnavailable: 1
template:metadata:labels:
app: myapptier: frontend
spec:containers:- name: myapp-container
…
POD v1
POD v1
POD v1
POD v2
POD v2
POD v2
Deployment
• Самый популярный тип объявления
• Идеален для Stateless приложений• Определяет как обновлять
приложение• Создает новую версию ReplicaSet
• Statefulset
• DaemonSet
© 2019 Cisco and/or its affiliates. All rights reserved.
apiVersion: apps/v1kind: Deploymentmetadata:
name: frontendlabels:
app: guestbooktier: frontend
spec:replicas: 3selector:
matchLabels:tier: frontend
strategy:type: RollingUpdaterollingUpdate:
maxSurge: 1maxUnavailable: 1
template:metadata:labels:
app: myapptier: frontend
spec:containers:- name: myapp-container
…
POD v1
POD v1
POD v1
POD v2
POD v2
POD v2
Deployment
• Самый популярный тип объявления
• Идеален для Stateless приложений• Определяет как обновлять
приложение• Создает новую версию ReplicaSet
• Statefulset
• DaemonSet
© 2019 Cisco and/or its affiliates. All rights reserved.
apiVersion: apps/v1kind: Deploymentmetadata:
name: frontendlabels:
app: guestbooktier: frontend
spec:replicas: 3selector:
matchLabels:tier: frontend
strategy:type: RollingUpdaterollingUpdate:
maxSurge: 1maxUnavailable: 1
template:metadata:labels:
app: myapptier: frontend
spec:containers:- name: myapp-container
…
POD v1
POD v1
POD v1
POD v2
POD v2
POD v2
kubectl
• kubectl create –f deployment.yaml
• kubectl get pods
• kubectl get services
• kubectl get deployments
• kubectl describe pod <pod name>
• kubectl edit pod <pod name>
• kubectl logs –f <pod name>
• kubectl exec –it <pod name> sh
• kubectl port-forward ..
• kubectl --help
© 2019 Cisco and/or its affiliates. All rights reserved.
Helm
• Helm - один из самых популярных пакетных менеджеров для k8s• Существует огромное количество чартов (пакетов) с готовыми приложениями• Легко понять структуру приложения, какие объекты будут созданы• Состоит из клиентской части и серверной (tiller pod)• Существует некоторое количество минусов• Но готовится к выходу новая версия Helm3
├── Chart.yaml├── charts├── templates│ ├── NOTES.txt│ ├── _helpers.tpl│ ├── deployment.yaml│ ├── ingress.yaml│ └── service.yaml└── values.yaml
© 2019 Cisco and/or its affiliates. All rights reserved.
Мониторинг
© 2019 Cisco and/or its affiliates. All rights reserved.
$ helm install stable/prometheus-operator
$ helm install stable/elasticsearch$ helm install stable/kibana$ helm install stable/fluentd
Логи
Метрики
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• Deploy Kubernetes clusters on HyperFlex and vSphere
• Container Networking – CNI and service mesh (Istio)
• Persistent storage (Flex Driver)
• L3 / L7 Load Balancing (Nginx)• Container Registry (Harbor)
• AD Authentication / RBAC• Communication between containers
and VMs / BMs
• Resource based node pools• UI – Kubernetes, API
• Security (policies, encryption)
• Add / remove Kubernetes nodes• Lifecycle management (OS updates,
Kubernetes upgrades)
• Monitoring (Prometheus)• Logging (EFK)
• High Availability
Cisco Container Platform Feature Set
Kubernetes-as-a-Service
Setup ManageConsume
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
Спасибо за внимание!
Николай КораблинИнженер – разработчик Cisconkorabli@cisco.com
Ильдар ИсхаковИнженер – разработчик Ciscoiiskhako@cisco.comtelegram - @ildars
top related