Ранее уже писал статью о поднятии 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

Комментарии (0)