Yini eyafika kuqala - inkukhu noma iqanda? Isiqalo esiyinqaba ngempela sendatshana emayelana Nengqalasizinda-njenge-Code, akunjalo?
Liyini iqanda?
Ngokuvamile, Ingqalasizinda-njenge-Code (IaC) iyindlela ememezelayo yokumela ingqalasizinda. Kuyo sichaza isimo esifuna ukusifinyelela, siqala engxenyeni yehadiwe futhi sigcine ngokucushwa kwesoftware. Ngakho-ke i-IaC isetshenziselwa:
- Ukuhlinzekwa kwezinsiza. Lawa ama-VM, S3, VPC, njll. Amathuluzi ayisisekelo okusebenza:
I-Terraform ΠΈCloudFormation . Ukucushwa Kwesoftware . Amathuluzi ayisisekelo:Ansible , Umpheki, njll.
Noma iyiphi ikhodi iku-git repositories. Futhi ngokushesha noma kamuva umholi weqembu uzonquma ukuthi badinga ukuhlelwa. Futhi uzokwenza refactor. Futhi izodala isakhiwo esithile. Futhi uzobona ukuthi kuhle lokhu.
Kuhle futhi ukuthi isivele ikhona
Lavelaphi iqanda?
Ngakho kancane kancane sisondela embuzweni oyinhloko.
Okokuqala, udinga ukuqala ngenqolobane echaza isakhiwo sezinye izinqolobane, kuhlanganise nawe. Futhi kunjalo, njengengxenye ye-GitOps, udinga ukwengeza i-CI ukuze izinguquko zenzeke ngokuzenzakalelayo.
Uma i-Git ingakadalwa?
- Ungayigcina kanjani ku-Git?
- Indlela yokufaka i-CI?
- Uma futhi sisebenzisa i-Gitlab sisebenzisa i-IaC, ngisho naku-Kubernetes?
- Futhi i-GitLab Runner nayo ku-Kubernetes?
- Kuthiwani nge-Kubernetes kumhlinzeki wamafu?
Yini eza kuqala: i-GitLab lapho ngizolayisha khona ikhodi yami, noma ikhodi echaza ukuthi hlobo luni lwe-GitLab engiludingayo?
Inkukhu namaqanda
Β«Oyakodon 3 nge-dinosaur" [src ]
Ake sizame ukupheka isidlo sisebenzisa njengomhlinzeki wamafu
TL; DR
Kungenzeka yini ukujoyina iqembu elilodwa ngesikhathi esisodwa?
$ export MY_SELECTEL_TOKEN=<token>
$ curl https://gitlab.com/chicken-or-egg/mks/make/-/snippets/2002106/raw | bash
Izithako:
- I-akhawunti evela ku-my.selectel.ru;
- Ithokheni ye-akhawunti;
- Amakhono e-Kubernetes;
- Amakhono oHelm;
- Amakhono e-Terraform;
- Ishadi le-Helm GitLab;
- Ishadi le-Helm GitLab Runner.
Iresiphi:
- Thola i-MY_SELECTEL_TOKEN kusuka kuphaneli my.selectel.ru.
- Dala iqoqo le-Kubernetes ngokudlulisela ithokheni ye-akhawunti kulo.
- Thola i-KUBECONFIG kusukela kuqoqo elidaliwe.
- Faka i-GitLab ku-Kubernetes.
- Thola ithokheni ye-GitLab evela ku-GitLab eyenzelwe umsebenzisi izimpande.
- Dala ukwakheka kwephrojekthi ku-GitLab usebenzisa ithokheni ye-GitLab.
- Phusha ikhodi ekhona ku-GitLab.
- ???
- Inzuzo!
Isinyathelo 1. Ithokheni ingatholakala esigabeni
Isinyathelo 2. Silungiselela i-Terraform yethu "yokubhaka" iqoqo lamanodi angu-2. Uma uqinisekile ukuthi unezinsiza ezanele zayo yonke into, ungavumela ama-quota azenzakalelayo:
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",
}
}
Engeza umsebenzisi kuphrojekthi:
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
}
Okukhiphayo:
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
}
Masiqalise:
$ 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
Isinyathelo 3. Sithola i-cubeconfig.
Ukuze ulande i-KUBECONFIG ngokuhlelekile, udinga ukuthola ithokheni ku-OpenStack:
openstack token issue -c id -f value > token
Futhi ngaleli thokheni yenza isicelo ku-Managed Kubernetes Selectel API. k8s_id izindaba terraform:
curl -XGET -H "x-auth-token: $(cat token)" "https://ru-3.mks.selcloud.ru/v1/clusters/$(cat k8s_id)/kubeconfig" -o kubeConfig.yaml
I-Cupconfig ingafinyelelwa ngephaneli.
Isinyathelo 4. Ngemva kokuba iqoqo selibhakiwe futhi sesikwazi ukulifinyelela, singangeza i-yaml phezulu ukuze sinambithe.
Ngincamela ukungeza:
- indawo yamagama
- ikilasi lokugcina
- inqubomgomo yokuphepha ye-pod nokunye.
Kusukela ekuqaleni ngikhethe iqoqo endaweni ru-3a, bese ngidinga Ikilasi Lesitoreji kusuka kule zoni.
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
Isinyathelo 5. Faka isilinganisi somthwalo.
Sizosebenzisa okujwayelekile kwabaningi nginx-ingress. Sekuvele kunemiyalo eminingi yokuyifaka, ngakho-ke ngeke sihlale kuyo.
$ 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
Silinda ukuthi ithole i-IP yangaphandle cishe imizuzu emi-3-4:
Ithole i-IP yangaphandle:
Isinyathelo 6. Faka i-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"
Siphinde silinde ukuthi wonke ama-pods akhuphuke.
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...
Ama-pods rose:
Isinyathelo 7. Sithola ithokheni ye-GitLab.
Okokuqala, thola iphasiwedi yokungena:
kubectl get secret -n gitlab gitlab-gitlab-initial-root-password -o jsonpath='{.data.password}' | base64 --decode
Manje ake singene futhi sithole ithokheni:
python3 get_gitlab_token.py root $GITLAB_PASSWORD http://gitlab.gitlab.$EXTERNAL_IP.nip.io
Isinyathelo 8. Ukuletha amakhosombe e-Git ohlwini olulungile kusetshenziswa Umhlinzeki we-Gitlab.
cd ../internal/gitlab/hierarchy && terraform apply -input=false -auto-approve planfile
Ngeshwa, umhlinzeki we-terraform GitLab unokuntanta
iphutha . Bese kuzodingeka ukuthi ususe amaphrojekthi angqubuzanayo ngesandla ukuze i-tf.state ilungiswe. Bese uqalisa kabusha umyalo othi `$make all`
Isinyathelo 9. Sidlulisela amakhosombe endawo kuseva.
$ 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)
Kwenziwe:
isiphetho
Sizuze ukuthi singakwazi ukuphatha yonke into ngokumemezela emshinini wethu wasendaweni. Manje ngifuna ukudlulisela yonke le misebenzi ku-CI bese ngivele ngicindezele izinkinobho. Ukuze senze lokhu, sidinga ukudlulisela izifunda zethu zasendaweni (isifunda se-Terraform) ku-CI. Indlela yokwenza lokhu isengxenyeni elandelayo.
Bhalisela yethu
Π±Π»ΠΎΠ³ ukuze ungaphuthelwa ukukhululwa kwezihloko ezintsha!
Source: www.habr.com