рдкрд╣рд┐рд▓реЗ рдХреЗ рдЖрдпреЛ - рдХреБрдЦреБрд░рд╛ рд╡рд╛ рдЕрдгреНрдбрд╛? рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░-рдПрдЬ-рдХреЛрдбрдХреЛ рдмрд╛рд░реЗрдорд╛ рд▓реЗрдЦрдХреЛ рд▓рд╛рдЧрд┐ рдПрдХрджрдореИ рдЕрдиреМрдареЛ рд╕реБрд░реБрд╡рд╛рдд, рд╣реИрди?
рдЕрдгреНрдбрд╛ рдХреЗ рд╣реЛ?
рдкреНрд░рд╛рдпрдГ, рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░-рдПрдЬ-рдХреЛрдб (IaC) рдкреВрд░реНрд╡рд╛рдзрд╛рд░рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдиреЗ рдШреЛрд╖рдгрд╛рддреНрдордХ рддрд░рд┐рдХрд╛ рд╣реЛред рдпрд╕рдорд╛ рд╣рд╛рдореАрд▓реЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рднрд╛рдЧрдмрд╛рдЯ рд╕реБрд░реБ рдЧрд░реА рд╕рдлреНрдЯрд╡реЗрдпрд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ рд╕рдорд╛рдкреНрдд рд╣реБрдиреЗ рдЕрд╡рд╕реНрдерд╛рдХреЛ рд╡рд░реНрдгрди рдЧрд░реНрдЫреМрдВред рддреНрдпрд╕реИрд▓реЗ IaC рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ:
- рд╕реНрд░реЛрдд рдкреНрд░рд╛рд╡рдзрд╛рдиред рдпреА VMs, S3, VPC, рдЖрджрд┐ рд╣реБрдиреНред рдХрд╛рдордХреЛ рд▓рд╛рдЧрд┐ рдЖрдзрд╛рд░рднреВрдд рдЙрдкрдХрд░рдгрд╣рд░реВ:
рдЯреНрд░рд╛рдлрд░реНрдо ╨╕CloudFormation . рд╕рдлреНрдЯрд╡реЗрдпрд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди ред рдЖрдзрд╛рд░рднреВрдд рдЙрдкрдХрд░рдгрд╣рд░реВ:рдЕрдЬреНрдЮрд╛рдд , рд╢реЗрдл, рдЖрджрд┐ред
рдХреБрдиреИ рдкрдирд┐ рдХреЛрдб git рднрдгреНрдбрд╛рд░рд╣рд░реВрдорд╛ рдЫред рд░ рдврд┐рд▓реЛ рд╡рд╛ рдкрдЫрд┐ рдЯреЛрд▓реА рдиреЗрддрд╛рд▓реЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдиреЗрдЫ рдХрд┐ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рд░ рдЙрд╕рд▓реЗ рд░рд┐рдлреНрдпрд╛рдХреНрдЯрд░ рдЧрд░реНрдиреЗрдЫред рд░ рдпрд╕рд▓реЗ рдХреЗрд╣реА рд╕рдВрд░рдЪрдирд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗрдЫред рд░ рдЙрд╕рд▓реЗ рджреЗрдЦреНрдиреЗрдЫ рдХрд┐ рдпреЛ рд░рд╛рдореНрд░реЛ рдЫред
рдпреЛ рдкрдирд┐ рд░рд╛рдореНрд░реЛ рдЫ рдХрд┐ рдпреЛ рдкрд╣рд┐рд▓реЗ рдиреИ рдЕрд╡рд╕реНрдерд┐рдд рдЫ
рдЕрдгреНрдбрд╛ рдХрд╣рд╛рдБрдмрд╛рдЯ рдЖрдпреЛ ?
рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА рдмрд┐рд╕реНрддрд╛рд░реИ рдореБрдЦреНрдп рдкреНрд░рд╢реНрдирдорд╛ рдкреБрдЧреНрджреИрдЫреМрдВред
рд╕рдмреИ рднрдиреНрджрд╛ рдкрд╣рд┐рд▓реЗ, рддрдкрд╛рдЗрдБ рдПрдХ рднрдгреНрдбрд╛рд░ рд╕рдВрдЧ рд╕реБрд░реБ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рдЬреБрди рддрдкрд╛рдЗрдБ рд╕рд╣рд┐рдд рдЕрдиреНрдп рднрдгреНрдбрд╛рд░ рдХреЛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╡рд░реНрдгрди рдЧрд░реНрджрдЫред рд░ рдЕрд╡рд╢реНрдп рдкрдирд┐, GitOps рдХреЛ рднрд╛рдЧрдХреЛ рд░реВрдкрдорд╛, рддрдкрд╛рдИрдВрд▓реЗ CI рдердкреНрдиреБ рдкрд░реНрдЫ рддрд╛рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реБрдиреНрдЫрдиреНред
рдпрджрд┐ Git рдЕрдЭреИ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫреИрди?
- рдпрд╕рд▓рд╛рдИ Git рдорд╛ рдХрд╕рд░реА рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдиреЗ?
- CI рдХрд╕рд░реА рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗ?
- рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ Gitlab рд▓рд╛рдИ IaC рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд░ Kubernetes рдорд╛ рдкрдирд┐ рддреИрдирд╛рдд рдЧрд░реНрдЫреМрдВ рднрдиреЗ?
- рд░ GitLab рдзрд╛рд╡рдХ рдкрдирд┐ 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;
- рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯ GitLab рдзрд╛рд╡рдХред
рдкрдХрд╛рдЙрдиреБрд╣реЛрд╕реН:
- рдкреНрдпрд╛рдирд▓рдмрд╛рдЯ MY_SELECTEL_TOKEN рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН my.selectel.ru.
- рдпрд╕рдорд╛ рдЦрд╛рддрд╛ рдЯреЛрдХрди рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реЗрд░ Kubernetes рдХреНрд▓рд╕реНрдЯрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
- рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдХреНрд▓рд╕реНрдЯрд░рдмрд╛рдЯ KUBECONFIG рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред
- Kubernetes рдорд╛ GitLab рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
- рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ GitLab рдмрд╛рдЯ GitLab-рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдореВрд▓.
- GitLab-рдЯреЛрдХрди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ 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 рдореБрджреНрджрд╛рд╣рд░реВ terraform:
curl -XGET -H "x-auth-token: $(cat token)" "https://ru-3.mks.selcloud.ru/v1/clusters/$(cat k8s_id)/kubeconfig" -o kubeConfig.yaml
рдХрдк рдХрдиреНрдлрд┐рдЧ рдкреНрдпрд╛рдирд▓ рдорд╛рд░реНрдлрдд рдкрдирд┐ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
4 рдХрджрдоред рдХреНрд▓рд╕реНрдЯрд░ рдмреЗрдХ рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐ рд░ рд╣рд╛рдореАрд╕рдБрдЧ рдпрд╕рдорд╛ рдкрд╣реБрдБрдЪ рдЫ, рд╣рд╛рдореА рд╕реНрд╡рд╛рджрдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рдерд┐ yaml рдердкреНрди рд╕рдХреНрдЫреМрдВред
рдо рдердкреНрди рд░реБрдЪрд╛рдЙрдБрдЫреБ:
- рдирд╛рдо рд╕реНрдерд╛рди
- рднрдгреНрдбрд╛рд░рдг рд╡рд░реНрдЧ
- рдкреЛрдб рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐ рд░ рдпрд╕реНрддреИред
рд╕реБрд░реБрдорд╛ рдореИрд▓реЗ рдЬреЛрдирдорд╛ рдХреНрд▓рд╕реНрдЯрд░ рдЪрдпрди рдЧрд░реЗрдВ 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
рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ 3-4 рдорд┐рдиреЗрдЯрдХреЛ рд▓рд╛рдЧрд┐ рдмрд╛рд╣реНрдп рдЖрдИрдкреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдкрд░реНрдЦрдиреНрдЫреМрдВ:
рдкреНрд░рд╛рдкреНрдд рдмрд╛рд╣реНрдп рдЖрдИрдкреА:
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 рдкреНрд░рджрд╛рдпрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рд╣реА рдкрджрд╛рдиреБрдХреНрд░рдордорд╛ 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 рдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБ рд░ рдмрдЯрдирд╣рд░реВ рдерд┐рдЪреНрдиреБрд╣реЛрд╕реНред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░рд╛ рд╕реНрдерд╛рдиреАрдп рд░рд╛рдЬреНрдпрд╣рд░реВ (рдЯреЗрд░рд╛рдлрд░реНрдо рд░рд╛рдЬреНрдп) CI рдорд╛ рд╣рд╕реНрддрд╛рдиреНрддрд░рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпреЛ рдХрд╕рд░реА рдЧрд░реНрдиреЗ рдЕрд░реНрдХреЛ рднрд╛рдЧрдорд╛ рдЫред
рд╣рд╛рдореНрд░реЛ рд╕рджрд╕реНрдпрддрд╛ рд▓рд┐рдиреБрд╣реЛрд╕реН
рдмреНрд▓рдЧ рдирдпрд╛рдБ рд▓реЗрдЦрд╣рд░реВрдХреЛ рд░рд┐рд▓реАрдЬ рдирдЫреБрдЯрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐!
рд╕реНрд░реЛрдд: www.habr.com