Ранее уже писал статью о поднятии AWX-Ansible но тот способ уже не работает так как в DEV образе слишком много изменений и с стабильной версией повторно не удалось развернуть (хотя полностью DEV версия прекрасно работает).
Добавление необходимых репозиториев и установка пакетов
Поставим необходимые пакеты для установки репозитория docker, а также пакеты kubectl и nginx
sudo apt update
sudo apt -y install ca-certificates curl gnupg kubectl git nginx make
Далее скачаем ключ, пропишем репозиторий docker и установим непосредственно сам docker
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt -y install docker-ce docker-ce-rootless-extras
sudo systemctl enable docker
Настройка GRUB и создание сервисной учётной записи
Для корректной работы minukube необходимо внести изменения в загрузчик, а также создать учётную запись (добавив её в группу docker) из под которой будет работать Minikube
sudo echo 'GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"' >> /etc/default/grub
sudo update-grub
sudo useradd -m -s /bin/bash awx
sudo usermod -aG docker awx
sudo reboot
После применения настроек GRUB обязательно необходимо перезагрузить систему
Minukube и AWX-Operator
Закачаем minikube и установим его
curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
Запустим minikube с ingress контролером из под учётной записи awx (дальнейшие действия будут производиться из под этой учётной записью) с 2-мя ядрами процессора и 4-мя ГБ оперативной памяти
minikube start --vm-driver=docker --addons=ingress --cpus=2 --install-addons=true --memory=4g
Список созданных под можно посмотреть командой
kubectl get pods -A
"Склонируем" AWX-Operator в домашний каталог пользователя awx и перейдём на последнею ветку (на момент написания 2.19.1)
cd ~
git clone https://github.com/ansible/awx-operator.git
cd awx-operator
git checkout 2.19.1
Экспортируем переменную окружения с именем будущего NAMSPACE
export NAMESPACE=awx
Далее необходимо настроить данное пространство имён (тип сервиса nodeport), а также создать secret для подключения к внешней базе данных (если внешняя база данных не нужна то secret можно не создавать) . Создайте файл с именем awx.yml и добавьте в него следующие строки (если внешняя база данных не нужна то строка postgres_configuration_secret: awx-postgres-configuration должна отсутствовать)
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: awx
namespace: awx
spec:
service_type: nodeport
ingress_type: none
postgres_configuration_secret: awx-postgres-configuration
Создайте файл secret.yml для использования внешней базы данных указав необходимые ip адрес, имя базы данных, имя пользователя, порт для подключения и пароль
---
apiVersion: v1
kind: Secret
metadata:
name: 'awx-postgres-configuration'
namespace: 'awx'
stringData:
host: '192.168.19.3'
port: '5432'
database: 'awx'
username: 'awx'
password: '12345678'
sslmode: prefer
target_session_attrs: read-write
type: unmanaged
Запустим сборку и применим настройки namespace и применим secret
make deploy
kubectl apply -f awx.yml && kubectl apply -f secret.yml
Процесс не очень быстрый, но и не очень долгий
Выполнение playbook можно наблюдать в реальном времени с помощью команды
kubectl logs -f --namespace awx deployments/awx-operator-controller-manager -c awx-manager
Если по каким то причинам Вам необходимо всё удалить и запустить сборку заново то можно воспользоваться командой
minikube delete --all
Настроим "редирект" портов (лучше подождать пока закончиться разворачивание всех сервисов)
kubectl -n awx port-forward svc/awx-service --address 127.0.0.1 8080:80 > /dev/null &
Настройка Nginx
Соединения будут приниматься на loopback по порту 8080, для "редиректа" используем nginx. Сгенерируем сертификаты
sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/nginx.key -out /etc/ssl/certs/nginx.crt
Добавим конфигурационный файл nginx в файл /etc/nginx/sites-available/awx с следующим содержимым (естественно должна быть dns запись для awx.example.com)
server {
listen 80;
server_name awx.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name awx.example.com;
ssl_certificate /etc/ssl/certs/nginx.crt;
ssl_certificate_key /etc/ssl/private/nginx.key;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Security headers
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options SAMEORIGIN;
add_header X-XSS-Protection "1; mode=block";
}
Создадим симлинк
sudo ln -s /etc/nginx/sites-available/awx /etc/nginx/sites-enabled/awx
Перезапустим nginx (или активируем если сервис ещё не активен)
sudo systemctl enable --now nginx
sudo systemctl restart nginx
Если всё сделано правильно то вэб интерфейс должен отобразиться по адресу
https://awx.example.com
Если не заработало то пробуйте перезапустить minikube
minikube stop
minikube start
После ручной перезагрузки minikube необходимо вновь выполнить команду редиректа портов
Перейдя под учётную запись awx можно узнать пароль (логин admin) от вэб интерфейса командой
su awx
kubectl get secret awx-admin-password -o jsonpath="{ .data.password}" --namespace=awx| base64 --decode
Создание юнита systemd
Так как minikube не имеет собственного юнита для автозапуска, то ничего не мешает его создать. Создадим юнит по следующему пути /etc/systemd/system/awx.service. Данный юнит будет запускаться с задержкой в 30 секунд для того что бы ОС успела полностью загрузиться, если ОС грузиться долго то этот параметр (ExecStartPre=/bin/sleep 30) следует увеличить.
[Unit]
Description=minikube
After=network-online.target firewalld.service containerd.service docker.service
Wants=network-online.target docker.service
Requires=docker.socket containerd.service docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/home/awx
ExecStartPre=/bin/sleep 30
ExecStart=/usr/local/bin/minikube start --driver=docker
ExecStop=/usr/local/bin/minikube stop
User=awx
Group=awx
[Install]
WantedBy=multi-user.target
Перечитаем юниты и активируем юнит awx
sudo systemctl daemon-reload
sudo systemctl enable awx
После перезагрузки системы "редирект" портов не будет работать. Для того что бы исправить данный недостаток добавим в .bashrc пользователя awx следующею строку
echo '/bin/sleep 120 && kubectl -n awx port-forward svc/awx-service --address 127.0.0.1 8080:80 > /dev/null &' >> /home/awx/.bashrc
Задержку в две минуты необходимо увеличить в том случаи если загрузка системы занимает длительное время.
Заключение
Данный способ отличная замена использования develop версии AWX