Lev Goncharov

Infrastructure simplifying engineer

View My GitHub Profile

Нет времени объяснять! или как подружить terraform с minikube и kubernetes

Date: 2017-10-24

Как начать пользоваться terraform, развернув локально приложение поверх minikube, и потом запустить его поверх kubernetes в cloud.google.com

Minikube

Для начала настроим minikube и при помощи terraform развернем наше приложение, для этого уже подготовил проект. Остается только:

  1. Установить VirtualBox
  2. Установить Vagrant
  3. Сделать копию репозитория ultral/terraform-example
  4. Сделать
vagrant up

На выходе у нас есть виртуальная машина по адресу 192.168.56.123 c логином/паролем vagrant/vagrant и/или вашим публичным ключом для пользователей root и vagrant.

Google cloud

Тут все становится интересней, будем подключаться к cloud.google.com и запускать там наше приложение.

  1. Регистрируемся https://cloud.google.com что бы получить $ 300
  2. На развернутой VM делаем gcloud init и следуем инструкции
gcloud init
  1. По инструкции получаем ключ в консоли разработчика и складываем в /root/.gcloud/terraform.json на виртуальную машину
  2. Создаем кластер в cloud.google.com
gcloud container clusters create gke-cluster
gcloud container clusters list
  1. Получаем явки/пароли для подключения kubectl к cloud.google.com
[root@terraform-adm terraform]# gcloud container clusters get-credentials gke-cluster
Fetching cluster endpoint and auth data.
kubeconfig entry generated for gke-cluster.
  1. Переключаем контекст kubectl
[root@terraform-adm terraform]# kubectl config use-context gke_tutorial-project-183818_europe-west1-d_gke-cluster
Switched to context "gke_tutorial-project-183818_europe-west1-d_gke-cluster".
  1. Переименовываем контекст kubectl (он у нас указан в terraform)
[root@terraform-adm terraform]# kubectl config rename-context gke_tutorial-project-183818_europe-west1-d_gke-cluster gke_tutorial
Context "gke_tutorial-project-183818_europe-west1-d_gke-cluster" was renamed to "gke_tutorial".
  1. Готовим переменные по образу и подобию для terraform
cp /vagrant/terraform/terraform.tfvars.example /vagrant/terraform/terraform.tfvars
vi /vagrant/terraform/terraform.tfvars
  1. Подготавливаем и применяем terraform
terraform workspace new prod
terraform init
terraform plan
terraform apply
  1. Теперь можно получить адрес нашего приложения и зайти через браузер. Мы молодцы.
terraform output lb_ingress
  1. Подчищаем хвосты за собой
terraform destroy
gcloud container clusters delete gke-cluster

Заключение

Terraform оказался не так страшен. Terraform открывает простор для структурирования и поддержания окружений в идентичном состоянии.