Digaagga ama ukunta: kala qaybinta IaC

Digaagga ama ukunta: kala qaybinta IaC
Maxaa u horeeyay - digaaga mise ukunta? Bilaw la yaab leh maqaal ku saabsan Kaabayaasha-sida-Code, miyaanay ahayn?

Waa maxay ukun?

Inta badan, Kaabayaasha-sida-Code (IaC) waa hab lagu caddeeyo oo lagu matalo kaabayaasha. Dhexdeeda waxaan ku qeexaynaa gobolka aan rabno inaan gaarno, laga bilaabo qaybta qalabka oo aan ku dhameyno habka software. Sidaa darteed IaC waxaa loo isticmaalaa:

  1. Bixinta Kheyraadka. Kuwani waa VMs, S3, VPC, iwm. Qalabka aasaasiga ah ee shaqada: Terraform ΠΈ CloudFormation.
  2. Qaabeynta Software. Qalabka aasaasiga ah: Caqli ahaan, Kuug, iwm.

kood kasta ayaa ku jira kaydka git Dhawaan ama hadhow hogaamiyaha kooxdu wuxuu go'aansan doonaa inay u baahan yihiin in la hagaajiyo. Oo isna wuu soo celin doonaa. Waxayna abuuri doontaa qaab dhismeed. Oo isna wuxuu arki doonaa in tani ay wanaagsan tahay.

Sidoo kale way wanaagsan tahay inay hore u jirtay GitLab ΠΈ GitHub-bixiyaha Terraform (oo kani waa Habaynta Software). Caawintooda, waxaad maamuli kartaa mashruuca oo dhan: xubnaha kooxda, CI/CD, git-flow, iwm.

Halkee bay ukuntu ka timid?

Markaa waxaan si tartiib tartiib ah u soo dhowaanaynaa su'aasha ugu muhiimsan.

Ugu horreyntii, waxaad u baahan tahay inaad ku bilowdo bakhaar qeexaya qaabka kaydka kale, oo ay ku jiraan naftaada. Dabcan, sida qayb ka mid ah GitOps, waxaad u baahan tahay inaad ku darto CI si isbeddelada si toos ah loo fuliyo.

Haddii Git aan weli la abuurin?

  1. Sidee loogu kaydiyaa Git?
  2. Sidee loo rakibaa CI?
  3. Haddii aan sidoo kale geyno Gitlab anagoo adeegsanayna IaC, iyo xitaa Kubernetes?
  4. Iyo GitLab Runner sidoo kale gudaha Kubernetes?
  5. Ka warran Kubernetes ee ku jira bixiyaha daruuraha?

Maxaa markii hore yimid: GitLab halkaas oo aan ku dhejin doono koodka, ama koodka qeexaya nooca GitLab ee aan u baahanahay?

Digaag ukun leh

Β«Oyakodon3 oo leh dinosaur"src]

Aan isku dayno inaan karsano saxan anagoo adeegsanayna daruur bixiye ahaan Kubernetes Selectel la maamulay.

TL, DR

Suurtagal ma tahay inaad hal koox ku biirto hal mar?

$ export MY_SELECTEL_TOKEN=<token>
$ curl https://gitlab.com/chicken-or-egg/mks/make/-/snippets/2002106/raw | bash

Waxyaabaha ay ka kooban tahay:

  • Akoonka my.selectel.ru;
  • Calaamada xisaabta;
  • Xirfadaha Kubernetes;
  • Xirfadaha Helm;
  • Xirfadaha Terraform;
  • Shaxda Helm GitLab;
  • Shaxda Helm GitLab Runner.

Cunto:

  1. Ka hel MY_SELECTEL_TOKEN guddida my.selectel.ru.
  2. Samee kutlada Kubernetes adiga oo u wareejinaya calaamada akoontada
  3. Ka hel KUBECONFIG kooxda la abuuray.
  4. Ku rakib GitLab Kubernetes
  5. Ka hel GitLab-token GitLab oo loo sameeyay isticmaale xidid.
  6. Ku samee qaab dhismeed mashruuc gudaha GitLab adoo isticmaalaya GitLab-token.
  7. Ku riix koodka jira GitLab.
  8. ???
  9. Faa'iido!

talaabo 1. Calaamadda waxaa laga heli karaa qaybta Furayaasha API.

Digaagga ama ukunta: kala qaybinta IaCtalaabo 2. Waxaan u diyaarinaa Terraform-kayaga "dubo" koox ka kooban 2 nood. Haddii aad hubto in aad haysatid kheyraad kugu filan wax walba, markaa waxaad awood u yeelan kartaa kootooyinka auto:

provider "selectel" {
 token = var.my_selectel_token
}

variable "my_selectel_token" {}
variable "username" {}
variable "region" {}


resource "selectel_vpc_project_v2" "my-k8s" {
 name = "my-k8s-cluster"
 theme = {
   color = "269926"
 }
 quotas {
   resource_name = "compute_cores"
   resource_quotas {
     region = var.region
     zone = "${var.region}a"
     value = 16
   }
 }
 quotas {
   resource_name = "network_floatingips"
   resource_quotas {
     region = var.region
     value = 1
   }
 }
 quotas {
   resource_name = "load_balancers"
   resource_quotas {
     region = var.region
     value = 1
   }
 }
 quotas {
   resource_name = "compute_ram"
   resource_quotas {
     region = var.region
     zone = "${var.region}a"
     value = 32768
   }
 }
 quotas {
   resource_name = "volume_gigabytes_fast"
   resource_quotas {
     region = var.region
     zone = "${var.region}a"
     # (20 * 2) + 50 + (8 * 3 + 10)
     value = 130
   }
 }
}

resource "selectel_mks_cluster_v1" "k8s-cluster" {
 name         = "k8s-cluster"
 project_id   = selectel_vpc_project_v2.my-k8s.id
 region       = var.region
 kube_version = "1.17.9"
}

resource "selectel_mks_nodegroup_v1" "nodegroup_1" {
 cluster_id        = selectel_mks_cluster_v1.k8s-cluster.id
 project_id        = selectel_mks_cluster_v1.k8s-cluster.project_id
 region            = selectel_mks_cluster_v1.k8s-cluster.region
 availability_zone = "${var.region}a"
 nodes_count       = 2
 cpus              = 8
 ram_mb            = 16384
 volume_gb         = 15
 volume_type       = "fast.${var.region}a"
 labels            = {
   "project": "my",
 }
}

Ku dar isticmaale mashruuca:

resource "random_password" "my-k8s-user-pass" {
 length = 16
 special = true
 override_special = "_%@"
}

resource "selectel_vpc_user_v2" "my-k8s-user" {
 password = random_password.my-k8s-user-pass.result
 name = var.username
 enabled  = true
}

resource "selectel_vpc_keypair_v2" "my-k8s-user-ssh" {
 public_key = file("~/.ssh/id_rsa.pub")
 user_id    = selectel_vpc_user_v2.my-k8s-user.id
 name = var.username
}

resource "selectel_vpc_role_v2" "my-k8s-role" {
 project_id = selectel_vpc_project_v2.my-k8s.id
 user_id    = selectel_vpc_user_v2.my-k8s-user.id
}

Natiijada:

output "project_id" {
 value = selectel_vpc_project_v2.my-k8s.id
}

output "k8s_id" {
 value = selectel_mks_cluster_v1.k8s-cluster.id
}

output "user_name" {
 value = selectel_vpc_user_v2.my-k8s-user.name
}

output "user_pass" {
 value = selectel_vpc_user_v2.my-k8s-user.password
}

Aan bilowno:

$ env 
TF_VAR_region=ru-3 
TF_VAR_username=diamon 
TF_VAR_my_selectel_token=<token> 
terraform plan -out planfile

$ terraform apply -input=false -auto-approve planfile

Digaagga ama ukunta: kala qaybinta IaC
talaabo 3. Waxaan helnaa cubeconfig.

Si aad barnaamij ahaan u soo dejiso KUBECONFIG, waxaad u baahan tahay inaad calaamad ka hesho OpenStack:

openstack token issue -c id -f value > token

Oo calaamadan ku samee codsi kubernetes Selectel API oo la maamulay. k8s_id bixisa xayawaanka:

curl -XGET -H "x-auth-token: $(cat token)" "https://ru-3.mks.selcloud.ru/v1/clusters/$(cat k8s_id)/kubeconfig" -o kubeConfig.yaml

Cupconfig sidoo kale waxaa laga heli karaa iyada oo loo marayo guddiga.

Digaagga ama ukunta: kala qaybinta IaC
talaabo 4. Ka dib marka kooxdu la dubato oo aan marin u helno, waxaan ku dari karnaa yammka korka si aad u dhadhamiso.

Waxaan doorbidayaa inaan ku daro:

  • meel magaceed
  • fasalka kaydinta
  • siyaasadda ammaanka pod iyo wixii la mid ah.

Heerka Kaydinta waayo Selectel waxaa laga soo qaadan karaa kaydka rasmiga ah.

Tan iyo markii hore waxaan doortay koox aagga ru-3a, markaa waxaan u baahanahay fasalka kaydinta ee aaggan.

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
 name: fast.ru-3a
 annotations:
   storageclass.kubernetes.io/is-default-class: "true"
provisioner: cinder.csi.openstack.org
parameters:
 type: fast.ru-3a
 availability: ru-3a
allowVolumeExpansion: true

talaabo 5. Ku rakib miisaan-dheeyeyaasha culayska.

Waxaan u isticmaali doonaa kuwa caadiga ah kuwa badan nginx-gudbinta. Waxaa horeba u jiray tilmaamo badan oo lagu rakibayo, markaa ma sii joogi doono.

$ helm repo add nginx-stable https://helm.nginx.com/stable
$ helm upgrade nginx-ingress nginx-stable/nginx-ingress -n ingress --install -f ../internal/K8S-cluster/ingress/values.yml

Waxaan sugeynaa inuu helo IP dibadeed qiyaastii 3-4 daqiiqo:

Digaagga ama ukunta: kala qaybinta IaC
IP dibadeed helay:

Digaagga ama ukunta: kala qaybinta IaC
talaabo 6. Ku rakib GitLab.

$ helm repo add gitlab https://charts.gitlab.io
$ helm upgrade gitlab gitlab/gitlab -n gitlab  --install -f gitlab/values.yml --set "global.hosts.domain=gitlab.$EXTERNAL_IP.nip.io"

Mar labaad waxaanu sugayna in dhammaan gafku kor u kaco.

kubectl get po -n gitlab
NAME                                      	READY   STATUS  	RESTARTS   AGE
gitlab-gitaly-0                           	0/1 	Pending 	0      	0s
gitlab-gitlab-exporter-88f6cc8c4-fl52d    	0/1 	Pending 	0      	0s
gitlab-gitlab-runner-6b6867c5cf-hd9dp     	0/1 	Pending 	0      	0s
gitlab-gitlab-shell-55cb6ccdb-h5g8x       	0/1 	Init:0/2	0      	0s
gitlab-migrations.1-2cg6n                 	0/1 	Pending 	0      	0s
gitlab-minio-6dd7d96ddb-zd9j6             	0/1 	Pending 	0      	0s
gitlab-minio-create-buckets.1-bncdp       	0/1 	Pending 	0      	0s
gitlab-postgresql-0                       	0/2 	Pending 	0      	0s
gitlab-prometheus-server-6cfb57f575-v8k6j 	0/2 	Pending 	0      	0s
gitlab-redis-master-0                     	0/2 	Pending 	0      	0s
gitlab-registry-6bd77b4b8c-pb9v9          	0/1 	Pending 	0      	0s
gitlab-registry-6bd77b4b8c-zgb6r          	0/1 	Init:0/2	0      	0s
gitlab-shared-secrets.1-pc7-5jgq4         	0/1 	Completed   0      	20s
gitlab-sidekiq-all-in-1-v1-54dbcf7f5f-qbq67   0/1 	Pending 	0      	0s
gitlab-task-runner-6fd6857db7-9x567       	0/1 	Pending 	0      	0s
gitlab-webservice-d9d4fcff8-hp8wl         	0/2 	Pending 	0      	0s
Waiting gitlab
./wait_gitlab.sh ../internal/gitlab/gitlab/.pods
waiting for pod...
waiting for pod...
waiting for pod...

Caleemaha ayaa kacay:

Digaagga ama ukunta: kala qaybinta IaC
talaabo 7. Waxaan helnaa GitLab-token.

Marka hore, ogow erayga sirta ah ee login:

kubectl get secret -n gitlab gitlab-gitlab-initial-root-password -o jsonpath='{.data.password}' | base64 --decode

Hadda aan galno oo helno calaamad:

python3 get_gitlab_token.py root $GITLAB_PASSWORD http://gitlab.gitlab.$EXTERNAL_IP.nip.io

talaabo 8. Keenista xarumaha Git ee kala sareynta saxda ah iyadoo la adeegsanayo Bixiyaha Gitlab.

cd ../internal/gitlab/hierarchy && terraform apply -input=false -auto-approve planfile

Nasiib darro, bixiyaha terraform GitLab wuxuu leeyahay sabayn bug. Markaa waa inaad gacanta ku tirtirtaa mashaariicda iska soo horjeeda si tf.state loo hagaajiyo. Kadib dib u samee amarka `$make all'

talaabo 9. Waxaan u wareejinaa kaydadka maxaliga ah ee server-ka.

$ make push

[master (root-commit) b61d977]  Initial commit
 3 files changed, 46 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 values.yml
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 770 bytes | 770.00 KiB/s, done.
Total 5 (delta 0), reused 0 (delta 0)

La sameeyay:

Digaagga ama ukunta: kala qaybinta IaC
Digaagga ama ukunta: kala qaybinta IaC
Digaagga ama ukunta: kala qaybinta IaC

gunaanad

Waxa aanu gaadhnay in aanu si cad wax walba uga maarayn karno mishiinkeena maxaliga ah. Hadda waxaan rabaa inaan ku wareejiyo dhammaan hawlahan CI oo kaliya riix badhamada. Si tan loo sameeyo, waxaan u baahanahay inaan u wareejino goboladayaga maxalliga ah (Terraform state) CI. Sida tan loo sameeyo waa qaybta xigta.

Subscribe noo blogsi aanay u seegin soo saarista maqaallo cusub!

Source: www.habr.com

Add a comment