Сертификат OTUS
Проектная работа по курсу otus kubernetes
Разворачивание кластера в GCP:
- Как вручную запустить кластер (можно делать из ansible) в GCP - https://docs.projectcalico.org/getting-started/kubernetes/self-managed-public-cloud/gce
- Как запустить managed кластер GKE - https://www.padok.fr/en/blog/kubernetes-google-cloud-terraform-cluster
- Какое-то самописное решение - https://medium.com/searce/kubernetes-deployment-on-google-compute-engine-using-terraform-8d6075cf4d3f
- Специальный модуль для terraform: https://github.com/terraform-google-modules/terraform-google-k8s-gce
- Самописное решение Terraform + Ansible https://medium.zenika.com/a-custom-kubernetes-cluster-on-gcp-in-7-minutes-with-terraform-and-ansible-75875f89309e
Подготовка
wget https://releases.hashicorp.com/terraform/0.13.1/terraform_0.13.1_linux_amd64.zip unzip ./terraform_0.13.1_linux_amd64.zip sudo mv ./terraform /usr/local/bin/terraform echo "deb https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get -y install google-cloud-sdk kubectl gcloud init
gcloud выдаст ссылку, которую надо будет открыть в браузере, согласиться выдать разрешения и скопировать verification code.
Выбираем зону 1 (us-east1-b) и тип машин будем юзать e2-standard-2 (2vCPU, 8GB RAM).
Включаем необходимые APIшки:
gcloud services enable compute.googleapis.com gcloud services enable servicenetworking.googleapis.com #gcloud services enable cloudresourcemanager.googleapis.com #gcloud services enable container.googleapis.com
Теперь можно получить токен, с которым будем ходить в GCP.
gcloud auth print-access-token
И в дальнейшем полученную строку будем юзать в качестве значения параметра access_token в конфиге terraform-провайдера google.
Текущий статус
- Поднимаются виртуалки с помощью terraform по списку.
- Между виртуалками есть сеть и у каждой есть внешний IP.
- Формируется inventory-файл для kubespray и нормально разворачивается кластер.
- Цепляются пара дисков (один монтируется в /var/lib/docker, а второй - /var/lib/data - для PersistentVolumes)
- Протестировал провижининг OpenEBS Local PV Hostpath. Вроде работает OpenEBS - хороший вариант В итоге - включил провижининг, который идет в комплекте с kubespray - rancher/local-path-provisioner (local_path_provisioner_enabled: true)
- Развернул ELK (с помощью оператора и чартика).
Задачи
- Настроить DNS-зону https://cloud.google.com/dns/docs/zones Зону ucent.ru завел в GCP.
- Настроить ingress. По дефолту ставится istio, который и может быть ingress'ом. https://habr.com/ru/company/southbridge/blog/441616/ https://istio.io/latest/docs/tasks/traffic-management/ingress/ingress-control/
- Настроить CertManager
- Настроить выгрузку в docker registry собранных образов. Выгрузка работает (в docker registry в кластере). Нужно приделать сертификат для registry. https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/
- Создать pipeline trigger, для того, чтобы можно было запустить пайплайн из terraform.
- Разобраться с ингрессом.
- Развернуть Prometheus
По сетевой части нашлось вот что: https://github.com/Wi3ard/k8s-nginx-ingress/blob/gke-gdns-certmgr-wildcard/main.tf
- Нужно сделать между ними балансировщик. https://linux-notes.org/rabota-s-google-cloud-platform-compute-forwarding-rule-i-terraform-v-unix-linux/
https://www.terraform.io/docs/providers/google/r/compute_global_forwarding_rule.html#
- Нужно прописывать DNS-записи для всех сервисов
- Развернуть Ingress (NodePort)
- Развернуть CertManager
Нужно забрать оттуда admin.conf от кластера кубера. Сделал, но наверное не надо. api-сервер слушает на локальном адресе.
ЛИШНЕЕ и пока не очен понятное
Создадим Service Account:
gcloud iam service-accounts create otus-course-project --display-name "Otus Course Project Service Account"
И посмотрим какие с ней связаны ключи:
gcloud iam service-accounts keys list --iam-account=otus-course-project@otus-kuber-course.iam.gserviceaccount.com
Сгенерируем новый (https://cloud.google.com/sdk/gcloud/reference/iam/service-accounts/keys/create):
gcloud iam service-accounts keys create ./otus-kubernetes-course.yaml --iam-account=otus-course-project@otus-kuber-course.iam.gserviceaccount.com
В результате - получим файлик otus-kubernetes-course.yaml, который уже может быть использован terraform.
И потом активируем его:
gcloud auth activate-service-account otus-course-project@otus-kuber-course.iam.gserviceaccount.com --key-file=./otus-kubernetes-course.yaml
Также можно привязать уже имеющийся файлик примерно вот так: https://cloud.google.com/sdk/gcloud/reference/auth/activate-service-account .
В дальнейшем переключаться между аккаунтами можно так:
gcloud config set account otus-course-project@otus-kuber-course.iam.gserviceaccount.com
Discussion