Kubernetes - это открытая система для автоматизации развертывания, масштабирования и управления контейнеризованными приложениями.
Чтобы понять, для чего хорошо использовать Kubernetes, рассмотрим некоторые примеры:
Вы хотите запустить определенное приложение в контейнере на нескольких различных местах. Конечно, если у вас есть 2-3 сервера/места, вы можете справиться самостоятельно, но возможностей масштабирования на дополнительные места может быть недостаточно.
Выполнение обновлений и изменений для сотен контейнеров.
Обработка случаев, когда текущая нагрузка требует масштабирования (вверх или вниз).
Кластер
Мастер-узел
API-сервер
Эталонное хранилище и конечная точка
Контроллер планирования
Контроллер репликации
Контроллер управления конечной точкой
Контроллер управления настроек конфигурации
Рабочие узлы
Сетевая служба
Proxy-сервер
Планировщик подов
Kubelet (агент Kubernetes)
Kube-proxy (для обеспечения сетевой связности)
Кластер состоит из Мастера (который координирует работу кластера) и Узлов, на которых запускаются приложения.
kubectl create deployment kubernetes-httpd --image=httpd Команда создает развертывание (deployment) с именем "kubernetes-httpd" и использует образ "httpd".
kubectl: утилита командной строки Kubernetes.
create deployment: команда для создания развертывания.
kubernetes-httpd: это имя, которое вы выбираете для вашего развертывания. Вы можете выбрать любое уникальное имя для своего развертывания.
--image=httpd: опция указывает образ, который будет использоваться для создания контейнера в вашем развертывании. В данном случае, указывается образ httpd, который является веб-сервером Apache HTTP Server.
Таким образом, команда создает развертывание с именем "kubernetes-httpd", которое будет запускать контейнер на основе образа "httpd".
Мастер координирует все рабочие процессы в кластере:
Планирование приложений
Управление желаемым состоянием
Развертывание обновлений
Проверить, что мастер-компоненты запущены и работают:
kubectl get componentstatuses
Проверить состояние узлов в кластере:
kubectl get nodes
Проверить состояние развертываний и подов:
kubectl get deployments
kubectl get pods
Создание развертывания (deployment) с именем "my-deployment" и 3 репликами:
kubectl create deployment my-deployment --image=my-image --replicas=3
Масштабирование развертывания до 5 реплик:
kubectl scale deployment my-deployment --replicas=5
Обновление образа для развертывания:
kubectl set image deployment/my-deployment my-container=my-new-image
Просмотр логов пода:
kubectl logs my-pod
kubectl - это утилита командной строки для работы с Kubernetes API-сервером, который является основной частью мастера Kubernetes.
scheduler, controller-manager и etcd-0 - это компоненты мастера Kubernetes:
scheduler отвечает за планирование (размещение) подов на доступные узлы в кластере в соответствии с заданными требованиями и ограничениями.
controller-manager управляет различными контроллерами, которые обеспечивают желаемое состояние кластера (например, контроллер репликации, контроллер конечной точки и другие).
etcd представляет собой распределенное хранилище, используемое для сохранения и синхронизации состояния кластера Kubernetes.
docker exec -it minikube /bin/sh docker ps e6b6aad92a6d 115053965e86 "/metrics-sidecar" Up 3 days k8s_dashboard-metrics-scraper 5849db300377 deb04688c4a3 "kube-apiserver --ad…" Up 3 days k8s_kube-apiserver 3c8f7d15de97 46a6bb3c77ce "/usr/local/bin/kube…" Up 3 days k8s_kube-proxy 1ad890efd424 e9c08e11b07f "kube-controller-man…" Up 3 days k8s_kube-controller-manager 01f9cb94c715 fce326961ae2 "etcd --advertise-cl…" Up 3 days k8s_etcd_etcd b10bfdb5744d 655493523f60 "kube-scheduler --au…" Up 3 days k8s_kube-scheduler 862a594e1b92 registry.k8s.io/pause:3.6 "/pause" Up 3 days k8s_POD_coredns Выведенные контейнеры через docker ps внутри оболочки minikube, представляют компоненты мастера Kubernetes. У каждого компонента есть свой уникальный идентификатор контейнера (например, k8s_kube-apiserver, k8s_kube-controller-manager, k8s_etcd_etcd и т. д.). Они представляют основные сервисы, которые работают на мастер-узле и обеспечивают функционирование кластера Kubernetes.
Таким образом, перечисленные контейнеры являются компонентами мастера Kubernetes, которые управляют планированием, управлением и хранением состояния кластера.