پهرين ڇا آيو - ڪڪڙ يا انڊا؟ انفراسٹرڪچر-جي-ڪوڊ بابت هڪ مضمون لاءِ ڪافي هڪ عجيب شروعات آهي، ڇا اهو ناهي؟
هڪ انجڻ ڇا آهي؟
گهڻو ڪري، انفراسٽرڪچر-جي-ڪوڊ (IaC) بنيادي ڍانچي جي نمائندگي ڪرڻ جو هڪ بياني طريقو آهي. ان ۾ اسان رياست کي بيان ڪريون ٿا جيڪو اسان حاصل ڪرڻ چاهيون ٿا، هارڊويئر جي حصي کان شروع ٿئي ٿو ۽ سافٽ ويئر جي ترتيب سان ختم ٿئي ٿو. تنهن ڪري IaC استعمال ڪيو ويندو آهي:
- وسيلن جي فراهمي. اهي آهن VMs، S3، VPC، وغيره. ڪم لاء بنيادي اوزار:
ٽرافيف иCloud Formation . سافٽ ويئر ترتيب نامو . بنيادي اوزار:ناھي ، شيف، وغيره.
ڪو به ڪوڊ آهي git repositories ۾. ۽ جلدي يا بعد ۾ ٽيم ليڊر فيصلو ڪندو ته انهن کي ترتيب ڏيڻ جي ضرورت آهي. ۽ هو refactor ڪندو. ۽ اهو ڪجهه جوڙجڪ ٺاهيندو. ۽ هو ڏسندو ته اهو سٺو آهي.
اهو پڻ سٺو آهي ته اهو اڳ ۾ ئي موجود آهي
اوندهه ڪٿان آئي؟
تنهنڪري اسان آهستي آهستي بنيادي سوال ڏانهن وڌي رهيا آهيون.
سڀ کان پهريان، توهان کي هڪ مخزن سان شروع ڪرڻ جي ضرورت آهي جيڪا ٻين مخزن جي جوڙجڪ کي بيان ڪري ٿي، بشمول پاڻ. ۽ يقينا، GitOps جي حصي جي طور تي، توهان کي CI شامل ڪرڻ جي ضرورت آهي ته جيئن تبديليون خودڪار طور تي عمل ڪيو وڃي.
جيڪڏهن Git اڃا پيدا نه ڪيو ويو آهي؟
- Git ۾ ڪيئن ذخيرو ڪجي؟
- CI کي ڪيئن انسٽال ڪجي؟
- جيڪڏهن اسان IaC استعمال ڪندي Gitlab کي به ترتيب ڏيون، ۽ ڪبرنيٽس ۾ به؟
- ۽ GitLab رنر پڻ ڪبرنيٽس ۾؟
- ڪلائوڊ فراهم ڪندڙ ۾ ڪبرنيٽس بابت ڇا؟
پهرين ڇا آيو: GitLab جتي مان پنهنجو ڪوڊ اپ لوڊ ڪندس، يا اهو ڪوڊ جيڪو بيان ڪري ٿو ته مون کي ڪهڙي قسم جي GitLab جي ضرورت آهي؟
انڊيءَ سان ڪڪڙ
«اوياڪوڊون 3 هڪ ڊائناسور سان" [src ]
اچو ته ڪلائوڊ فراهم ڪندڙ جي طور تي استعمال ڪندي ڊش ٺاهڻ جي ڪوشش ڪريون
TL، ڊاڪٽر
ڇا اهو ممڪن آهي ته هڪ ڀيرو هڪ ٽيم ۾ شامل ٿيڻ؟
$ export MY_SELECTEL_TOKEN=<token>
$ curl https://gitlab.com/chicken-or-egg/mks/make/-/snippets/2002106/raw | bash
مادي
- اڪائونٽ my.selectel.ru کان؛
- اڪائونٽ ٽوڪن؛
- Kubernetes صلاحيتن؛
- هيلم مهارت؛
- Terraform صلاحيتن؛
- هيلم چارٽ GitLab؛
- هيلم چارٽ GitLab رنر.
ہدايت
- حاصل ڪريو MY_SELECTEL_TOKEN پينل مان my.selectel.ru.
- ان تي هڪ اڪائونٽ ٽوڪن منتقل ڪندي ڪبرنيٽس ڪلستر ٺاهيو.
- حاصل ڪريو KUBECONFIG ٺاهيل ڪلستر مان.
- Kubernetes تي GitLab انسٽال ڪريو.
- صارف لاءِ ٺاهيل GitLab مان GitLab-ٽوڪن حاصل ڪريو پاڙ.
- GitLab-token استعمال ڪندي GitLab ۾ پروجيڪٽ جو ڍانچو ٺاهيو.
- موجوده ڪوڊ کي دٻايو GitLab ڏانهن.
- ؟؟؟
- منافعو!
قدم 1. ٽوڪن سيڪشن ۾ حاصل ڪري سگھجي ٿو
قدم 2. اسان 2 نوڊس جو ڪلستر ”بيڪنگ“ لاءِ اسان جو Terraform تيار ڪريون ٿا. جيڪڏهن توهان کي پڪ آهي ته توهان وٽ هر شي لاءِ ڪافي وسيلا آهن، ته پوءِ توهان خودڪار ڪوٽا فعال ڪري سگهو ٿا:
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. اسان حاصل ڪيو cubeconfig.
پروگرام طور تي ڊائون لوڊ ڪرڻ لاءِ KUBECONFIG، توهان کي OpenStack مان هڪ ٽوڪن حاصل ڪرڻ جي ضرورت آهي:
openstack token issue -c id -f value > token
۽ هن ٽوڪن سان منظم ڪبرنيٽس سليڪٽيل 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. ڪلستر پڪل ٿيڻ کان پوءِ ۽ اسان وٽ ان تائين رسائي آهي، اسان ذائقي لاءِ مٿي تي يامل شامل ڪري سگهون ٿا.
مان شامل ڪرڻ چاهيان ٿو:
- نالي جي جاءِ
- اسٽوريج ڪلاس
- پوڊ سيڪيورٽي پاليسي وغيره.
شروعات کان وٺي مون زون ۾ هڪ ڪلستر چونڊيو ru-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- داخل ٿيڻ. ان کي انسٽال ڪرڻ لاءِ اڳ ۾ ئي ڪافي ھدايتون موجود آھن، تنھنڪري اسان ان تي نه رھنداسين.
$ 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
اسان ان جو انتظار ڪريون ٿا ان لاءِ هڪ خارجي IP حاصل ڪرڻ لاءِ اٽڪل 3-4 منٽن لاءِ:
حاصل ڪيل خارجي 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-token.
پهرين، لاگ ان پاسورڊ ڳولهيو:
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 repositories کي Gitlab فراهم ڪندڙ کي استعمال ڪندي صحيح درجي تي آڻڻ.
cd ../internal/gitlab/hierarchy && terraform apply -input=false -auto-approve planfile
بدقسمتي سان، terraform GitLab فراهم ڪندڙ هڪ سچل آهي
بگ . پوءِ توهان کي 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 رياست) CI ڏانهن. اهو ڪيئن ڪجي ايندڙ حصي ۾.
اسان جي رڪنيت حاصل ڪريو
بلاگ جيئن ته نئين مضمونن جي ڇڏڻ کي نه وڃايو!
جو ذريعو: www.habr.com