+7 (495) 107-75-45 Подключение
+7 (495) 107-75-47 Тех. поддержка 24/7
Пример
16.11.2024

Kubernetes: Основы и установка K3S для среднего и малого бизнеса

Введение в Kubernetes

Kubernetes (сокращенно k8s) — это открытая платформа контейнеризации, которая помогает управлять контейнеризированными приложениями через автоматизацию развертывания, масштабирования и операций. Она была создана компанией Google и сейчас поддерживается сообществом Linux Foundation. Kubernetes предоставляет мощные инструменты для управления кластерами контейнеров, обеспечивая высокую доступность и автоматическое восстановление приложений.

Зачем нужен Kubernetes?

  1. Управление контейнерами: Kubernetes позволяет легко управлять множеством контейнеров, обеспечивая их высокую доступность и масштабируемость.
  2. Автоматизация развертывания: Автоматизированные инструменты для развертывания приложений упрощают процесс обновления и масштабирования.
  3. Масштабирование: Kubernetes позволяет легко увеличивать или уменьшать количество работающих экземпляров приложения, что важно для поддержания производительности и снижения затрат.
  4. Обслуживание приложений: Инструменты для мониторинга и логгирования помогают быстро диагностировать и устранять неполадки в работе приложения.

Сравнение Kubernetes (k8s) и K3s

Сравнение Kubernetes (k8s) и K3s

Что такое K3s?

K3s — это легковесная версия Kubernetes, разработанная специально для малых и средних предприятий. Она имеет меньший объем ресурсов по сравнению с полной версией k8s и предназначена для упрощения развертывания и управления кластерами Kubernetes.

Преимущества K3s:

  1. Легковесность: Меньшее потребление ресурсов, что делает его идеальным для ограниченных сред.
  2. Упрощенная установка и управление: Легче настроить и управлять по сравнению с k8s.
  3. Минимум конфигураций: Меньшее количество параметров, что уменьшает вероятность ошибок при настройке.

Установка K3S

Минимальные требования:

  • Один сервер или виртуальная машина с операционной системой Linux (Ubuntu, CentOS, etc.).
  • 2 ГБ RAM
  • 2 ядра CPU
  • 20 ГБ свободного места на диске

Пример установки K3S:

Шаг 1: Обновите систему и установите необходимые зависимости:

sudo apt update && sudo apt upgrade -y
sudo apt install curl -y

Шаг 2: Скачайте и установите K3s:

curl -sfL https://get.k3s.io | sh -

Шаг 3: Настройка переменных окружения для работы с kubectl:

export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
alias k="kubectl"

Шаг 4: Проверьте статус кластера:

k get nodes

Пример установки на разных серверах в разных местах:

Пример установки на разных серверах в разных местах:

Сервер 1 (Master):

  1. Установите k3s как описано выше.
  2. Проверьте статус кластера:
k get nodes

Сервер 2 и последующие (Workers):

  1. На всех рабочих серверах выполните установку k3s с использованием того же скрипта:
curl -sfL https://get.k3s.io | sh -

Добавьте их в кластер, указав IP-адреса серверов:

kubectl taint nodes <worker-node-name> node-role.kubernetes.io/master=:NoSchedule

Основные компоненты Kubernetes:

  1. kubelet: Агент, который запускается на каждой рабочей ноде и управляет контейнерами внутри этой ноды.
  2. kubeadm: Инструмент для упрощения установки Kubernetes.
  3. kubectl: Командная строка для взаимодействия с кластером Kubernetes.
  4. etcd: Распределенное хранилище ключей, используемое Kubernetes для хранения всех конфигураций и состояний кластера.
  5. API сервер: Основной интерфейс взаимодействия с кластером Kubernetes.
  6. Scheduler: Планировщик, который назначает положения Pods на узлах.
  7. Controller Manager: Отвечает за управление различными контроллерами в кластере, такими как ReplicaSet, DaemonSet и другие.

Развертывание веб-сервера с внешним доступом и базы данных PostgreSQL для среднего и малого бизнеса

В современном мире цифровых технологий, многие предприятия нуждаются в облачных сервисах для расширения своих возможностей. Развертывание веб-сервера с внешним доступом и базой данных PostgreSQL позволяет организациям предоставлять онлайн-сервисы, поддерживать взаимодействие с клиентами через интернет и увеличить гибкость работы. В этой статье мы рассмотрим, как развернуть такую среду на базе Kubernetes (k8s) или K3s.

Требования

Перед началом установки убедитесь, что у вас есть следующие компоненты:

  • Сервер с операционной системой Linux (например, Ubuntu или CentOS).
  • Доступ к сети для подключения извне.
  • Установленные инструменты kubectl и helm, если вы планируете использовать Helm для установки приложений.

Шаг 1: Развертывание базы данных PostgreSQL

Для начала развернем базу данных PostgreSQL. Мы воспользуемся StatefulSet и PersistentVolumeClaim, чтобы обеспечить сохранность данных даже при перезапуске контейнеров.

Файл postgres-deployment.yaml:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: postgres
spec:
  selector:
    matchLabels:
      app: postgres
  serviceName: "postgres"
  replicas: 1
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
      - name: postgres
        image: postgres:latest
        ports:
        - containerPort: 5432
        env:
        - name: POSTGRES_PASSWORD
          value: "your-password"
        volumeMounts:
        - name: postgres-storage
          mountPath: /var/lib/postgresql/data
  volumeClaimTemplates:
  - metadata:
      name: postgres-storage
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 10Gi
---
apiVersion: v1
kind: Service
metadata:
  name: postgres
spec:
  selector:
    app: postgres
  ports:
    - protocol: TCP
      port: 5432
      targetPort: 5432

Комментарии к StatefulSet:

  • apiVersion: Определяет версию API, используемую для создания объекта. В данном случае это apps/v1 — стандартная версия API для работы с StatefulSets.

  • kind: Тип создаваемого объекта — в данном случае, это StatefulSet.

  • metadata.name: Имя ресурса — здесь он назван “postgres”.

  • spec.selector.matchLabels.app: postgres и template.metadata.labels.app: postgres: эти метки используются для соответствия StatefulSet с правильными экземплярами контейнеров PostgreSQL.

  • serviceName: “postgres”: Название сервиса, которое будет использоваться в StatefulSet. Это важно для обеспечения стабильного DNS-имени и сетевых подключений к каждому экземпляру.

  • replicas: 1: Определяет количество реплик или повторяющихся экземпляров PostgreSQL, которые будут запущены. В этом случае — один экземпляр.

  • template.spec.containers:

    • name: postgres: Имя контейнера.
    • image: postgres:latest: Используется последняя версия образа PostgreSQL.
    • ports.containerPort: 5432: Указывает, что порт 5432 будет использоваться для доступа к базе данных.
    • env.POSTGRES_PASSWORD: Задает пароль для подключения к базе данных. Важно заменить "your-password" на реальный пароль в Production среде.
  • volumeClaimTemplates:

    • Объявление тома для хранения данных PostgreSQL, который будет использоваться каждым экземпляром StatefulSet.
    • name: postgres-storage: Имя тома.
    • accessModes: [ "ReadWriteOnce" ]: Разрешает только одному узлу доступ к данным в режиме записи.
    • resources.requests.storage: 10Gi: Запрашиваемое пространство для хранения — 10 ГБ.

Комментарии к Сервису:

  • apiVersion: В данном случае v1 — версия API для создания сервисов.

  • kind: Тип объекта, создаваемого в Kubernetes — Service.

  • metadata.name: Название сервиса, используемого для доступа к базе данных PostgreSQL. Здесь это также "postgres".

  • spec.selector.app: postgres: Отмечает, что этот сервис будет маршрутизировать трафик только на те ресурсы с меткой app=postgres.

  • ports:

    • protocol: TCP: Указывает протокол для использования — TCP.
    • port: 5432: Порт, который будет использоваться для доступа к сервису из Kubernetes сетевой системы. В данном случае, это порт PostgreSQL.
    • targetPort: 5432: Целевой порт в контейнере, на который будет маршрутизироваться трафик.

Таким образом, этот YAML-файл описывает установку и доступ к одному экземпляру базы данных PostgreSQL с использованием StatefulSet и соответствующего сервиса.

Применение конфигурации:

kubectl apply -f postgres-deployment.yaml

Шаг 2: Развертывание веб-сервера

Теперь развернем веб-сервер, который будет доступен извне. Мы используем Deployment для масштабирования и Service с внешним IP адресом для доступа.

Файл web-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: your-web-server-image
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: web
spec:
  selector:
    app: web
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

Применение конфигурации:

kubectl apply -f web-deployment.yaml

установка Postgres Kubernetes

Шаг 3: Настройка базы данных и веб-сервера

После развертывания сервисов необходимо настроить подключение к базе данных из веб-сервера. Это можно сделать через переменные окружения в контейнере веб-сервера или посредством секретов Kubernetes.

Пример настройки переменных окружения для веб-сервера:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: your-web-server-image
        ports:
        - containerPort: 80
        env:
        - name: POSTGRES_HOST
          value: "postgres.default.svc.cluster.local"
        - name: POSTGRES_PORT
          value: "5432"
        - name: POSTGRES_USER
          value: "postgres"
        - name: POSTGRES_PASSWORD
          valueFrom:
            secretKeyRef:
              name: postgres-secret
              key: password
---
apiVersion: v1
kind: Secret
metadata:
  name: postgres-secret
data:
  password: cGFzc3dvcmQ= # base64 encoded "password"

Заключение

Теперь у вас есть работающая среда с внешним доступом, включающая веб-сервер и базу данных PostgreSQL. Этот пример демонстрирует основные шаги для развертывания приложений в Kubernetes или K3s. В зависимости от ваших требований, вы можете расширить и настроить эту среду, добавив больше реплик, используя различные базы данных и технологии для веб-серверов.