چرګ یا هګۍ: د IaC ویشل

چرګ یا هګۍ: د IaC ویشل
لومړی څه راغلل - چرګ یا هګۍ؟ د زیربنا په توګه د کوډ په اړه د یوې مقالې لپاره خورا عجیب پیل، دا نه ده؟

هګۍ څه شی دی؟

ډیری وختونه، د زیربنا په توګه کوډ (IaC) د زیربناوو د نمایندګۍ یوه اعلامیه لاره ده. پدې کې موږ هغه حالت تشریح کوو چې موږ یې ترلاسه کول غواړو، د هارډویر برخې څخه پیل او د سافټویر ترتیب سره پای ته رسیږي. له همدې امله IaC د دې لپاره کارول کیږي:

  1. د سرچینو چمتو کول. دا VMs، S3، VPC، او نور دي. د کار لپاره اساسي وسایل: تیرافیف и CloudFormation.
  2. د ساوتري شکل بندي. بنسټیز وسایل: ناڅاپي، شیف، او داسې نور.

هر کوډ د git ذخیره کې دی. او ژر یا وروسته د ټیم مشر به پریکړه وکړي چې دوی باید ترتیب شي. او هغه به ریفیکټور. او دا به یو څه جوړښت رامینځته کړي. او هغه به وګوري چې دا ښه دی.

دا هم ښه ده چې دا لا دمخه شتون لري ګیتاباب и GitHub- د Terraform لپاره چمتو کونکی (او دا د سافټویر ترتیب دی). د دوی په مرسته، تاسو کولی شئ ټوله پروژه اداره کړئ: د ټیم غړي، CI/CD، git-flow، او نور.

هګۍ له کومه راغلې؟

نو موږ په تدریجي ډول اصلي پوښتنې ته نږدې کیږو.

له هرڅه دمخه ، تاسو اړتیا لرئ د یو ذخیره کولو سره پیل وکړئ چې د خپل ځان په شمول د نورو ذخیره کولو جوړښت تشریح کوي. او البته ، د GitOps برخې په توګه ، تاسو اړتیا لرئ CI اضافه کړئ ترڅو بدلونونه په اوتومات ډول اجرا شي.

که Git تر اوسه نه دی جوړ شوی؟

  1. دا څنګه په Git کې ذخیره کړئ؟
  2. CI څنګه نصب کړئ؟
  3. که موږ د IaC په کارولو سره ګیټلاب هم ځای په ځای کړو ، او حتی په کبرنیټس کې؟
  4. او د ګیټ لیب رنر هم په کبرنیټس کې؟
  5. د کلاوډ چمتو کونکي کې د کبرنیټس په اړه څه؟

لومړی څه راغلل: GitLab چیرې چې زه به خپل کوډ اپلوډ کړم، یا هغه کوډ چې تشریح کوي کوم ډول GitLab ته اړتیا لرم؟

چرګ د هګیو سره

«اویاکوډون3 د ډیناسور سره" [سرچینه]

راځئ هڅه وکړو چې د بادل چمتو کونکي په توګه د ډوډۍ پخولو هڅه وکړو د Kubernetes Selectel مدیریت شوی.

د تمديد؛ DR

ایا دا ممکنه ده چې په یو وخت کې یو ټیم سره یوځای شي؟

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

عنصرونه:

  • د my.selectel.ru څخه حساب؛
  • د حساب نښه؛
  • د Kubernetes مهارتونه؛
  • د هیلم مهارتونه؛
  • د ټیرفارم مهارتونه؛
  • د هیلم چارټ GitLab؛
  • د هیلم چارټ GitLab رنر.

یادښت:

  1. له پینل څخه MY_SELECTEL_TOKEN ترلاسه کړئ my.selectel.ru.
  2. دې ته د حساب نښه لیږدولو سره د کوبرنیټس کلستر جوړ کړئ.
  3. د جوړ شوي کلستر څخه KUBECONFIG ترلاسه کړئ.
  4. په Kubernetes کې GitLab نصب کړئ.
  5. د کارونکي لپاره جوړ شوي GitLab څخه GitLab-token ترلاسه کړئ د ريښي.
  6. د GitLab-token په کارولو سره په GitLab کې د پروژې جوړښت رامینځته کړئ.
  7. موجوده کوډ GitLab ته فشار ورکړئ.
  8. ؟؟؟
  9. ګټه!

1 ګام. نښه په برخه کې ترلاسه کیدی شي د API کلیدونه.

چرګ یا هګۍ: د IaC ویشل2 ګام. موږ د 2 نوډونو کلستر "بیک کولو" لپاره خپل ټیرافارم چمتو کوو. که تاسو ډاډه یاست چې تاسو د هرڅه لپاره کافي سرچینې لرئ ، نو تاسو کولی شئ د اتومات کوټا فعال کړئ:

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",
 }
}

پروژې ته یو کارن اضافه کړئ:

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
}

محصول:

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
}

موږ پیل کوو:

$ 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

چرګ یا هګۍ: د IaC ویشل
3 ګام. موږ کیوب کنفګ ترلاسه کوو.

د پروګرام په توګه د KUBECONFIG ډاونلوډ کولو لپاره، تاسو اړتیا لرئ چې د OpenStack څخه نښه ترلاسه کړئ:

openstack token issue -c id -f value > token

او د دې نښه سره اداره شوي Kubernetes Selectel API ته غوښتنه وکړئ. k8s_id مسلې خاوره:

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

Cupconfig د پینل له لارې هم لاسرسی کیدی شي.

چرګ یا هګۍ: د IaC ویشل
4 ګام. وروسته له دې چې کلستر پخه شي او موږ ورته لاسرسی ولرو، موږ کولی شو د خوند لپاره په سر کې یامل اضافه کړو.

زه غوره ګڼم:

  • نوم ځای
  • د ذخیره کولو ټولګي
  • د پوډ امنیت پالیسي او داسې نور.

د ذخیره کولو ټولګي د انتخاب لپاره له څخه اخیستل کیدی شي رسمي ذخیره.

له پیل راهیسې ما په زون کې یو کلستر غوره کړ en-3a، بیا زه د دې زون څخه د ذخیره کولو ټولګي ته اړتیا لرم.

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

5 ګام. د بار بار توازن نصب کړئ.

موږ به د ډیری لپاره معیاري وکاروو nginx-ingress. د دې نصبولو لپاره لا دمخه ډیری لارښوونې شتون لري، نو موږ به پدې کې پاتې نه شو.

$ 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

موږ د 3-4 دقیقو لپاره د بهرني IP ترلاسه کولو لپاره انتظار کوو:

چرګ یا هګۍ: د IaC ویشل
بهرنۍ IP ترلاسه شوی:

چرګ یا هګۍ: د IaC ویشل
6 ګام. 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"

یوځل بیا موږ انتظار کوو چې ټول پوډونه پورته شي.

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...

پوزې راپورته شوې:

چرګ یا هګۍ: د IaC ویشل
7 ګام. موږ د GitLab-ټوکن ترلاسه کوو.

لومړی، د ننوتلو پاسورډ ومومئ:

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

اوس راځئ چې ننوتل او یو نښه ترلاسه کړو:

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

8 ګام. د ګیټ لاب چمتو کونکي په کارولو سره سم درجه بندي ته د Git ذخیره راوړل.

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

له بده مرغه، د ټیرافورم ګیټ لیب چمتو کونکی تیریږي بګ. بیا تاسو باید د tf.state د سمولو لپاره په لاسي ډول متضاد پروژې حذف کړئ. بیا د `$make all` کمانډ بیا پیل کړئ

9 ګام. موږ محلي ذخیره سرور ته لیږدوو.

$ 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)

وشو:

چرګ یا هګۍ: د IaC ویشل
چرګ یا هګۍ: د IaC ویشل
چرګ یا هګۍ: د IaC ویشل

پایلې

موږ ترلاسه کړي چې موږ کولی شو هر څه د خپل محلي ماشین څخه په اعالمیه توګه اداره کړو. اوس زه غواړم دا ټولې دندې CI ته انتقال کړم او یوازې تڼۍ فشاروم. د دې کولو لپاره، موږ اړتیا لرو چې خپل محلي ایالتونه (Terraform State) CI ته انتقال کړو. دا څنګه کولی شو په راتلونکې برخه کې.

زموږ سره ګډون وکړئ بلاګنو د نوي مقالو خپریدو له لاسه مه ورکوئ!

سرچینه: www.habr.com

Add a comment