39
Docker, Kubernetes, CCP Николай Кораблин Ильдар Исхаков Разработчики, отдел Облачных Технологий Cisco Systems

Docker, Kubernetes, CCP...•UI –Kubernetes, API •Security (policies, encryption) •Add / remove Kubernetes nodes •Lifecycle management (OS updates, Kubernetes upgrades) •Monitoring

  • Upload
    others

  • View
    32

  • Download
    0

Embed Size (px)

Citation preview

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

© 2019 Cisco and/or its affiliates. All rights reserved.

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.

Kubernetes

Контейнеры

• Управление контейнерами в масштабе – боль• Распределение ресурсов между нодами• Перезапуск в случае падения• Хранение данных (контейнеры эфемерны)• Настройка сети, балансировка трафика• Обновление• Мониторинг

© 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

Пример приложения k8s

© 2019 Cisco and/or its affiliates. All rights reserved.

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

Спасибо за внимание!

Николай КораблинИнженер – разработчик [email protected]

Ильдар ИсхаковИнженер – разработчик [email protected] - @ildars