Kubernetes (K8s) – это открытое программное обеспечение для автоматизации развёртывания, масштабирования и управления контейнеризированными приложениями.
Разберем из каких элементов состоит kubernetes кластер:
- Мастер k8s – это коллекция из трех процессов, которые выполняются на одном узле в вашем кластере, который обозначен как главный узел. Это процессы: kube-apiserver, kube-controller-manager и kube-scheduler.
- Каждый отдельный неосновной узел в вашем кластере выполняет два процесса:
- kubelet взаимодействует с мастером Kubernetes.
- kube-proxy – сетевой прокси, который обрабатывает сетевые сервисы Kubernetes на каждом узле.
- среда выполнения контейнеров Docker, containerd, CRI-O
Установка кластера зависит от выбранной архитектуры кластера и его размещения: On-Premises или Cloud Managed. В первом случае можно использовать kubespray или kops, во втором – утилиты, которые предоставляют облачные провайдеры.
Для простоты будем использовать aws и для установки кластера напишем следующее описание:
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: test-cluster
region: eu-west-1
version: "1.17"
nodeGroups:
- name: NG-1-17
instanceType: t3a.small
desiredCapacity: 4
#ami: ami-0b69a0b152acc27cf
amiFamily: AmazonLinux2
minSize: 2
maxSize: 8
volumeSize: 30
ssh:
allow: true # will use ~/.ssh/id_rsa.pub as the default ssh key
Для создания кластера необходимы утилиты awscli и eksctl, которые доступны для всех типов ОС, а также активный аккаунт в aws.
Применяем выбранные настройки командой:
eksctl create cluster -f test-cluster.yaml
Если все сделано правильно, у вас появится папка .kube, в которой будет находится описание для подключения к кластеру (токен, сертификаты, конекст и адрес подключения к кластеру).
После успешного создания кластера, можно выполнить команду:
kubectl get nodes
Эта команда выведет информацию о нодах кластера.
Для управления кластером необходимо обращаться к объектам API kubernetes, описывая состояние необходимых объектов. Объектами Kubernetes могут быть:
- Pod
- Service
- Том
- Namespace
Kubernetes также содержит абстракции более высокого уровня, которые опираются на контроллеры для создания базовых объектов и предоставляют дополнительные функциональные и удобные функции. Они включают:
- Deployment
- DaemonSet
- StatefulSet
- ReplicaSet
- Job
Примером описания необходимого состояния объекта может быть следующий листинг кода:
apiVersion: apps/v1 # до версии 1.9.0 нужно использовать apps/v1beta2
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # запускает 2 пода, созданных по шаблону
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80В нем мы описываем развертывание контейнера веб-сервера nginx, представленный двумя репликами и указываем порт, который будет слушать контейнер.
Примерно схожим образом выполняется управление и другими объектами кластера. Такой подход отлично вписывается в концепцию IaS – infrastructure as a code, когда сохранив в системе версионности все файлы конфигурации кластера, можно повторить его воссоздание на другой платформе в случае падения или разрушения кластера.
Возможно, для решения ваших задач подойдет наш DevOps-аутсорсинг или Managed Kubernetes as a Service.
