Запуск Tanzu Community Edition в кластере VMware vSphere

Недавно вышла в свет редакция VMware Tanzu под названием Community Edition, пройти мимо было просто невозможно.

Под катом процедура инсталляции Tanzu Community Edition от первичной настройки до запуска первого контейнера в среде VMware vSphere 7.

Запуск первого кластера для рабочих нагрузок состоит из четырех этапов:

  1. Подготовка рабочей машины и установка Tanzu Community Edition;
  2. Настройка системы виртуализации VMware vSphere;
  3. Инсталляция Management кластера;
  4. Инсталляция Workload кластера.

Первый этап. Подготовка рабочей машины и установка Tanzu Community Edition:

В моем случае я выполняю настройки и инсталляцию из-под Ubuntu Server 20.04, хотя установку TCE можно выполнить как под Linux, так под Windows и Mac.

В чистой системе я выполняю все операции под пользователем tce, созданным на этапе инсталляции.

Выполним обновление системы:

$ sudo apt-get update
$ sudo apt-get upgrade

Теперь установим docker и добавим в автозагрузку:

$ sudo apt-get install docker.io
$ sudo systemctl enable docker
$ sudo systemctl enable containerd

Добавим пользователя, от имени которого мы работаем, в группу docker для получения возможности запуска контейнеров без использования sudo:

$ sudo usermod -aG docker tce

Перезагрузка сервера после настроек и обновления:

$ sudo reboot

Если к этому шагу все выполнено корректно, пользователь должен без каких-либо проблем запустить контейнер в Docker:

$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

Теперь скачаем установочные файлы Tanzu Community Edition:

$ wget https://github.com/vmware-tanzu/community-edition/releases/download/v0.9.1/tce-linux-amd64-v0.9.1.tar.gz

Разархивируем, затем запустим инсталляцию:

$ tar zxf ./tce-linux-amd64-v0.9.1.tar.gz
$ cd ./tce-linux-amd64-v0.9.1/
$ ./install.sh

По окончанию инсталляции будет выведено сообщение "Installation complete!". Однако, следует пролистать лог установки вверх, там могли быть ошибки, несмотря на то, что на первый взгляд кажется, что установка выполнена корректно. В случае, если это так, ошибки следует устранить и запустить процедуру инсталляции заново.

После установки TCE, в нашем распоряжении появляется новая команда tanzu:

$ tanzu version
version: v0.2.1
buildDate: 2021-09-29
sha: ceaa474

Последним шагом на этом этапе скачаем kubectl:

$ curl -LO https://dl.k8s.io/release/v1.20.1/bin/linux/amd64/kubectl
$ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

На этом этап установки Tanzu Community Edition закончен.

Этап 2. Предварительная настройка VMware vSphere

Общие требования и рекомендации по использованию vSphere в качестве инфраструктурного провайдера:

  1. Запустить Tanzu Community Edition можно на vSphere 7, vSphere 6.7u3, VMware Cloud on AWS, либо на Azure VMware Solutions.
  2. В случае с классической vSphere должен быть доступен хост, либо кластер, в котором будут создаваться виртуальные машины Tanzu. В случае использования кластера, следует включить DRS, а также использовать минимум два хоста.
  3. Опционально следует создать пул ресурсов под кластер Tanzu;
  4. Также следует создать каталог, в котором будут размещены виртуальные машины;
  5. Хранилище в кластере должно обладать достаточным объемом емкости.

Требования к сети:

  1. Необходима сеть и DHCP сервер, который будет выделять адреса виртуальным машинам Tanzu;
  2. Необходимо выделить несколько статичных IP адресов из той же сети, что используется для DHCP (эти адреса раздаваться, конечно же не должны и должны быть исключены из пула). Адреса используются для Kubernetes Control Plane;
  3. С машины, на которой мы инсталлировали TCE, должен быть доступ по порту 6443 в сеть с кластерами Kubernetes;
  4. На всех хостах ESXi должна работать служба NTP.

В свою очередь я создал папку TGK на закладке VMs and Templates:

А также группу портов в Distributed Switch:

В данной портгруппе функционирует DHCP сервер, а также имеется ряд не задействованных IP адресов, не входящих в пул DHCP.

Теперь необходимо подготовить шаблон, из которого Tanzu будет создавать виртуальные машины для своих кластеров Kubernetes.

Хорошая новость: вручную готовить ничего не нужно, у VMware уже есть готовые образы. Для их загрузки необходима учетная запись на VMware Customer Connect.

Переходим на страницу Tanzu Community Edition и загружаем образ. Для vSphere доступны образы на базы Photon OS а так же на базе Ubuntu:

Я загрузил образ Photon OS 3 с пакетами Kubernetes 1.21.2.

Далее переходим в интерфейс vSphere и разворачиваем виртуальную машину из скачанного образа с помощью меню Deploy OVF Template:

Процесс создания VM из образа достаточно простой и не требует описания. Дожидаемся окончания:

И конвертируем виртуальную машину в шаблон:

Как результат, мы будем иметь готовый шаблон для дальнейшего создания виртуальных машин Tanzu на базе Photon OS:

Этап третий – настройка Management кластера Tanzu

Переходим в машину, на которой ранее были установлены пакеты Tanzu Community Edition.

Сперва сгенерируем пару SSH ключей:

$ ssh-keygen

Выведем содержимое публичного SSH ключа на экран, он пригодится в дальнейшем:

$ cat /home/tce/.ssh/id_rsa.pub

Запуск процедуры развертывания Management кластера Tanzu происходит в интерактивном режиме с помощью команды tanzu management-cluster create. Tanzu запускает сервер для конфигурации кластера, доступный на локальном адресе 127.0.0.1 по порту 8080. Доступ осуществляется через веб-браузер, установленный на этой же машине.

В моем случае на сервере, где установлены компоненты TCE, графики нет, так же нет возможности запустить браузер. На этот случай у нас имеются ключ –bind, который позволяет указать IP, на котором будет доступен веб-сервер с настройками TCE.

Откроем порт 8080 для внешних подключений:

$ sudo ufw allow 8080

И запустим процедуру создания Management кластера:

$ tanzu management-cluster create --ui --bind 192.168.100.101:8080 --browser none

Если все настройки были выполнены верно, сервер будет запущен:

Validating the pre-requisites...
Serving kickstart UI at http://192.168.100.101:8080

Теперь открываем веб-браузер и переходим по адресу, заданному выше:

Здесь мы видим всех инфраструктурных провайдеров, которых можно использовать для запуска кластеров Tanzu. Выбираем VMware vSphere и клик по Deploy:

В первую очередь указываем адрес vCenter Server, логин и пароль для доступа, затем нажимаем Connect.

После успешного подключения, появляется возможность выбрать нужный Datacenter, а также указать публичный ключ SSH, сгенерированный нами ранее. Указываем данные и продолжаем нажатием Next.

Следующим шагом выбираем тип инсталляции. Development, или Production. Разница в количестве виртуальных машин, которые будут задействованы под Control Plane – одна или три:

И указываем Instance Type, который зависит от размера инсталляции:

Здесь же ниже указываем параметры Management кластера:

Management Cluster Name – Имя кластера, соответственно;

Control Plane Endpoint Provider – Если имеется NSX, можно использовать его. Иначе используется Kube-vip;

Control Plane Endpoint – Адрес, по которому должен быть доступен Control Plane, т.е. Kubernetes API Server. Данный адрес должен быть исключен из DHCP пула, как говорилось ранее;

Worker Node Instance Type – Параметры Worker нод в будущем кластере.

Нажимаем Next и переходим к следующему шагу настройки – NSX Advanced Load Balancer Settings:

В моей инсталляции отсутствует NSX, данный шаг я пропускаю.

Следующим шагом мы можем указать какие-либо метаданные для будущего кластера. Данный шаг я тоже пропускаю:

Пятым шагом указываем каталог, в котором будут размещаться виртуальные машины, также указываем кластер и хранилище, где они будут размещены:

Далее мы выбираем сеть, к которой будут подключены виртуальные машины. Я указываю ранее созданную портгруппу:

Также мы можем задать сети для Cluster Services и Cluster POD. Я оставляю значения по умолчанию.

При необходимости имеется возможность указать прокси сервер для доступа в интернет. Следует корректно указать исключения для прокси, обязательно добавив адреса vSphere, а также сети, задействованные под Tanzu.

В следующем шаге отключаю необходимость в использовании Identity Manager:

Шаг 8 – OS Image. Здесь выбираем шаблон, который был загружен ранее:

Шаг с настройкой Tanzu Mission Control я пропускаю:

После нажатия Next, система предложит сверить настройки и применить их. Интересный момент: Настройки сохраняются в файле и применить их можно командой cli:

В указанной директории лежит yaml файл, который содержит все заданные ранее настройки. В случае чего, файл можно отредактировать и создать кластер с другими настройками.

Клик по Deploy Management Cluster запустит процедуру создания:

В это время на машине с TCE появится «временный кластер». В дальнейшем он будет удален, после того, как будет развернут Management:

$ docker ps
CONTAINER ID   IMAGE                                                         COMMAND                  CREATED          STATUS          PORTS                       NAMES
79afb200bd9d   projects.registry.vmware.com/tkg/kind/node:v1.21.2_vmware.1   "/usr/local/bin/entr…"   18 minutes ago   Up 17 minutes   127.0.0.1:46871->6443/tcp   tkg-kind-c5j5iuvrpfeb0ovjok60-control-plane

Далее начинается создание Management кластера. В инфраструктуре появится ряд VM:

Через некоторое время настройка Management кластера заканчивается:

Management cluster created!
You can now create your first workload cluster by running the following:
  tanzu cluster create [name] -f [file]

Проверить состояние кластера можно с помощью команды tanzu management-cluster get:

$ tanzu management-cluster get
  NAME      NAMESPACE   STATUS   CONTROLPLANE  WORKERS  KUBERNETES        ROLES
  tkg-mgmt  tkg-system  running  3/3           1/1      v1.21.2+vmware.1  management


Details:

NAME                                                         READY  SEVERITY  REASON  SINCE  MESSAGE
/tkg-mgmt                                                    True                     10m
├─ClusterInfrastructure - VSphereCluster/tkg-mgmt            True                     10m
├─ControlPlane - KubeadmControlPlane/tkg-mgmt-control-plane  True                     10m
│ └─3 Machines...                                            True                     10m    See tkg-mgmt-control-plane-92srg, tkg-mgmt-control-plane-sd9f7, ...
└─Workers
  └─MachineDeployment/tkg-mgmt-md-0
    └─Machine/tkg-mgmt-md-0-559c48d65d-tdtkg                 True                     8m24s


Providers:

  NAMESPACE                          NAME                    TYPE                    PROVIDERNAME  VERSION  WATCHNAMESPACE
  capi-kubeadm-bootstrap-system      bootstrap-kubeadm       BootstrapProvider       kubeadm       v0.3.23
  capi-kubeadm-control-plane-system  control-plane-kubeadm   ControlPlaneProvider    kubeadm       v0.3.23
  capi-system                        cluster-api             CoreProvider            cluster-api   v0.3.23
  capv-system                        infrastructure-vsphere  InfrastructureProvider  vsphere       v0.7.10

Этап четвертый. Создание Workload кластера

Создание кластера для рабочих нагрузок производится на базе уже имеющегося конфигурационного файла для Mgmt кластера, который был сгенерирован ранее.

Скопируем существующий файл конфигурации под новым именем:

$ cp ~/.config/tanzu/tkg/clusterconfigs/d094a7ihxp.yaml ~/.config/tanzu/tkg/clusterconfigs/vmik-workload.yaml

В данном файле важно отредактировать следующие параметры – название кластера, а также адрес Control Plane:

CLUSTER_NAME: vmik-workloads
VSPHERE_CONTROL_PLANE_ENDPOINT: 192.168.100.103

Опционально можно указать параметры Worker ноды, а также их количество:

VSPHERE_WORKER_DISK_GIB: "20"
VSPHERE_WORKER_MEM_MIB: "4096"
VSPHERE_WORKER_NUM_CPUS: "2"
WORKER_MACHINE_COUNT: "3"

Запускаем создание кластера

$ tanzu cluster create --file ~/.config/tanzu/tkg/clusterconfigs/vmik-workload.yaml
Creating workload cluster 'vmik-workloads'...
Waiting for cluster to be initialized...

Если посмотреть на состояние кластера в этот момент, можно увидеть текущие операции:

$ tanzu cluster get vmik-workloads
  NAME            NAMESPACE  STATUS    CONTROLPLANE  WORKERS  KUBERNETES        ROLES
  vmik-workloads  default    creating  1/3           0/3      v1.21.2+vmware.1  <none>
ℹ

Details:

NAME                                                               READY  SEVERITY  REASON     SINCE  MESSAGE
/vmik-workloads                                                    False  Warning   ScalingUp  71s    Scaling up control plane to 3 replicas (actual 2)
├─ClusterInfrastructure - VSphereCluster/vmik-workloads            True                        9m41s
├─ControlPlane - KubeadmControlPlane/vmik-workloads-control-plane  False  Warning   ScalingUp  71s    Scaling up control plane to 3 replicas (actual 2)
│ ├─Machine/vmik-workloads-control-plane-29r88                     False  Info      Cloning    10s    1 of 2 completed
│ └─Machine/vmik-workloads-control-plane-qzlvk                     True                        7m10s
└─Workers
  └─MachineDeployment/vmik-workloads-md-0
    └─3 Machines...                                                True                        60s    See vmik-workloads-md-0-7f9c454f44-7b9qx, vmik-workloads-md-0-7f9c454f44-8nj8s, ...

А вот и виртуальные машины нового кластера:

Через некоторое время мы получаем запущенный Workload кластер:

Теперь получим доступ к управлению данным кластером привычной утилитой kubectl

Запросим конфигурационный файл для подключения к кластеру через tanzu:

$ tanzu cluster kubeconfig get vmik-workloads --admin      
Credentials of cluster 'vmik-workloads' have been saved
You can now access the cluster by running 'kubectl config use-context vmik-workloads-admin@vmik-workloads'

И сообщим kubectl  какой конфигурационный файл использовать:

$ kubectl config use-context vmik-workloads-admin@vmik-workloads
Switched to context "vmik-workloads-admin@vmik-workloads"

Проверим, как выглядит наш кластер:

$ kubectl get nodes
NAME                                   STATUS   ROLES                  AGE    VERSION
vmik-workloads-control-plane-29r88     Ready    control-plane,master   110m   v1.21.2+vmware.1
vmik-workloads-control-plane-p9qjq     Ready    control-plane,master   73m    v1.21.2+vmware.1
vmik-workloads-control-plane-qzlvk     Ready    control-plane,master   119m   v1.21.2+vmware.1
vmik-workloads-md-0-7f9c454f44-7b9qx   Ready    <none>                 113m   v1.21.2+vmware.1
vmik-workloads-md-0-7f9c454f44-8nj8s   Ready    <none>                 113m   v1.21.2+vmware.1
vmik-workloads-md-0-7f9c454f44-qtdw5   Ready    <none>                 113m   v1.21.2+vmware.1

Как и ожидалось, мы имеет 3 ноды под Control Plane и 3 Worker ноды.

Запустим какой-нибудь контейнер:

$ kubectl run tanzu-nginx --image=nginx:latest
pod/tanzu-nginx created

Контейнер работает:

$ kubectl get pods
NAME          READY   STATUS    RESTARTS   AGE
tanzu-nginx   1/1     Running   0          27s

Включаем перенаправление портов в контейнер:

$ kubectl port-forward --address 0.0.0.0 tanzu-nginx 8080:80
Forwarding from 0.0.0.0:8080 -> 80

Теперь заходим браузером на порт 8080 машины с TCE, где мы запустили kubectl, и смотрим на результат:

Установка Tanzu Community Edition полностью завершена.

Важные моменты в процессе инсталляции

Пользователь, от имени которого запускается утилита tanzu должен быть включен в группу docker, иначе могут возникнуть проблемы с развертыванием кластеров Kubernetes на самом начальном этапе.

На всех машинах должен быть доступ в интернет, либо необходимо использовать прокси.

При использовании прокси, следует корректно указывать исключения для адресов, где прокси не должен применяться.

В DHCP пуле должно быть достаточное количество свободных адресов. Отсутствие свободных адресов может сказаться на развертывании кластеров Tanzu.

Если на хостах не хватает ресурсов для запуска новых виртуальных машин, процедура создания кластера может быть прервана.

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

Leave a Reply

Your email address will not be published. Required fields are marked *