e
Применение контейнеризации стало неотъемлемой частью процесса разработки и тестирования программного обеспечения. Контейнеры позволяют разработчикам упаковывать приложения вместе со всеми зависимостями, обеспечивая их стабильную работу в любом окружении. Однако с ростом числа контейнеров возникает необходимость в эффективном управлении ими. Здесь на помощь приходит Kubernetes (K8s).
Что такое Kubernetes (или, как часто русифицируют название, «Кубернетис»)? Это мощная платформа для оркестрации контейнеров, которая позволяет автоматизировать развертывание, управление и масштабирование приложений. Эта статья будет полезна тем, кто только начинает знакомство с Kubernetes. Мы рассмотрим основные понятия, разберем ключевые компоненты и архитектуру платформы, обсудим ее преимущества и расскажем, как установить Kubernetes. Эта информация поможет вам понять, как Kubernetes может повысить эффективность и надежность ваших приложений, а также ускорить процессы разработки и развертывания.
Попробуем пояснить понятие Kubernetes простыми словами. Kubernetes (K8s) — это платформа с открытым исходным кодом для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями. Kubernetes был разработан компанией Google в 2014 году и с тех пор стал одним из самых популярных инструментов для оркестрации контейнеров. По данным Datadog, его использует почти половина компаний, применяющих контейнеризацию в разработке.
Основная цель Kubernetes — предоставить способ управления приложениями в контейнерах в распределенных средах, обеспечивая автоматическое восстановление, масштабирование и балансировку нагрузки.
Контейнеры — это легковесные и изолированные окружения для выполнения приложений. Они содержат в себе все необходимые для работы приложения компоненты: код, библиотеки, иные зависимости и системные инструменты. Контейнеры позволяют запускать приложения в любых средах (на ПК, серверах, в облаке) без модификации кода, а также контейнеры, управляемые платформой Kubernetes, помогают изолировать приложения и зависимости.
Контейнеры обеспечивают изоляцию приложений на уровне операционной системы и используют общие ресурсы ядра ОС, позволяя задать ограничения для каждого отдельного контейнера: процессор, память, полоса сетевого доступа, полоса и количество операций с дисками. В отличие от виртуальных машин, контейнеры не содержат собственную копию операционной системы и обладают свойствами изоляции при совместном использовании одной ОС приложениями, поэтому они считаются легковесными.
Контейнеры стали популярными благодаря следующим преимуществам:
Архитектура Kubernetes построена на принципах модульности и масштабируемости. Она включает в себя множество компонентов, о которых расскажем ниже.
CSI (Container Storage Interface) — интерфейс для интеграции систем хранения данных с Kubernetes. Он позволяет подключать сторонние системы хранения данных через API.
Реализации CSI:
CNI (Container Network Interface) — интерфейс для сетевой конфигурации контейнеров, который используется для управления сетью и взаимодействия между подами.
Реализации CNI:
CRI (Container Runtime Interface) — интерфейс для взаимодействия Kubernetes с различными средами выполнения контейнеров.
Реализации CRI:
Кластеры — совокупность узлов (серверов), которые работают вместе для выполнения контейнеризованных приложений. Кластеры состоят из двух типов узлов: control plane и worker node.
Приложения в Kubernetes запускаются внутри подов (pods) — наборов работающих контейнеров в кластере. Каждый под имеет свой жизненный цикл. К примеру, если на узле с запущенными подами произойдет сбой, все поды выйдут из строя. Такой сбой будет считаться необратимым: для восстановления нужно будет создать новые поды, даже если позже узел заработает. Чтобы облегчить управление и не контролировать каждый под вручную, в K8s были добавлены контроллеры.
Контроллеры — компоненты, которые следят за состоянием кластера или какого-либо ресурса в Kubernetes и выполняют различные действия для поддержания желаемого состояния.
Основные контроллеры:
Ниже мы расскажем, как развернуть Kubernetes вручную. Если вы хотите сэкономить время на установке и развертывании кластера, закажите готовое решение KaaS — создание кластера займет не более одной минуты. Готовые кластеры Kubernetes не требуют навыков администрирования: специалисты Рег.ру возьмут на себя всю работу по обслуживанию, поддержке и обеспечению безопасности кластеров.
Kubernetes можно развернуть различными способами: через kubeadm, kOps, kubespray, с помощью cluster API и другие. В этой статье мы развернем кластер через kubeadm.
Kubeadm — инструмент, который используется для создания кластеров K8s. Он выполняет действия, необходимые для быстрого запуска минимально жизнеспособного кластера. Kubeadm также служит «строительным блоком» для более высокоуровневых инструментов, таких как kubespray.
Подготовка кластера Kubernetes с другими инструментами требует времени, ресурсов сервера и опыта. Kubeadm прост в освоении и подходит для случаев, когда необходимо быстро развернуть кластер с минимальными ресурсами.
Установка будет производиться на серверы с операционной системой Ubuntu. В качестве примера мы установим одну master node с именем k8s-master и одну worker node с именем k8s-worker.
sudo nano /etc/hosts
IP_MASTER_NODE k8s-master
IP_WORKER_NODE k8s-worker
Где:
Чтобы сохранить изменения и закрыть файл, нажмите Ctrl+X, Y, Enter.
sudo hostnamectl set-hostname k8s-master
sudo hostnamectl set-hostname k8s-worker
На всех нодах проделайте следующие шаги:
sudo apt update
sudo apt upgrade -y
sudo apt-get install -y apt-transport-https ca-certificates curl gpg gnupg2 software-properties-common
mkdir /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
sudo apt-get update
Обратите внимание: во время выполнения этой команды может возникнуть ошибка 403:
E: Failed to fetch https://apt.kubernetes.io/dists/kubernetes-xenial/InRelease 403 Forbidden [IP: 2600:1901:0:26f3:: 443]
E: The repository 'https://apt.kubernetes.io kubernetes-xenial InRelease' is not signed.
Проблема возникает из-за подключения к серверам по IPv6. Чтобы ее устранить, можно отключить использование IPv6.
Чтобы временно (до перезагрузки) отключить использование IPv6, введите команды:
sysctl -w net.ipv6.conf.all.disable_ipv6=1
sysctl -w net.ipv6.conf.default.disable_ipv6=1
sysctl -w net.ipv6.conf.lo.disable_ipv6=1
Чтобы включить IPv6, воспользуйтесь командами:
sysctl -w net.ipv6.conf.all.disable_ipv6=0
sysctl -w net.ipv6.conf.default.disable_ipv6=0
sysctl -w net.ipv6.conf.lo.disable_ipv6=0
Чтобы полностью отключить использование IPv6, откройте файл /etc/sysctl.conf:
nano /etc/sysctl.conf
Добавьте в него параметры:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
После сохраните изменения и закройте файл, нажав Ctrl+X, Y, Enter.
sudo apt-get install -y kubelet kubeadm kubectl vim git curl wget
sudo apt-mark hold kubelet kubeadm kubectl
sudo systemctl enable --now kubelet
kubeadm version
sudo swapoff -a
На всех нодах проделайте следующие шаги:
sudo modprobe overlay
sudo modprobe br_netfilter
sudo nano /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
Чтобы сохранить изменения и закрыть файл, нажмите Ctrl+X, Y, Enter.
sudo sysctl --system
На всех нодах проделайте следующие шаги:
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo sysctl --system
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install containerd.io -y
sudo su -
mkdir -p /etc/containerd
containerd config default>/etc/containerd/config.toml
nano /etc/containerd/config.toml
SystemdCgroup = true
После сохраните изменения и закройте файл, нажав Ctrl+X, Y, Enter.
exit
sudo systemctl restart containerd
sudo systemctl enable containerd
sudo kubeadm config images pull
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
Затем введите скопированную команду на k8s-worker. Так вы присоедините ноду к кластеру.
Если вы забыли сохранить команду, для повторного получения откройте ноду k8s-master и введите:
sudo kubeadm token create --print-join-command
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl get pods --all-namespaces
sudo kubectl label node k8s-worker node-role.kubernetes.io/worker=worker
kubectl get nodes
В списке должна появиться master node и одна worker node.
На этом установка и развертывание K8s завершены. Вы создали самый примитивный кластер с минимально необходимыми настройками.
В качестве примера использования Kubernetes мы создадим pod, запустим сервис NodePort и получим доступ к поду через узел кластера. Для этого:
touch pod.yaml
nano pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx
ports:
- containerPort: 80
Затем сохраните и закройте файл, нажав Ctrl+X, Y, Enter.
kubectl apply -f pod.yaml
touch service.yaml
nano service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30007 # Здесь можно указать любой доступный порт из диапазона 30000-32767
type: NodePort
Затем сохраните и закройте файл, нажав Ctrl+X, Y, Enter.
kubectl apply -f service.yaml
curl http://<NodeIP>:30007
Где <NodeIP> — IP вашей ноды.
Вывод будет примерно следующим:
Внедрение Kubernetes может значительно улучшить процессы разработки, развертывания и управления приложениями. Однако процесс внедрения требует тщательного планирования. Чтобы определиться, нужен ли Kubernetes вашему бизнесу:
Затем подготовьтесь к миграции:
Для перехода на K8s:
При правильном планировании и реализации Kubernetes может стать ключевым инструментом для достижения бизнес-целей и поддержки современных подходов к разработке ПО. Грамотное планирование, подготовка инфраструктуры, обучение команды и постоянная оптимизация помогут использовать возможности Kubernetes по максимуму и обеспечат устойчивый рост и развитие бизнеса.
Анастасия Мартынова
Многие предприниматели жалуются на сложный и слишком изобильный документооборот: много документов приходится оформлять. Но при…
Чтобы легально пользоваться результатами чужого труда в своем бизнесе, нужно за это заплатить. И неважно,…
Франшизы предоставляют предпринимателям возможность использовать популярные бренды, эффективные бизнес-модели и поддержку со стороны материнской компании.…
Некоторые компании сосредотачивают в своих руках и производственные мощности, и права на то, что на…
У любой компании есть адрес, по которому она «прописана», то есть зарегистрирована в ЕГРЮЛ. Но…
Подросток может заниматься бизнесом, но с учетом важных условий, прописанных в законе. Разбираемся, как несовершеннолетнему…