කුකුල් මස් හෝ බිත්තරය: IaC බෙදීම

කුකුල් මස් හෝ බිත්තරය: IaC බෙදීම
මුලින්ම පැමිණියේ කුමක්ද - කුකුල් මස් හෝ බිත්තරය? යටිතල පහසුකම්-කේතය පිළිබඳ ලිපියක් සඳහා අමුතු ආරම්භයක්, එසේ නොවේ ද?

බිත්තරයක් යනු කුමක්ද?

බොහෝ විට, Infrastructure-as-Code (IaC) යනු යටිතල පහසුකම් නියෝජනය කිරීමේ ප්‍රකාශන ක්‍රමයකි. එහි දෘඪාංග කොටසෙන් පටන් ගෙන මෘදුකාංග වින්‍යාසයෙන් අවසන් වන අපට ළඟා කර ගැනීමට අවශ්‍ය තත්ත්වය විස්තර කරමු. එබැවින් IaC භාවිතා කරනුයේ:

  1. සම්පත් ප්රතිපාදන. මේවා VMs, S3, VPC යනාදියයි. වැඩ සඳහා මූලික මෙවලම්: භූමිෂ් .ය и CloudFormation.
  2. මෘදුකාංග වින්‍යාසය. මූලික මෙවලම්: පිළිතුරු, චෙෆ්, ආදිය.

ඕනෑම කේතයක් git ගබඩාවල ඇත. ඉක්මනින් හෝ පසුව කණ්ඩායම් නායකයා ඔවුන් පිළිවෙලට තැබිය යුතු බව තීරණය කරයි. තවද ඔහු නැවත සකස් කරනු ඇත. තවද එය යම් ව්යුහයක් නිර්මාණය කරනු ඇත. මෙය හොඳ බව ඔහු දකිනු ඇත.

එය දැනටමත් පැවතීම ද හොඳය GitLab и GitHubTerraform සඳහා -provider (සහ මෙය මෘදුකාංග වින්‍යාසයයි). ඔවුන්ගේ සහාය ඇතිව, ඔබට සම්පූර්ණ ව්‍යාපෘතිය කළමනාකරණය කළ හැකිය: කණ්ඩායම් සාමාජිකයන්, CI/CD, git-flow, ආදිය.

බිත්තරය පැමිණියේ කොහෙන්ද?

එබැවින් අපි ක්රමයෙන් ප්රධාන ප්රශ්නය වෙත ළඟා වෙමින් සිටිමු.

පළමුවෙන්ම, ඔබ ඇතුළුව අනෙකුත් ගබඩාවල ව්යුහය විස්තර කරන ගබඩාවකින් ආරම්භ කළ යුතුය. ඇත්ත වශයෙන්ම, GitOps හි කොටසක් ලෙස, ඔබ CI එකතු කළ යුතු අතර එමඟින් වෙනස්කම් ස්වයංක්‍රීයව ක්‍රියාත්මක වේ.

Git තවම නිර්මාණය කර නොමැති නම්?

  1. එය Git හි ගබඩා කරන්නේ කෙසේද?
  2. CI ස්ථාපනය කරන්නේ කෙසේද?
  3. අපි Gitlab IaC භාවිතයෙන් සහ Kubernetes හි පවා යෙදුවොත්?
  4. සහ GitLab Runner Kubernetes හි ද?
  5. වලාකුළු සපයන්නා තුළ Kubernetes ගැන කුමක් කිව හැකිද?

මුලින්ම පැමිණියේ කුමක්ද: මම මගේ කේතය උඩුගත කරන GitLab හෝ මට අවශ්‍ය කුමන ආකාරයේ GitLab විස්තර කරන කේතයද?

බිත්තර සමග කුකුල් මස්

«ඔයකොඩොන්3 ඩයිනෝසෝරයෙකු සමඟ" [src]

වලාකුළු සපයන්නෙකු ලෙස භාවිතා කර කෑමක් පිසීමට උත්සාහ කරමු කළමනාකරණය කළ Kubernetes Selectel.

TL; ඩී

එක කණ්ඩායමකට එකවර එකතු විය හැකිද?

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

අමුද්රව්ය:

  • my.selectel.ru වෙතින් ගිණුම;
  • ගිණුම් ටෝකනය;
  • Kubernetes කුසලතා;
  • හෙල්ම් කුසලතා;
  • ටෙරාෆෝම් කුසලතා;
  • හෙල්ම් ප්‍රස්ථාරය GitLab;
  • Helm chart GitLab Runner.

වට්ටෝරුව:

  1. පැනලයෙන් MY_SELECTEL_TOKEN ලබා ගන්න my.selectel.ru.
  2. ගිණුම් ටෝකනයක් එයට මාරු කිරීමෙන් Kubernetes පොකුරක් සාදන්න.
  3. සාදන ලද පොකුරෙන් KUBECONFIG ලබා ගන්න.
  4. Kubernetes මත GitLab ස්ථාපනය කරන්න.
  5. පරිශීලකයා සඳහා නිර්මාණය කරන ලද GitLab වෙතින් GitLab-ටෝකනය ලබා ගන්න මූල.
  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. අපි cubeconfig ලබා ගනිමු.

ක්‍රමලේඛනගතව 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. පොකුර පිළිස්සූ පසු සහ අපට එයට ප්‍රවේශය ලැබුණු පසු, අපට රස කිරීමට ඉහළට යාල් එකතු කළ හැකිය.

මම එකතු කිරීමට කැමැත්තෙමි:

  • නාම අවකාශය
  • ගබඩා පන්තිය
  • පොඩ් ආරක්ෂක ප්‍රතිපත්තිය සහ යනාදිය.

ගබඩා පන්තිය සඳහා Selectel වෙතින් ලබා ගත හැක නිල ගබඩාව.

මුල සිටම මම කලාපයේ පොකුරක් තෝරා ගත්තා 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. load balancer එකක් සවි කරන්න.

අපි බොහෝ අය සඳහා සම්මත එක භාවිතා කරන්නෙමු 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. Gitlab Provider භාවිතයෙන් Git ගබඩා නිවැරදි ධුරාවලියට ගෙන ඒම.

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

අවාසනාවකට, ටෙරාෆෝම් 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)

සිදු කරන ලදි:

කුකුල් මස් හෝ බිත්තරය: IaC බෙදීම
කුකුල් මස් හෝ බිත්තරය: IaC බෙදීම
කුකුල් මස් හෝ බිත්තරය: IaC බෙදීම

නිගමනය

අපගේ දේශීය යන්ත්‍රයෙන් ප්‍රකාශනාත්මකව සියල්ල කළමනාකරණය කළ හැකි බව අපි සාක්ෂාත් කර ඇත්තෙමු. දැන් මට මේ සියලු කාර්යයන් CI වෙත මාරු කිරීමට අවශ්‍ය වන අතර බොත්තම් ඔබන්න. මෙය සිදු කිරීම සඳහා, අපි අපගේ ප්‍රාදේශීය රාජ්‍යයන් (Terraform state) CI වෙත මාරු කළ යුතුය. මෙය කරන්නේ කෙසේද යන්න ඊළඟ කොටසේ ඇත.

අපගේ Subscribe කරන්න බ්ලොග්නව ලිපි නිකුත් කිරීම අතපසු නොකිරීමට!

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න