Featured image of post Установка Ansible AWX в K3S

Установка Ansible AWX в K3S

Развертывание веб-интерфейса для оркестрации Ansible

Мы рассмотрим процесс установки Ansible AWX, веб-интерфейса с открытым исходным кодом для управления проектами Ansible, с помощью однонодового K3S и awx-operator, на базе Ubuntu 22.04.

Ansible AWX — это мощный веб-интерфейс с открытым исходным кодом для управления проектами Ansible, плейбуками, списками инвентори и планированием заданий по расписанию. С Ansible AWX можно эффективно и наглядно управлять инфраструктурой, организовывать задачи и оптимизировать процессы DevOps.

Версия ПО
Client Version v1.30.5+k3s1
Kustomize Version v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version v1.30.5+k3s1
Оператор AWX 2.9.1
PostgreSQL 15

Минимальные требования:

  • CPU: 2
  • RAM: 4 Gb
  • SSD: 50 Gb
  • OS: Ubuntu 22.04

Рекомендованные:

  • CPU: 4
  • RAM: 8 Gb
  • SSD: 50 Gb
  • OS: Ubuntu 22.04

Для чистой установки потребуется не менее 20 Gb для /var/lib/rancher. Оба показателя будут увеличиваться в течение срока использования, а фактическое потребление во многом зависит от варианта использования, поэтому следует обращать внимание на потребление и при необходимости увеличивать объём. Директория /var/lib/rancher будет создана автоматически для K3S и связанных с ним данными, такими как образы контейнеров и оверлеи. Все действия можно производить как от пользователя с правами sudo, так и от root (sudo -s)

Шаг 1. Подготовка хоста

Обновить пакеты и систему

1
sudo apt update -y && sudo apt upgrade -y

Отключаем Firewall и swap

1
2
sudo ufw disable
sudo swapoff -a

Открываем файл на редактирование:

1
sudo nano /etc/fstab

Удаляем строку

1
/swap.img   none    swap   sw   0   0

Установить git, curl, jq и необходимые пакеты

1
sudo apt install git curl jq build-essential -y

Шаг 2. Установка K3S - облегченный Kubernetes

Указываем параметр --write-kubeconfig-mode 644, чтобы иметь доступ к конфигу на чтение без root привилегий

1
curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644

Кластер установится автоматически. Следующим шагом проверяем нашу установку k3s с помощью команды:

1
kubectl get nodes

Создаём пространство имен для оператора

1
2
export NAMESPACE=awx
kubectl create ns ${NAMESPACE}

Шаг 3. Установка Ansible AWX

Клонируем официальный репозиторий awx-operator к себе на локальную машину

1
sudo git clone https://github.com/ansible/awx-operator.git

Шаг 4. Конфигурирование и запуск

Изменяем текущий контекст на тот, который мы задали в переменной (awx)

1
sudo kubectl config set-context --current --namespace=$NAMESPACE

Переходим в директорию awx

1
cd awx-operator/

Сохраняем последнюю версию из релизов AWX Operator как переменную RELEASE TAG, а затем выполняем извлечение в ветку с помощью git’a

1
2
3
RELEASE_TAG=`curl -s https://api.github.com/repos/ansible/awx-operator/releases/latest | grep tag_name | cut -d '"' -f 4`
echo $RELEASE_TAG
git checkout $RELEASE_TAG

И выполняем развёртывание

1
make deploy

После чего можно наблюдать запуск подов в реальном времени командой

1
kubectl get pods -w

  • *P.S. Если хотите удалить деплой, то выполните команду
1
2
export NAMESPACE=awx
make undeploy

Через примерно 5 минут под с AWX запустится AWX-operator установлен. Далее устанавливаем веб-интерфейс

Создать файл

1
nano kustomization.yaml
1
2
3
4
5
6
7
8
9
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - github.com/ansible/awx-operator/config/default?ref=2.19.1
  - awx-demo.yml
images:
  - name: quay.io/ansible/awx-operator
    newTag: 2.19.1
namespace: awx

Применяем файл

1
kubectl apply -k .

Ожидаем развёртывания…

Просматриваем на каком порту слушает сервис ansible

1
kubectl get svc

Получаем пароль от веб-интерфейса

1
kubectl get secret awx-demo-admin-password -o jsonpath="{.data.password}" | base64 --decode ; echo

И заходим по IP:Port

1
2
Логин: admin
Пароль: из команды выше

Шаг 5. Устанавливаем Ingress-conroller и Load Balancer

Порт генерируется случайным образом и нас это не особо устраивает. Установим ingress-controller и изменим тип сервиса

Для этого деплоим конфиг ingress-nginx:

1
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.1/deploy/static/provider/baremetal/deploy.yaml

Конфигурируем файл awx-demo.yaml

1
2
3
4
5
6
7
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx-demo
spec:
  service_type: ClusterIP # Здесь замена с NodePort на ClusterIP

Удаляем старый сервис

1
kubectl delete svc awx-demo-service

И применяем новый

1
kubectl apply -f awx-demo.yml

Создаём файл ingress.yaml

1
sudo nano ingress.yaml

Добавляем содержимое:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: site-nginx-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - host: awx.domain.local # адрес нашего awx сайта
    http:
      paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: awx-demo-service # Адрес нашего нового сервиса с типом ClusterIP
              port:
                number: 80 # Прослушиваемый порт

Применяем созданный конфиг

1
kubectl apply -f ingress.yaml

Создаём файл для Load Balancer

1
sudo nano lb.yaml

Добавляем содержимое:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx-controller-loadbalancer
  namespace: ingress-nginx
spec:
  selector:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: 80
    - name: https
      port: 443
      protocol: TCP
      targetPort: 443
  type: LoadBalancer

Применяем конфиг балансировщика

1
kubectl apply -f lb.yaml

Проверяем наш ingress

1
kubectl get ing

На этом этапе имя сервера уже должно быть создано в DNS и резолвиться

При входе по IP вы получите ошибку 404

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

Информацию можно использовать в свободном доступе, с указанием ссылки на сайт
Создано при помощи Hugo
Тема Stack, дизайн Jimmy