Kubernetes на отдельной машине
Разработчики не всегда имеют доступ к среде для тестирования новых возможностей и проверки концепций. Но они могут для этой цели развернуть 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, ваше развертывание можно считать завершенным.