لومړی څه راغلل - چرګ یا هګۍ؟ د زیربنا په توګه د کوډ په اړه د یوې مقالې لپاره خورا عجیب پیل، دا نه ده؟
هګۍ څه شی دی؟
ډیری وختونه، د زیربنا په توګه کوډ (IaC) د زیربناوو د نمایندګۍ یوه اعلامیه لاره ده. پدې کې موږ هغه حالت تشریح کوو چې موږ یې ترلاسه کول غواړو، د هارډویر برخې څخه پیل او د سافټویر ترتیب سره پای ته رسیږي. له همدې امله IaC د دې لپاره کارول کیږي:
- د سرچینو چمتو کول. دا VMs، S3، VPC، او نور دي. د کار لپاره اساسي وسایل:
تیرافیف иCloudFormation . د ساوتري شکل بندي . بنسټیز وسایل:ناڅاپي ، شیف، او داسې نور.
هر کوډ د git ذخیره کې دی. او ژر یا وروسته د ټیم مشر به پریکړه وکړي چې دوی باید ترتیب شي. او هغه به ریفیکټور. او دا به یو څه جوړښت رامینځته کړي. او هغه به وګوري چې دا ښه دی.
دا هم ښه ده چې دا لا دمخه شتون لري
هګۍ له کومه راغلې؟
نو موږ په تدریجي ډول اصلي پوښتنې ته نږدې کیږو.
له هرڅه دمخه ، تاسو اړتیا لرئ د یو ذخیره کولو سره پیل وکړئ چې د خپل ځان په شمول د نورو ذخیره کولو جوړښت تشریح کوي. او البته ، د GitOps برخې په توګه ، تاسو اړتیا لرئ CI اضافه کړئ ترڅو بدلونونه په اوتومات ډول اجرا شي.
که Git تر اوسه نه دی جوړ شوی؟
- دا څنګه په Git کې ذخیره کړئ؟
- CI څنګه نصب کړئ؟
- که موږ د IaC په کارولو سره ګیټلاب هم ځای په ځای کړو ، او حتی په کبرنیټس کې؟
- او د ګیټ لیب رنر هم په کبرنیټس کې؟
- د کلاوډ چمتو کونکي کې د کبرنیټس په اړه څه؟
لومړی څه راغلل: GitLab چیرې چې زه به خپل کوډ اپلوډ کړم، یا هغه کوډ چې تشریح کوي کوم ډول GitLab ته اړتیا لرم؟
چرګ د هګیو سره
«اویاکوډون 3 د ډیناسور سره" [سرچینه ]
راځئ هڅه وکړو چې د بادل چمتو کونکي په توګه د ډوډۍ پخولو هڅه وکړو
د تمديد؛ 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 رنر.
یادښت:
- له پینل څخه MY_SELECTEL_TOKEN ترلاسه کړئ my.selectel.ru.
- دې ته د حساب نښه لیږدولو سره د کوبرنیټس کلستر جوړ کړئ.
- د جوړ شوي کلستر څخه KUBECONFIG ترلاسه کړئ.
- په Kubernetes کې GitLab نصب کړئ.
- د کارونکي لپاره جوړ شوي GitLab څخه GitLab-token ترلاسه کړئ د ريښي.
- د GitLab-token په کارولو سره په GitLab کې د پروژې جوړښت رامینځته کړئ.
- موجوده کوډ GitLab ته فشار ورکړئ.
- ؟؟؟
- ګټه!
1 ګام. نښه په برخه کې ترلاسه کیدی شي
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
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 د پینل له لارې هم لاسرسی کیدی شي.
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 ترلاسه کولو لپاره انتظار کوو:
بهرنۍ IP ترلاسه شوی:
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...
پوزې راپورته شوې:
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)
وشو:
پایلې
موږ ترلاسه کړي چې موږ کولی شو هر څه د خپل محلي ماشین څخه په اعالمیه توګه اداره کړو. اوس زه غواړم دا ټولې دندې CI ته انتقال کړم او یوازې تڼۍ فشاروم. د دې کولو لپاره، موږ اړتیا لرو چې خپل محلي ایالتونه (Terraform State) CI ته انتقال کړو. دا څنګه کولی شو په راتلونکې برخه کې.
زموږ سره ګډون وکړئ
بلاګ نو د نوي مقالو خپریدو له لاسه مه ورکوئ!
سرچینه: www.habr.com