Kubernetes на отдельной машине
О технологиях

Kubernetes на отдельной машине

3229
6 минут

Разработчики не всегда имеют доступ к среде для тестирования новых возможностей и проверки концепций. Но они могут для этой цели развернуть Kubernetes на отдельной машине.

Можно минимизировать усилия и использовать новую функцию microk8s, которая позволяет очень быстро создать кластер k8s на ноутбуке (и это определенно стоит попробовать сделать, посмотрите здесь, как именно — запуск кластера занимает всего несколько минут). Но если вы хотите глубже вникнуть в процесс, ознакомьтесь с развёртыванием Charmed Distribution of Kubernetes на контейнерах LXD, установленных на отдельной bare-metal машине.

Примечание: это адаптация поста с новой LXD версией 3.18 и Ubuntu 18.04 Bionic Beaver.

Вам понадобится машина, оснащенная как минимум 4 ядрами процессора, 16 Гб оперативной памяти, 100 Гб свободного дискового пространства, желательно SSD и одной сетевой картой. В тесте используется MAAS для развертывания Ubuntu 18.04.3 LTS на машине. Настроен мост Linux (br0), к нему подключена одна сетевая карта (eno1). Ниже конфигурация /etc/netplan/config.yaml машины.


$ cat /etc/netplan/config.yaml
network:
    bridges:
        br0:
            addresses:
            - 172.16.7.50/24
            gateway4: 172.16.7.1
            interfaces:
            - eno1
            macaddress: 2c:60:0c:f9:3c:23
            mtu: 1500
            nameservers:
                addresses:
                - 10.246.96.1
                search:
                - maas
            parameters:
                forward-delay: 15
                stp: false
    ethernets:
        eno1:
            match:
                macaddress: 2c:60:0c:f9:3c:23
            mtu: 1500
            set-name: eno1

Первый шаг — это SSH в нашу машину и загрузка различных компонентов, необходимых для выполнения задачи. Juju и LXD теперь доступны со снепами, что является рекомендуемым способом развертывания этих инструментов.


$ sudo apt update
$ sudo apt dist-upgrade -y
$ sudo snap install juju --classic
$ sudo snap install lxd

Мы используем Juju версии 2.6.9-bionic-amd64 и LXD версии 3.18. Следующий шаг — запуск LXD init для его настройки.


$ /snap/bin/lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want ot configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (btrfs, ceph, dir, lvm, zfs) [default=zfs]: dir
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]: no
Would you like to configure LXD to use an existing bridge or host interface? (yes/no) [default=no]: yes
Name of the existing bridge or host interface: br0
Would you like LXD to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]:
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:

Теперь мы можем загрузить наш локальный контроллер Juju с помощью LXD. Juju — это инструмент, с помощью которого мы развернем среду Kubernetes.


$ juju bootstrap lxd lxd-local

Если эта команда выполнена успешно, должно появиться сообщение о том, что контроллер был запущен на localhost/localhost, а также о том, что была добавлена начальная модель «default». Стоит дважды проверить результат, посмотрев на вывод двух следующих команд.


$ juju controllers
Use --refresh option with this command to see the latest information.

Controller  Model    User   Access     Cloud/Region         Models  Nodes    HA  Version
lxd-local*  default  admin  superuser  localhost/localhost       3      1  none  2.6.9 

$ juju models
Controller: lxd-local

Model       Cloud/Region         Type  Status     Machines  Cores  Units  Access  Last connection
controller  localhost/localhost  lxd   available         1      -  -      admin   just now
default*    localhost/localhost  lxd   available         0      -  -      admin   20 hours ago

Можно увидеть, что созданный контроллер указан в списке контейнеров lxc.


$ lxc list

Теперь нужно создать новую модель развертывания Kubernetes:


$ juju add-model kubernetes
$ juju models
Controller: lxd-local

Model       Cloud/Region         Type  Status     Machines  Cores  Units  Access  Last connection
controller  localhost/localhost  lxd   available         1      -  -      admin   just now
default    localhost/localhost  lxd   available          0      -  -      admin   20 hours ago
kubernetes*  localhost/localhost  lxd   available        0      -  -   admin   59 minutes ago

Для машин Kubernetes необходимо создать LXD-профиль, который позволит использовать контейнеры привилегий машин и добавить к ним ключ SSH. Создайте новый YAML-файл juju-lxd-profile.yaml со следующей конфигурацией:


name: juju-kubernetes
config:
  user.user-data: |
    #cloud-config
    ssh_authorized_keys:
      - @@SSHPUB@@
  boot.autostart: "true"
  linux.kernel_modules: ip_tables,ip6_tables,netlink_diag,nf_nat,overlay
  raw.lxc: |
    lxc.apparmor.profile=unconfined
    lxc.mount.auto=proc:rw sys:rw
    lxc.cap.drop=
  security.nesting: "true"
  security.privileged: "true"
description: ""
devices:
  aadisable:
    path: /sys/module/nf_conntrack/parameters/hashsize
    source: /dev/null
    type: disk
  aadisable1:
    path: /sys/module/apparmor/parameters/enabled
    source: /dev/null
    type: disk

Убедитесь, что вы сгенерировали пару SSH-ключей для пользователя «ubuntu», прежде чем выполнить следующий однослойный запуск:

$ sed -ri "s'@@SSHPUB@@'$(cat ~/.ssh/id_rsa.pub)'" juju-lxd-profile.yaml

Затем обновите профиль juju-kubernetes LXD:

$ lxc profile edit "juju-kubernetes" < juju-lxd-profile.yaml

Теперь можно приступить к развертыванию Кубернетес!

$ juju deploy charmed-kubernetes

В итоге собрана и развернута версия charmed-kubernetes-798. Вы можете следить за состоянием каждого компонента по мере его установки. Когда все статусы будут зелеными, active и idle, ваше развертывание можно считать завершенным.

20 ноября 2023
Что такое Kubernetes? Знакомимся с дико популярной платформой контейнерной оркестрации
С появлением микросервисной архитектуры и технологии контейнеризации разработчики и администраторы стали совсем по-другому тестировать и развертывать современное ПО.
1 минута
16142
19 октября 2023
Контейнеры: технологии и процессы глазами разработчика

В выпуске#9 видеоподкаста «Откровенно об ИТ-инфраструктуре» поговорили о роли контейнеров в разработке. Приглашенные эксперты обсудили специфику использования Kubernetes и сокращение time-to-market в контексте контейнеризации.

В гостях Михаил Гудов, Orion soft, и Василий Колосов, Smartex.
1 минута
788
19 июня 2023
Семь трендов на рынке облачных услуг в 2023 году
До 2022 года на рынке облаков в России главенствовали мировые тренды, но сейчас наша страна пошла своим путем. О том, для чего сейчас компании используют облачные технологии и как меняется рынок, рассказал директор по развитию КРОК Облачные сервисы Сергей Зинкевич.
1 минута
2207
16 июня 2023
Рулевой в океане контейнеров
Выпуск#3 видеоподкаста «Откровенно об ИТ-инфраструктуре» посвящен Kubernetes и профессиональным платформам оркестрации контейнеров. Обсудили, как сегодня складывается ситуация на российском рынке контейнерных платформ, что востребовано и почему, особенности и перспективы работы с Kubernetes.

В гостях Александр Баталов, Генеральный директор Флант
1 минута
1517
29 марта 2023
Сетевые балансировщики нагрузки и другие обновления Облака КРОК

Мы рады вам представить новый сервис Облака КРОК для распределения трафика между экземплярами – Балансировщики нагрузки. Кроме того, мы автоматизировали обновление сертификатов Kubernetes и добавили возможность удаления рабочих узлов из кластера Kubernetes.

2 минуты
920
scrollup