Недавно вышла в свет редакция VMware Tanzu под названием Community Edition, пройти мимо было просто невозможно.
Под катом процедура инсталляции Tanzu Community Edition от первичной настройки до запуска первого контейнера в среде VMware vSphere 7.
Запуск первого кластера для рабочих нагрузок состоит из четырех этапов:
- Подготовка рабочей машины и установка Tanzu Community Edition;
- Настройка системы виртуализации VMware vSphere;
- Инсталляция Management кластера;
- Инсталляция 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 в качестве инфраструктурного провайдера:
- Запустить Tanzu Community Edition можно на vSphere 7, vSphere 6.7u3, VMware Cloud on AWS, либо на Azure VMware Solutions.
- В случае с классической vSphere должен быть доступен хост, либо кластер, в котором будут создаваться виртуальные машины Tanzu. В случае использования кластера, следует включить DRS, а также использовать минимум два хоста.
- Опционально следует создать пул ресурсов под кластер Tanzu;
- Также следует создать каталог, в котором будут размещены виртуальные машины;
- Хранилище в кластере должно обладать достаточным объемом свободного пространства.
Требования к сети:
- Необходима сеть и DHCP сервер, который будет выделять адреса виртуальным машинам Tanzu;
- Необходимо выделить несколько статичных IP адресов из той же сети, что используется для DHCP (эти адреса раздаваться, конечно же не должны и должны быть исключены из пула). Адреса используются для Kubernetes Control Plane;
- С машины, на которой мы инсталлировали TCE, должен быть доступ по порту 6443 в сеть с кластерами Kubernetes;
- На всех хостах 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 ключ следует копировать внимательно, иначе на этапе развертывания кластеров могут возникнуть проблемы.