Featured image of post Kubernetes in Docker

Kubernetes in Docker

Максимально стандартный Kubernetes для обучения и прототипирования

Введение

Частенько бывает, что нужен Kubernetes под рукой для быстрого запуска чего-то.

  1. Отладить самописный Helm чарт
  2. Спросить что-то у kubectl explain
  3. Проверить какие-то настройки

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

  1. Minikube - один из старейших, так сказать. Столкнулись с тем, что стандартная инсталяция kube-prometheus-stack на нём просто не завелась, а на следующем - с ходу.
  2. k3s - один из трёх движков от Rancher. Отличная вещь, использовал и использую на проде небольших проектов. Так же, у меня два личных кластера именно на k3s, но он тоже не ванильный, всё собрано в один бинарь. Это и хорошо, и плохо. Очень легковесный и легко устанавливается, но нарвался на то, что он ломал мне Wireguard VPN своими правилами IPTables. Пришлось поменять Wireguard FwMark на 0x8000 и всё заработало.
  3. rke - ещё один из трёх движков. Первый из движков от Rancher. Очень классный, а особенно тем, что под него есть Terraform Module - кайф. Уже более похож на ванильную инсталяцию.
  4. rke2 - rke + k3s. Тут всё собрано в один бинарь, но apiserver, scheduler etc. всё ещё видны как отдельные поды. Пробовал его, жаль, что нет поддержки из Terraform как у rke. Не понравился, на практике оказался менее стабильным чем k3s, или у меня просто руки кривые.
  5. Microk8s - от Canonical, не пробовал.
  6. k0s - то же самое, как по мне, что k3s, только сообщество меньше и документация хуже, а так - хорош.
  7. kind - гвоздь программы сегодня. Про него поподробнее.

kind

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

  1. Есть возможность подкинуть конфиг
  2. Создаёт Kubernetes в Docker
  3. Можно создать больше одного узла!
  4. Под коробкой использует ванильный kubeadm!
  5. Все конфиги, пути и форматы - стандартный kubeadm!
  6. Он не лезет в iptables на хосте

Из минусов.

  1. Control-plane ест в состоянии простоя 900 MiB RAM с ходу
  2. Нужно выбрасывать порты с узлов на хост

Вот пример конфига kind

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraMounts:
  - hostPath: /home/bzm/projects/kind/
    containerPath: /host
  kubeadmConfigPatches:
  - |
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        seccomp-default: "true"
    apiServer:
      extraArgs:
        enable-admission-plugins: NodeRestriction    
- role: worker
  extraPortMappings:
  - containerPort: 80
    hostPort: 80
    listenAddress: "127.0.0.1"
  - containerPort: 443
    hostPort: 443
    listenAddress: "127.0.0.1"

То есть, можно на одном компьютере, поднять кучу узлов и всё в контейнерах. Конфиги и настройки все - как в официальной документации. Нужно попробовать какие-то ключи к api-server - пожалуйста, нужно отточить что-то по безопасности - легко. Мне очень понравился.

Licensed under Apache License, Version 2.0
Обновлено Dec 01, 2023 14:46 +0200
All rights reserved
Создано при помощи Hugo
Тема Stack, дизайн Jimmy