Differences

This shows you the differences between two versions of the page.


Previous revision
Next revision
devops:otus_course_final [2020/09/17 13:48] – [Задачи] admin
Line 1: Line 1:
 +====== Проектная работа по курсу otus kubernetes ======
 +Разворачивание кластера в GCP:
 +  * [[https://medium.com/technopanti/deploy-kubernetes-load-balancer-service-with-terraform-on-gcp-6538c5be7f83|Deploy Kubernetes Load Balancer Service with Terraform on GCP]]
 +  * [[https://cloud.google.com/community/tutorials/modular-load-balancing-with-terraform|Modular Load Balancing with Terraform]]
 +  * Как вручную запустить кластер (можно делать из ansible) в GCP - https://docs.projectcalico.org/getting-started/kubernetes/self-managed-public-cloud/gce
 +  * Как создавать машинки из terraform: https://www.nebulaworks.com/blog/2019/04/22/simplify-your-gce-instance-bootstrapping-with-terraform/  https://linux-notes.org/rabota-s-google-cloud-platform-compute-instance-i-terraform-v-unix-linux/
 +  
 +  * Как запустить **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
 +
 +
 +====== Подготовка ======
 +<code>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
 +</code>
 +**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)
 +  * Протестировал провижининг [[https://docs.openebs.io/docs/next/uglocalpv-hostpath.html|OpenEBS Local PV Hostpath]]. Вроде работает [[https://blog.mayadata.io/openebs/dynamic-provisioning-of-kubernetes-local-pvs-using-openebs|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://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/ 
 +  * Создать [[https://www.terraform.io/docs/providers/gitlab/r/pipeline_trigger.html|pipeline trigger]], для того, чтобы можно было [[https://docs.gitlab.com/ee/ci/triggers/|запустить пайплайн из terraform]].
 +  * Разобраться с ингрессом.
 +
 +\\
 +\\
 +\\
 +\\
 +
 +
 +
 +  * https://cloud.google.com/solutions/partners/deploying-gitlab-anthos-gke-on-prem-cicd-pipeline
 +  * https://medium.com/@Joachim8675309/building-gke-with-terraform-869df1cd3f41 ; https://github.com/darkn3rd/blog_tutorials/tree/master/kubernetes/gke_2_provision_terraform https://habr.com/ru/post/352644/ https://habr.com/ru/post/352644/
 +  * Развернуть 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 ([[https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#over-a-nodeport-service|NodePort]])
 +  * Развернуть CertManager
 +  * <del>Нужно забрать оттуда admin.conf от кластера кубера. Сделал, но наверное не надо. api-сервер слушает на локальном адресе.</del>
 +
 +====== ЛИШНЕЕ и пока не очен понятное ======
 +Создадим 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
 +
  
  • devops/otus_course_final.txt
  • Last modified: 2021/11/15 16:04
  • by admin