මුලින්ම පැමිණියේ කුමක්ද - කුකුල් මස් හෝ බිත්තරය? යටිතල පහසුකම්-කේතය පිළිබඳ ලිපියක් සඳහා අමුතු ආරම්භයක්, එසේ නොවේ ද?
බිත්තරයක් යනු කුමක්ද?
බොහෝ විට, Infrastructure-as-Code (IaC) යනු යටිතල පහසුකම් නියෝජනය කිරීමේ ප්රකාශන ක්රමයකි. එහි දෘඪාංග කොටසෙන් පටන් ගෙන මෘදුකාංග වින්යාසයෙන් අවසන් වන අපට ළඟා කර ගැනීමට අවශ්ය තත්ත්වය විස්තර කරමු. එබැවින් IaC භාවිතා කරනුයේ:
- සම්පත් ප්රතිපාදන. මේවා VMs, S3, VPC යනාදියයි. වැඩ සඳහා මූලික මෙවලම්:
භූමිෂ් .ය иCloudFormation . මෘදුකාංග වින්යාසය . මූලික මෙවලම්:පිළිතුරු , චෙෆ්, ආදිය.
ඕනෑම කේතයක් git ගබඩාවල ඇත. ඉක්මනින් හෝ පසුව කණ්ඩායම් නායකයා ඔවුන් පිළිවෙලට තැබිය යුතු බව තීරණය කරයි. තවද ඔහු නැවත සකස් කරනු ඇත. තවද එය යම් ව්යුහයක් නිර්මාණය කරනු ඇත. මෙය හොඳ බව ඔහු දකිනු ඇත.
එය දැනටමත් පැවතීම ද හොඳය
බිත්තරය පැමිණියේ කොහෙන්ද?
එබැවින් අපි ක්රමයෙන් ප්රධාන ප්රශ්නය වෙත ළඟා වෙමින් සිටිමු.
පළමුවෙන්ම, ඔබ ඇතුළුව අනෙකුත් ගබඩාවල ව්යුහය විස්තර කරන ගබඩාවකින් ආරම්භ කළ යුතුය. ඇත්ත වශයෙන්ම, GitOps හි කොටසක් ලෙස, ඔබ CI එකතු කළ යුතු අතර එමඟින් වෙනස්කම් ස්වයංක්රීයව ක්රියාත්මක වේ.
Git තවම නිර්මාණය කර නොමැති නම්?
- එය Git හි ගබඩා කරන්නේ කෙසේද?
- CI ස්ථාපනය කරන්නේ කෙසේද?
- අපි Gitlab IaC භාවිතයෙන් සහ Kubernetes හි පවා යෙදුවොත්?
- සහ GitLab Runner Kubernetes හි ද?
- වලාකුළු සපයන්නා තුළ Kubernetes ගැන කුමක් කිව හැකිද?
මුලින්ම පැමිණියේ කුමක්ද: මම මගේ කේතය උඩුගත කරන 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 කුසලතා;
- හෙල්ම් කුසලතා;
- ටෙරාෆෝම් කුසලතා;
- හෙල්ම් ප්රස්ථාරය GitLab;
- Helm chart GitLab Runner.
වට්ටෝරුව:
- පැනලයෙන් MY_SELECTEL_TOKEN ලබා ගන්න my.selectel.ru.
- ගිණුම් ටෝකනයක් එයට මාරු කිරීමෙන් Kubernetes පොකුරක් සාදන්න.
- සාදන ලද පොකුරෙන් KUBECONFIG ලබා ගන්න.
- Kubernetes මත GitLab ස්ථාපනය කරන්න.
- පරිශීලකයා සඳහා නිර්මාණය කරන ලද GitLab වෙතින් GitLab-ටෝකනය ලබා ගන්න මූල.
- 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. අපි 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 පැනලය හරහාද ප්රවේශ විය හැක.
පියවරක් 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. 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 එකක් ලැබෙන තෙක් අපි බලා සිටිමු:
ලැබුණු බාහිර 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. 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)
සිදු කරන ලදි:
නිගමනය
අපගේ දේශීය යන්ත්රයෙන් ප්රකාශනාත්මකව සියල්ල කළමනාකරණය කළ හැකි බව අපි සාක්ෂාත් කර ඇත්තෙමු. දැන් මට මේ සියලු කාර්යයන් CI වෙත මාරු කිරීමට අවශ්ය වන අතර බොත්තම් ඔබන්න. මෙය සිදු කිරීම සඳහා, අපි අපගේ ප්රාදේශීය රාජ්යයන් (Terraform state) CI වෙත මාරු කළ යුතුය. මෙය කරන්නේ කෙසේද යන්න ඊළඟ කොටසේ ඇත.
අපගේ Subscribe කරන්න
බ්ලොග් නව ලිපි නිකුත් කිරීම අතපසු නොකිරීමට!
මූලාශ්රය: www.habr.com