• DevOps
  • Защита информации
  • ИТ-поддержка
  • Управление кластером Kubernetes

    Kubernetes (K8s) - это открытое программное обеспечение для автоматизации развёртывания, масштабирования и управления контейнеризированными приложениями.

    Разберем из каких элементов состоит kubernetes кластер:

    1. Мастер k8s - это коллекция из трех процессов, которые выполняются на одном узле в вашем кластере, который обозначен как главный узел. Это процессы: kube-apiserver, kube-controller-manager и kube-scheduler.
    2. Каждый отдельный неосновной узел в вашем кластере выполняет два процесса:
      • 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, когда сохранив в системе версионности все файлы конфигурации кластера, можно повторить его воссоздание на другой платформе в случае падения или разрушения кластера.

    Не нашли ответа на свой вопрос?
    Содержание