Введение
Ранее уже писал статью о поднятии 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-мя ГБ оперативной памяти
su awx
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Экспортируем переменную окружения с именем будущего NAMESPACE
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 (kubectl apply -f … необходимо применить сразу же после запуска сборки)
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 42374:80 > /dev/null &Переменные окружения
Если Вы планируете использовать ldaps и GitLab с само подписанным сертификатом, то для этого необходимо добавить переменные окружения в образах awx-web и awx-ee, для этого создайте web.yml с следующем содержимым (данный манифест необходимо применить после того как все поды будут в статусе (кроме awx-migration) running)
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: awx
namespace: awx
spec:
web_extra_env: |
- name: LDAPTLS_REQCERT
value: "never"
ee_extra_env: |
- name: GIT_SSL_NOVERIFY
value: "true" Применим данный манифест
kubectl apply -f web.ymlПосле данных манипуляций может пропасть проброс портов
Настройка Nginx
Соединения будут приниматься на loopback по порту 42374, для "редиректа" используем 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:42374;
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 не имеет собственного юнита для автозапуска, то ничего не мешает его создать. Создадим 3-ри юнита по следующему пути /etc/systemd/system/awx.service, /etc/systemd/system/minikube.service, /etc/systemd/system/port.service. Юнит awx.service будет запускать юнит minikube.service который инициализирует запуск minikube под пользователем awx, по завершению запуска minikube.service будет инициализирован запуск юнита posrt.service который произведёт проброс портов.
awx.service
[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=simple
RemainAfterExit=yes
WorkingDirectory=/home/awx
ExecStart=/usr/bin/systemctl start minikube.service
ExecStop=/usr/bin/systemctl stop minikube.service
ExecStartPost=/usr/bin/systemctl start port.service
User=root
Group=root
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.targetminikube.service
[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=simple
RemainAfterExit=yes
WorkingDirectory=/home/awx
ExecStart=/usr/local/bin/minikube start --driver=docker
ExecStop=/usr/local/bin/minikube stop
User=awx
Group=awx
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.targetport.service
[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=simple
RemainAfterExit=yes
WorkingDirectory=/home/awx
ExecStart=kubectl -n awx port-forward svc/awx-service --address 127.0.0.1 42374:80
User=awx
Group=awx
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.targetПеречитаем юниты и активируем юнит awx
sudo systemctl daemon-reload
sudo systemctl enable --now awxВ дальнейшем управление (остановка, запуск) AWX будет производиться путём запуска/остановки юнита awx.service
sudo systemctl start awx
sudo systemctl stop awxЗаключение
Данный способ отличная замена использования develop версии AWX
