āĻĄāĻŋāĻŽ āĻāĻā§ āĻ¨āĻž āĻŽā§āĻ°āĻā§ ââāĻāĻā§? āĻāĻ¨āĻĢā§āĻ°āĻžāĻ¸ā§āĻā§āĻ°āĻžāĻāĻāĻžāĻ°-āĻ-āĻā§āĻĄ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻļ āĻ
āĻĻā§āĻā§āĻ¤ āĻļā§āĻ°ā§, āĻ¤āĻžāĻ āĻ¨āĻž?
āĻāĻāĻāĻŋ āĻĄāĻŋāĻŽ āĻāĻŋ?
āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ, āĻāĻ¨āĻĢā§āĻ°āĻžāĻ¸ā§āĻā§āĻ°āĻžāĻāĻāĻžāĻ°-āĻ-āĻā§āĻĄ (āĻāĻāĻāĻ¸āĻŋ) āĻšāĻ˛ āĻ āĻŦāĻāĻžāĻ āĻžāĻŽā§āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻāĻ°āĻžāĻ° āĻāĻāĻāĻŋ āĻā§āĻˇāĻŖāĻžāĻŽā§āĻ˛āĻ āĻāĻĒāĻžāĻ¯āĻŧāĨ¤ āĻāĻāĻŋāĻ¤ā§ āĻāĻŽāĻ°āĻž āĻšāĻžāĻ°ā§āĻĄāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻ āĻāĻļ āĻĨā§āĻā§ āĻļā§āĻ°ā§ āĻāĻ°ā§ āĻāĻŦāĻ āĻ¸āĻĢā§āĻāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻļā§āĻˇ āĻāĻ°ā§ āĻ¯ā§ āĻ āĻŦāĻ¸ā§āĻĨāĻžāĻāĻŋ āĻ āĻ°ā§āĻāĻ¨ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ āĻ¤āĻž āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻŋāĨ¤ āĻ¤āĻžāĻ IaC āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧ:
- āĻ¸āĻŽā§āĻĒāĻĻ āĻŦāĻŋāĻ§āĻžāĻ¨āĨ¤ āĻāĻā§āĻ˛ā§ āĻšāĻ˛ VM, S3, VPC āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋāĨ¤ āĻāĻžāĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŽā§āĻ˛āĻŋāĻ āĻ¸āĻ°āĻā§āĻāĻžāĻŽ:
Terraform иāĻā§āĻ˛āĻžāĻāĻĄāĻĢāĻ°ā§āĻŽā§āĻļāĻ¨ . āĻ¸āĻĢā§āĻāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ . āĻŽā§āĻ˛āĻŋāĻ āĻ¸āĻ°āĻā§āĻāĻžāĻŽ:Ansible , āĻļā§āĻĢ, āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋ
āĻ¯ā§āĻā§āĻ¨ā§ āĻā§āĻĄ āĻāĻŋāĻ āĻ°āĻŋāĻĒā§āĻāĻŋāĻāĻ°āĻŋāĻ¤ā§ āĻĨāĻžāĻā§āĨ¤ āĻāĻŦāĻ āĻļā§āĻā§āĻ°āĻ āĻŦāĻž āĻĒāĻ°ā§ āĻĻāĻ˛ā§āĻ° āĻ¨ā§āĻ¤āĻž āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨ā§āĻŦā§āĻ¨ āĻ¯ā§ āĻ¤āĻžāĻĻā§āĻ° āĻļā§āĻā§āĻāĻ˛āĻžāĻŦāĻĻā§āĻ§ āĻāĻ°āĻž āĻĻāĻ°āĻāĻžāĻ°āĨ¤ āĻāĻŦāĻ āĻ¤āĻŋāĻ¨āĻŋ āĻ°āĻŋāĻĢā§āĻ¯āĻžāĻā§āĻāĻ° āĻāĻ°āĻŦā§āĻ¨āĨ¤ āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻŋāĻā§ āĻāĻžāĻ āĻžāĻŽā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŦā§āĨ¤ āĻāĻŦāĻ āĻ¤āĻŋāĻ¨āĻŋ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻŦā§āĻ¨ āĻ¯ā§ āĻāĻāĻŋ āĻāĻžāĻ˛āĨ¤
āĻāĻāĻžāĻ āĻāĻžāĻ˛ā§ āĻ¯ā§ āĻāĻāĻž āĻāĻā§ āĻĨā§āĻā§āĻ āĻāĻā§
āĻĄāĻŋāĻŽ āĻā§āĻĨāĻž āĻĨā§āĻā§ āĻāĻ˛ā§?
āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž āĻ§ā§āĻ°ā§ āĻ§ā§āĻ°ā§ āĻŽā§āĻ˛ āĻĒā§āĻ°āĻļā§āĻ¨ā§āĻ° āĻāĻžāĻā§ āĻ¯āĻžāĻā§āĻāĻŋāĨ¤
āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻĻāĻŋāĻ¯āĻŧā§ āĻļā§āĻ°ā§ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻā§āĻ° āĻ¸āĻš āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§āĻ° āĻāĻ āĻ¨ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°ā§āĨ¤ āĻāĻŦāĻ āĻ āĻŦāĻļā§āĻ¯āĻ, GitOps āĻāĻ° āĻ āĻāĻļ āĻšāĻŋāĻ¸āĻžāĻŦā§, āĻāĻĒāĻ¨āĻžāĻā§ CI āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¯āĻžāĻ¤ā§ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻā§āĻ˛āĻŋ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻšāĻ¯āĻŧāĨ¤
āĻ¯āĻĻāĻŋ āĻāĻŋāĻ āĻāĻāĻ¨ā§ āĻ¤ā§āĻ°āĻŋ āĻ¨āĻž āĻšāĻ¯āĻŧ?
- āĻāĻŋāĻāĻžāĻŦā§ āĻāĻāĻŋ Git āĻ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻŦā§āĻ¨?
- āĻāĻŋāĻāĻžāĻŦā§ CI āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻŦā§āĻ¨?
- āĻāĻŽāĻ°āĻž āĻ¯āĻĻāĻŋ āĻāĻāĻāĻ¸āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻŋ, āĻāĻŽāĻ¨āĻāĻŋ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ā§āĻ?
- āĻāĻ° āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ°āĻžāĻ¨āĻžāĻ°āĻ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ā§?
- āĻā§āĻ˛āĻžāĻāĻĄ āĻĒā§āĻ°āĻĻāĻžāĻ¨āĻāĻžāĻ°ā§āĻ° āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻā§?
āĻĒā§āĻ°āĻĨāĻŽā§ āĻā§ āĻāĻ¸ā§āĻāĻŋāĻ˛: āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻŽāĻŋ āĻāĻŽāĻžāĻ° āĻā§āĻĄ āĻāĻĒāĻ˛ā§āĻĄ āĻāĻ°āĻŦ, āĻŦāĻž āĻā§āĻĄ āĻ¯āĻž āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°ā§ āĻ¯ā§ āĻāĻŽāĻžāĻ° āĻā§ āĻ§āĻ°āĻ¨ā§āĻ° āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻĻāĻ°āĻāĻžāĻ°?
āĻĄāĻŋāĻŽ āĻĻāĻŋāĻ¯āĻŧā§ āĻŽā§āĻ°āĻāĻŋ
ÂĢāĻāĻ¯āĻŧāĻžāĻā§āĻĄāĻ¨ āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻ¨ā§āĻ¸āĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ 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 āĻĻāĻā§āĻˇāĻ¤āĻž;
- āĻšā§āĻ˛āĻŽ āĻĻāĻā§āĻˇāĻ¤āĻž;
- āĻā§āĻ°āĻžāĻĢāĻ°ā§āĻŽ āĻĻāĻā§āĻˇāĻ¤āĻž;
- āĻšā§āĻ˛āĻŽ āĻāĻžāĻ°ā§āĻ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ;
- āĻšā§āĻ˛āĻŽ āĻāĻžāĻ°ā§āĻ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ°āĻžāĻ¨āĻžāĻ°āĨ¤
āĻ°ā§āĻ¸āĻŋāĻĒāĻŋ:
- āĻĒā§āĻ¯āĻžāĻ¨ā§āĻ˛ āĻĨā§āĻā§ MY_SELECTEL_TOKEN āĻĒāĻžāĻ¨ my.selectel.ru.
- āĻāĻāĻŋāĻ¤ā§ āĻāĻāĻāĻŋ āĻ ā§āĻ¯āĻžāĻāĻžāĻāĻ¨ā§āĻ āĻā§āĻā§āĻ¨ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°ā§ āĻāĻāĻāĻŋ Kubernetes āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨āĨ¤
- āĻ¤ā§āĻ°āĻŋ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻĨā§āĻā§ KUBECONFIG āĻĒāĻžāĻ¨āĨ¤
- Kubernetes āĻ 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. āĻāĻŽāĻ°āĻž cubconfig āĻĒā§āĻ¤ā§.
āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§āĻ¯āĻžāĻāĻŋāĻāĻāĻžāĻŦā§ 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
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
āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻžāĻ¯āĻŧ 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. āĻāĻŽāĻ°āĻž āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ-āĻā§āĻā§āĻ¨ āĻĒāĻžāĻāĨ¤
āĻĒā§āĻ°āĻĨāĻŽā§, āĻ˛āĻāĻāĻ¨ āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻā§āĻāĻā§ āĻŦā§āĻ° āĻāĻ°ā§āĻ¨:
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. āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻĒā§āĻ°ā§āĻāĻžāĻāĻĄāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻŋāĻ āĻ°āĻŋāĻĒā§āĻāĻŋāĻāĻ°āĻŋāĻā§āĻ˛āĻŋāĻā§ āĻ¸āĻ āĻŋāĻ āĻ āĻ¨ā§āĻā§āĻ°āĻŽā§ āĻāĻ¨āĻžāĨ¤
cd ../internal/gitlab/hierarchy && terraform apply -input=false -auto-approve planfile
āĻĻā§āĻ°ā§āĻāĻžāĻā§āĻ¯āĻŦāĻļāĻ¤, āĻā§āĻ°āĻžāĻĢāĻ°ā§āĻŽ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻĒā§āĻ°āĻĻāĻžāĻ¨āĻāĻžāĻ°ā§āĻ° āĻāĻāĻāĻŋ āĻāĻžāĻ¸āĻŽāĻžāĻ¨ āĻāĻā§
āĻŦāĻžāĻ . āĻ¤āĻžāĻ°āĻĒāĻ° 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