Осваиваю кубер: GKE + cloud sql
Задача перехода на облачную инфраструктуру в последнее время появляется уже практически в любой компании. Появилась такая задача и у меня.
Суть моего маленького проекта сводилась к следующему: — развернуть кубернетес кластер; — определиться с размещением базы. База — mysql; — организовать поддержку версионности структуры БД; — запустить контейнер с приложением, которое будет цепляться и работать с БД.
В качестве облака был выбран gcloud.
Какое-то время я выбирал между развёртыванием mysql HA от Presslabs и gcloud sql.
В итоге победил gcloud sql, т. к работа с ним оказалась проще, понятнее и дешевле.
Чтобы создать инстанс базы, есть два пути: — web-консоль; — командная строка через gcloud.
GKE может подключаться к sql-инстансу двумя путями: — на публичный адрес через proxy-контейнер; — на приватный адрес через VPC.
Я выбрал второй вариант, потому что не люблю, когда база торчит публичным IP-адресом в сеть.
Для начала подготавливаемся к работе с командной строкой: — авторизуемся; — выставляем нужный проект; — выбираем географическую зону, в которой будем работать.
gcloud auth gcloud projects list gcloud config set project <your_project_id> gcloud config set compute/zone europe-north1-a
Создаём VPC-сеть:
gcloud compute networks create my-network \ --subnet-mode=auto \ --bgp-routing-mode=regional
Создаём инстанс базы c репликой, которая подключена к нужной сети. Опция
gcloud beta sql instances create my-master --failover-replica-name my-slave \ --tier db-n1-standard-1 --enable-bin-log --no-assign-ip \ --network=my-network gcloud services enable servicenetworking.googleapis.com --project=< ид проекта>
Данная команда отрабатывает, но не активировалась VPC. В итоге, инстанс я создал через веб-консоль с нужной сетью. Затем я создал пользователя и базу для коннекта:
gcloud sql users set-password root --host % --instance my-master --password myPASS gcloud sql users create myuser --host=% --instance=my-master --password=User#19 gcloud sql databases create mydb --instance=my-master
Затем я создал gke-кластер в той же сети: — создаём кластер (из одной ноды); — устанавливаем kubectl; — прописываем доступы для kubectl; — смотрим информацию по кластеру.
gcloud container clusters create my-cluster \ --network=my-network --num-nodes=1 \ --enable-ip-alias \ --cluster-ipv4-cidr=/16 \ --services-ipv4-cidr=/22 gcloud container cluster list gcloud components install kubectl gcloud container clusters get-credentials my-cluster kubectl cluster-info kubectl get nodes kubectl get pods kubectl get services
Смотрим выданный IP-адрес:
gcloud beta sql instances list
Ну и запускаем тестовый pod в кубере для проверки работы коннекта к базе:
kubectl run -it my-client --image=arey/mysql-client -- -h <instance private ip> -u \ myuser -p'User#19'