Установка и использование Managed Service for PostgreSQL и Managed Service for Kubernetes в Yandex Cloud c помощью terra

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Установка и использование Managed Service for PostgreSQL и Managed Service for Kubernetes в Yandex Cloud c помощью terraform


В этом посте будет описана установка Managed Service for PostgreSQL и Managed Service for Kubernetes в Yandex Cloud c помощью terraform. В Kubernetes будет установлено простое приложение на flask, которая записывает данные в Managed Service for PostgreSQL. Приложение на flask описано в helm чарте и будет установлено с помощью helm. Внешний трафик из интернета будет проходить сначала Network load balancer, затем попадать в Ingress. Ingress – это ресурс для добавления правил маршрутизации трафика из внешних источников в службы в кластере kubernetes.


Всю установка и настройка добавлена в скрипт install.sh. Можно просто запустить скрипт и все установиться. В посте описывается более подробно.


Диаграмма сервисов



Необходимо чтобы были установлены следующие программы


Можно установить все перечислинные утилиты с помощью утилиты binenv, кроме Yandex.Cloud (CLI) и git.


  • yc
  • terraform
  • kubectl
  • helm
  • git

Необходимо инициализировать Yandex.Cloud и получить приватные токены


yc init

Клонируем репо


git clone https://github.com/patsevanton/app_k8s_terraform_psql_yandex_cloud.git

Установка всего стенда с помощью скрипта install.sh


Для изменения конфигурации инфстраструктуры необходимо править файлы .tf. Запускаем скрипт install.sh


./install.sh

Рассмотрим что делает скрипт install.sh. Прохождение всех этапов скрипта вручную


set -o errexit означает, что если какая-либо из команд в вашем коде не работает по какой-либо причине, весь скрипт терпит неудачу.


set -o pipefail скрипт завершится неудачно, если одна из ваших команд конвейера не удалась, в противном случае вы можете получить неправильные коды выхода, когда вы используете код конвейера.


set -o nounset скрипт завершится неудачно, если какая-либо из ваших переменных не установлена


Проверка доступности команд yc terraform kubectl helm


list_command_available=(yc terraform kubectl helm)

for i in ${list_command_available[*]}
do
    if ! command -v $i &> /dev/null
    then
        echo "$i could not be found"
        exit 1
    fi
done

Проверка что Yandex.Cloud (CLI) сконфигурирован


if yc config list | grep -q 'token'; then
  echo "yc configured. Passed"
else
  echo "yc doesn't configured."
  echo "Please run 'yc init'"
  exit 1
fi

Установка Managed Service for PostgreSQL и Managed Service for Kubernetes в Yandex Cloud c помощью terraform


Переходим в директорию terraform-k8s-mdb


cd terraform-k8s-mdb

Экспорт токенов из Yandex.Cloud (CLI) в private.auto.tfvars


yc config list > private.auto.tfvars
sed 's/:/=/g' -i private.auto.tfvars
sed '/compute-default-zone/d' -i private.auto.tfvars
sed 's/ //g' -i private.auto.tfvars
sed 's/$/"/' -i private.auto.tfvars
sed 's/=/="/g' -i private.auto.tfvars

Инициализация и применение конфигурации terraform


terraform init
terraform apply -auto-approve

Формирование kubernetes конфига из вывода terraform output kubeconfig


mkdir -p /home/$USER/.kube
terraform output kubeconfig > /home/$USER/.kube/config
sed '/EOT/d' -i /home/$USER/.kube/config

Создаем файл private.auto.tfvars и создаем .kube/config


В файле записываем ваши token, cloud-id, folder-id полученые из yc init


terraform apply
mkdir -p /home/$USER/.kube
terraform output kubeconfig > /home/$USER/.kube/config

Kubernetes config внутри terraform создается с помощью вот такого кода:


locals {
  kubeconfig = <<KUBECONFIG
apiVersion: v1
clusters:
- cluster:
    server: ${yandex_kubernetes_cluster.zonal_k8s_cluster.master[0].external_v4_endpoint}
    certificate-authority-data: ${base64encode(yandex_kubernetes_cluster.zonal_k8s_cluster.master[0].cluster_ca_certificate)}
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: yc
  name: ycmk8s
current-context: ycmk8s
users:
- name: yc
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1beta1
      command: yc
      args:
      - k8s
      - create-token
KUBECONFIG
}

output "kubeconfig" {
  value = "${local.kubeconfig}"
}

Создаем ingress


helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx && helm repo update
helm install nginx-ingress ingress-nginx/ingress-nginx --version 3.36.0  

Устанавливаем версию 3.36.0, так как последняя версия поддерживает только Kubernetes версии >= v1.19


Получение External IP (внешнего IP) Kubernetes сервиса nginx-ingress-ingress-nginx-controller


export IP=$(kubectl get services nginx-ingress-ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')

Создание переменных DBPASS and DBHOST из terraform output. Делаем в директории terraform-k8s-mdb


export DBHOST=$(terraform output dbhosts | sed -e 's/^"//' -e 's/"$//')
export DBPASS=$(terraform output dbpassword | sed -e 's/^"//' -e 's/"$//')
cd ..

Установка flask-postgres используя helm


URL=flask-postgres.$IP.sslip.io
helm install --set DBPASS=$DBPASS,DBHOST=$DBHOST,ingress.enabled=true,ingress.hosts[0].host=$URL,ingress.hosts[0].paths[0].path=/ flask-postgres ./flask-postgres

Проверка подключения из kubernetes в PostgreSQL (Вручную. После выполнения скрипта install.sh)


cd terraform-k8s-mdb
export DBHOST=$(terraform output dbhosts | sed -e 's/^"//' -e 's/"$//')
export DBPASS=$(terraform output dbpassword | sed -e 's/^"//' -e 's/"$//')
cd ..
kubectl run pgsql-postgresql-client --rm --tty -i --restart='Never' --namespace default --image docker.io/bitnami/postgresql:11.7.0-debian-10-r9 --env="PGPASSWORD=$DBPASS" --command -- psql  --host $DBHOST -U user_name -d db_name -p 6432

Заходим в приложение flask-postgres по адресу, который был указан в консоли.



Вводим тестовые данные


Данные успешно добавились. Значит приложение работает и подключение к PostgreSQL тоже работает.

Источник: https://habr.com/ru/post/575722/


Интересные статьи

Интересные статьи

Привет, Хабр! На связи Александр Воронцов, технический специалист компании Cloud4Y. Сегодня я расскажу, как можно настроить получение в Zabbix метрик СУБД PostgreSQL, используемой в VMware Cloud Direc...
Oracle cloud предлагает некоторые ресурсы совершенно бесплатно. В частности на халяву можно получить 2 виртуальные машины. При создании машины у вас есть выбор из centos, Ubuntu или oracl...
Полная настройка терминального сервера, для работы пользователей с 1с и многими другими программами, особенности лицензирования 1с , HASP, настройка RDG, SSL сертификаты...
Привет! Я время от времени рассказываю на Хабре о решениях распространённых задач на C++, и вообще люблю делиться опытом. Поэтому даже написал целую книгу, которая называется «Разработка...
Знаю, знаю, наверное вы сейчас думаете «что опять?!». Да, на хабре уже неоднократно писали о фреймворке FastAPI. Но я предлагаю рассмотреть этот инструмент немного подробнее и нап...