Kubernetes — это структура оркестровки с открытым исходным кодом, которая зависит от времени выполнения контейнера, такой как Docker или Containerd.
Пространство имен
Каждый созданный ресурс существует в Пространство имен Анкет По умолчанию это пространство имен с именем по умолчанию Анкет Также возможно создавать новые пространства имен. Если вы использовали Docker Swarm Раньше вы можете думать о пространстве имен как о куча .
apiVersion: v1
kind: Namespace
metadata:
name: development
labels:
name: development
Капсул
A POD набор одного или нескольких контейнеров, обмена такими же Пространство имен и тома Анкет
В Kubernetes контейнер не используется напрямую. Вместо этого создаются так называемые стручки, которые управляют контейнером. Это имеет преимущество в том, чтобы сохранить тот же стручок живым, в то время как контейнер (ы) может перезагрузить или изменять.
POD создается из шаблона, такого как ниже. Обычно на капсула есть один контейнер, но иногда плотные контейнеры помещают в одну и ту же стручку.
template:
spec:
containers:
- name: hello
image: hello-world
restartPolicy: OnFailure
Нагрузка
Обычно шаблоны стручков используются SO Контроллер рабочей нагрузки Анкет Они несут ответственность за управление жизненным циклом Рабочая нагрузка такой как работа и развертывание Анкет Ниже приведено определение рабочей нагрузки. Соответствующий контроллер позаботится о том, чтобы состояние системы соответствовало определению.
apiVersion: batch/v1
kind: Job
metadata:
name: hello-world
spec:
template:
spec:
containers:
- name: hello
image: hello-world
restartPolicy: OnFailure
В зависимости от типа приложения и конфигурации POD, разного рабочие нагрузки может быть использован. Ниже приведены рабочие нагрузки по умолчанию. Также возможно использовать пользовательские рабочие нагрузки со специализированным поведением.
- Развертывание и Replicaset (замена устаревшего ресурса ReplicationController). Развертывание хорошо подходит для управления рабочей нагрузкой приложения без сохранения в вашем кластере, где любой стручок в развертывании взаимозаменяемый и может быть заменен при необходимости.
- Statefulset Позволяет запустить один или несколько связанных стручков, которые каким -то образом отслеживают состояние. Например, если ваша рабочая нагрузка постоянно записывает данные, вы можете запустить Statefulset, который соответствует каждому POD с PersistentVolume. Ваш код, работающий в стручках для этого состояния, может воспроизводить данные другим стручкам в том же состоянии, чтобы повысить общую устойчивость.
- Daemonset Определяет стручки, которые предоставляют узлы-локальные средства. Они могут быть фундаментальными для работы вашего кластера, такой как инструмент сетевого помощника, или быть частью дополнения. Каждый раз, когда вы добавляете узел в свой кластер, который соответствует спецификации в Daemonset, плоскость управления планирует стручок для этого Daemonset на новый узел.
- Работа и Cronjob Определите задачи, которые бегают до завершения, а затем остановитесь. Работы представляют одноразовые задачи, в то время как Cronjobs повторяются в соответствии с графиком.
обслуживание
Услуги являются абстракцией поверх различных бэкэндов, таких как стручки. Они позволяют изменить бэкэнд при сохранении услуг. Услуги могут быть использованы для обоих, разоблачение Определенные рабочие нагрузки в публичную сеть ( Nodeport ) а также для связь между разными Podsets ( clucreip ), предоставляя стабильное имя IP/DNS. Обычно сервисы соответствуют набору стручков, используя этикетки и селекторы. Часто контроллер Ingress используется для выявления услуг.
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
Балансировки нагрузки
Балансировка нагрузки по умолчанию для сервисов и стручков выполняется Kube-Proxy и случается на слое 4.
Выбранный Прокси -режим для Kube-Proxy Определяет алгоритм балансировки нагрузки.
- Пользовательский режим Выбирает бэкэнд с помощью алгоритма круглого робина.
- Iptables Mode Выбирает бэкэнд случайным образом.
IPVS MODE предоставляет больше вариантов балансировки трафика для бэкэнд -стручков; это:
- rr : по-круговой
- LC : наименьшее соединение (наименьшее количество открытых соединений)
- DH : Хешинг назначения
- sh : Источник хешинг
- sed : кратчайшая ожидаемая задержка
- NQ : никогда не стоят в очереди
Обнаружение обслуживания
Kubernetes предоставляет DNS Анкет В зависимости от того, где находится запрос, запрос DNS дает разные результаты. Например, ресурсы в одном пространстве имен могут найти друг друга без их полностью квалифицированного доменного имени ( fqdn ).
Контейнер в одной и той же стручке может найти друг друга через интерфейс Loopback.
Запись DNS PODS имеет следующую форму.
pod-ip-address.my-namespace.pod.cluster-domain.example.
Стручки, созданные развертыванием или Daemonset, открытым службой, имеют следующее разрешение DNS.
pod-ip-address.deployment-name.my-namespace.svc.cluster-domain.example
Рабочие нагрузки, такие как развертывания, делают не Имейте DNS -имя сами. Вот почему большую часть времени они в сочетании с услугами, если им нужно быть доступным для других услуг или внешних запросов.
Услуги решаются как следующее.
. .svc.cluster.local
Стручки используют свое собственное пространство имен по умолчанию, это означает, что, например, при запросе Это будет решаться в службу, связанную с тем же пространством имен, что и стручок, делающий запрос DNS.
Это возможно из -за записи в каждом контейнерах /etc/resolv.conf это имеет следующую форму.
search.svc.cluster.local svc.cluster.local cluster.local
Примечание: не все инструменты, связанные с DNS, будут Поиск по умолчанию. Например, чтобы получить Сервис IP без Fqdn , из контейнера, используя Dig, +Поиск Флаг должен быть использован.
dig +search
Отладка DNS
Проверки здоровья
По умолчанию Kubernetes использует идентификатор процесса контейнера, чтобы определить стручок Живо и готовы Чтобы принять запросы. Пока весь указанный контейнер имеет соответствующий идентификатор процесса (PID), POD считается здоровым.
Обычай HealthProbes , может быть указан. Например, inivesprobe через http.
apiVersion: apps/v1
kind: Deployment
metadata:
name: healthcheck-me
spec:
template:
metadata:
labels:
app: healthcheck-me
spec:
containers:
- name: healthcheck-me
image: localhost/checkme
ivenessProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 0
periodSeconds: 10
timeoutSeconds: 1
failureThreshold: 3
Тома
Тома являются механизмом отделки хранения из контейнера. В Kubernetes поддерживаются различные типы объемов, и стручки могут одновременно использовать любое количество типов. Основное различие между этими типами заключается в том, что они эфемерный или настойчивый .
Когда стручка перестает существовать, Kubernetes разрушает эфемерные объемы; Тем не менее, Kubernetes не разрушает постоянные объемы. Для любого вида объема в заданном стручке данные сохраняются через перезапуск контейнеров.
apiVersion: v1
kind: Pod
metadata:
name: configmap-pod
spec:
containers:
- name: test
image: busybox
volumeMounts:
- name: config-vol
mountPath: /etc/config
volumes:
- name: config-vol
configMap:
name: log-config
items:
- key: log_level
path: log_level
Типы объемов
Ниже приведены некоторые из наиболее распространенных типов объемов. Есть больше типов доступно, например, большой облачный провайдер AWS , GCP и Azure Имейте свой собственный тип тома, который обеспечивает хранение в облачной платформе уважения.
| ConfigMap предоставляет способ ввести данные конфигурации в стручки. | configmap (эфемерный) |
| Том UlmentDir сначала создается, когда стручка назначается на узел, и существует до тех пор, пока этот стручок работает на этом узле. | EmptyDir (эфемерный) |
| Том HostPath объединяет файл или каталог из файловой системы узла хоста в ваш капсул. | Hostpath |
| Локальный том представляет собой монтированное локальное устройство хранения, такое как диск, раздел или каталог. | местный |
| Том NFS позволяет установить существующую NFS (сетевую файловую систему) общую общую сумму в POD. | nfs |
| Том PersistentVolumeclaim используется для установки PersistentVolume в стручок. | PersistentVolumeclaim |
| Секретный том используется для передачи конфиденциальной информации, такой как пароли, стручкам. | Секрет (Epehemral) |
Оригинал: «https://dev.to/codingsafari/kubernetes-overview-png»