Skip to content

apten-fors/mcs-kubernetes-project-in-60-minutes

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1 Commit
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Запуск ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Kubernetes Π·Π° 60 ΠΌΠΈΠ½ΡƒΡ‚

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ инфраструктуры Π² ΠΎΠ±Π»Π°ΠΊΠ΅ Mail.ru Cloud Solutions

  1. РСгистрируСмся Π² Mail.ru Cloud Solutions
  2. Π—Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚ MCS ΠΈ создаСм кластСр Kubernetes. Π’ прСдустановлСнных сСрвисах оставляСм Ngins Ingress Controller
  3. ПослС создания скачиваСм kubeconfig Ρ„Π°ΠΉΠ» ΠΈ экспортируСм Π΅Π³ΠΎ
export KUBECONFIG=<path to downloaded kubeconfig>
  1. Пока создаСтся кластСр, создадим Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…
  2. Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ PostgreSQL
  3. На этапС создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΆΠΌΠ΅ΠΌ Π°Π²Ρ‚ΠΎΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΈ сохраняСм Π΅Π³ΠΎ, ΠΎΠ½ Π½Π°ΠΌ понадобится Π² дальнСйшСм

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Gitlab.com

  1. РСгистрируСмся Π½Π° Gitlab.com
  2. ПослС рСгистрации создаСм Π½ΠΎΠ²Ρ‹ΠΉ пустой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ mcs-kubernetes-project
  3. ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ сСбС
  4. ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ содСрТимоС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ app ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ рСпозитория Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π³ΠΈΡ‚Π»Π°Π±Π°
  5. ΠŸΡƒΡˆΠΈΠΌ измСнСния

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π½Π½Π΅Ρ€Π°

  1. ДобавляСм Ρ…Π΅Π»ΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π³ΠΈΡ‚Π»Π°Π±Π°
helm repo add gitlab https://charts.gitlab.io
  1. Π‘Ρ‚Π°Π²ΠΈΠΌ Ρ€Π°Π½Π½Π΅Ρ€
kubectl create namespace gitlab
helm install --namespace gitlab gitlab-runner gitlab/gitlab-runner \
  --set rbac.create=true \
  --set runners.privileged=true \
  --set gitlabUrl=https://gitlab.com/ \
  --set runnerRegistrationToken=<token from project settings/CI/CD/Runners>
  1. Π’Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΡˆΠ°Ρ€Π΅Π½Π½Ρ‹Π΅ Ρ€Π°Π½Π½Π΅Ρ€Ρ‹ Π² Settings/CI/CD/Runners

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ CI

  1. ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ Ρ„Π°ΠΉΠ» .gitlab-ci.yml ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ рСпозитория Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π½Π° Π³ΠΈΡ‚Π»Π°Π±Π΅ ΠΈ ΠΏΡƒΡˆΠΈΠΌ измСнСния
  2. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π·Π° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠΌ Π² интСрфСйсС Π³ΠΈΡ‚Π»Π°Π±Π°. Π¨Π°Π³ дСплоя Π½Π° Π΄Π°Π½Π½ΠΎΠΌ этапС Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ°Π΄Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΈ Π·Π°Π΄ΡƒΠΌΠ°Π½ΠΎ

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Kubernetes ΠΊ дСплою

  1. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ нСймспСйс для прилоТСния
kubectl create ns mcs-kubernetes-project
  1. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ RBAC ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ для доступа Ρ€Π°Π½Π½Π΅Ρ€Π° ΠΊ API Kubernetes
kubectl create sa deploy -n mcs-kubernetes-project
kubectl create rolebinding deploy \
  -n mcs-kubernetes-project \
  --clusterrole edit \
  --serviceaccount mcs-kubernetes-project:deploy
  1. ΠŸΠΎΠ»ΡƒΡ‡Π°ΠΌ Ρ‚ΠΎΠΊΠ΅Π½ ΠΎΡ‚ созданного сСрвисаккаунта
kubectl get secret -n mcs-kubernetes-project \
  $(kubectl get sa -n mcs-kubernetes-project deploy \
    -o jsonpath='{.secrets[].name}') \
  -o jsonpath='{.data.token}'
  1. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π² интСрфСйс Π³ΠΈΡ‚Π»Π°Π±Π°. Π’ Π»Π΅Π²ΠΎΠΌ мСню Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Settings, Π΄Π°Π»Π΅Π΅ CI/CD ΠΈ Π΄Π°Π»Π΅Π΅ Variables ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Expand Π’ Π»Π΅Π²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄ΠΈΠΌ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ K8S_CI_TOKEN Π’ ΠΏΡ€Π°Π²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄ΠΈΠΌ скопированный Ρ‚ΠΎΠΊΠ΅Π½ ΠΈΠ· Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ setup.sh Protected Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ! Masked Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ!
  2. Π”Π°Π»Π΅Π΅ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Π»Π΅Π²ΠΎΠΌ мСню Π² Settings > Repository Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Deploy tokens ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Expand. Π’ ΠΏΠΎΠ»Π΅ Name Π²Π²ΠΎΠ΄ΠΈΠΌ k8s-pull-token И ставим Π³Π°Π»ΠΎΡ‡ΠΊΡƒ рядом с read_registry. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ поля оставляСм пустыми. НаТимаСм Create deploy token. НЕ Π—ΠΠšΠ Π«Π’ΠΠ•Πœ ОКНО БРАУЗЕРА!
  3. ВозвращаСмся Π² консоль. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ image pull secret для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ кубСрнСтис ΠΌΠΎΠ³ ΠΏΡƒΠ»ΠΈΡ‚ΡŒ ΠΈΠΌΠ°Π΄ΠΆΠΈ ΠΈΠ· Π³ΠΈΡ‚Π»Π°Π±Π°
kubectl create secret docker-registry mcs-kubernetes-project-image-pull \
  --docker-server registry.gitlab.com \
  --docker-email '[email protected]' \
  --docker-username '<пСрвая строчка ΠΈΠ· ΠΎΠΊΠ½Π° создания Ρ‚ΠΎΠΊΠ΅Π½Π° Π² gitlab>' \
  --docker-password '<вторая строчка ΠΈΠ· ΠΎΠΊΠ½Π° создания Ρ‚ΠΎΠΊΠ΅Π½Π° Π² gitlab>' \
  --namespace mcs-kubernetes-project

БоотвСтсвСнно подставляя Π½Π° мСсто <> Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

  1. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ сСкрСт с ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΌ ΠΊ Π‘Π”
kubectl create secret generic mcs-kubernetes-project \
  -n mcs-kubernetes-project \
  --from-literal db-password=<сохранСнный Ρ€Π°Π½Π΅Π΅ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΎΡ‚ Π‘Π”>

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° манифСстов Kubernetes для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

  1. ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ .kube ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ рСпозитория Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° Π³ΠΈΡ‚Π»Π°Π±Π΅
  2. ΠŸΡ€ΠΎΡΡ‚Π°Π²Π»ΡΠ΅ΠΌ Π² Ρ„Π°ΠΉΠ»Π΅ deployment.yaml ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π‘Π”
  3. ΠŸΡƒΡˆΠΈΠΌ измСнСния, ΠΆΠ΄Π΅ΠΌ окончания дСплоя
  4. По IP адрСсу балансировщика созданного ΠΎΠ±Π»Π°ΠΊΠΎΠΌ провСряСм Ρ€Π°Π±ΠΎΡ‚Ρƒ прилоТСния. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
kubectl get svc -n ingress-nginx nginx-ingress-controller -o jsonpath='{.status.loadBalancer.ingress[].ip}'
  1. ВыполняСм ΠΏΠ°Ρ€Ρƒ запросов для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ
curl -k https://<INGRESS IP>/users -X POST -H "Content-Type: application/json" --data '{"name":"test","location":"asdf","age":12}'
curl -k https://<INGRESS IP>/users

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 96.7%
  • Dockerfile 3.3%