ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Kubernetes ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Kubespray ΠΈ Terraform Π² Yandex Cloud
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ Π±ΡΠ»Π° ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° Π±Π°Π·Π΅ Π²ΠΈΠ΄Π΅ΠΎ "Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Kubernetes Ρ ΠΏΠΎΠΌΠΎΡΡΡ Kubespray" Π² Youtube.
ΠΠΎΠ΄ Π±ΡΠ» ΡΠΎΡΠΊΠ½ΡΡ ΠΈΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ https://git.cloud-team.ru/lections/kubernetes_setup ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ ΠΏΠ°ΡΡΠ°ΠΌΠΈ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ https://github.com/patsevanton/kubespray_terraform_yandex_cloud
Π‘Π°ΠΌΠΎΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ Π² ΡΡΠΎΠΌ ΠΏΠΎΡΡΠ΅ Π΄Π»Ρ devops ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ² Ρ ΠΎΠΏΡΡΠΎΠΌ ΡΡΠΎ ΡΠΊΡΠΈΠΏΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ansible inventory ΡΠ°ΠΉΠ»Π° ΠΈΠ· terraform ΡΡΡΡΠΊΡΡΡ.
Yandex.Cloud - ΠΎΠ±Π»Π°ΡΠ½Π°Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ ΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ ΡΠΈΡΡΠΎΠ²ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΠΈ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π―Π½Π΄Π΅ΠΊΡΠ°.
Kubespray β ΡΡΠΎ Π½Π°Π±ΠΎΡ Ansible ΡΠΎΠ»Π΅ΠΉ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°ΠΌΠΈ Kubernetes.
Kubernetes (K8s) - ΡΡΠΎ ΠΎΡΠΊΡΡΡΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ, ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ.
https://cloud.yandex.ru/docs/billing/quickstart/
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Yandex.Cloud (CLI) β ΡΠΊΠ°ΡΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π°ΡΠΈΠΌΠΈ ΠΎΠ±Π»Π°ΡΠ½ΡΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ.
$ curl https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash
https://cloud.yandex.ru/docs/cli/quickstart
Binenv - ΡΡΠΈΠ»ΠΈΡΠ° Π·Π°Π³ΡΡΠ·ΠΊΠΈ, ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±ΠΈΠ½Π°ΡΠ½ΡΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π°ΠΌ Π½ΡΠΆΠ½Ρ Π² ΠΏΠΎΠ²ΡΠ΅Π΄Π½Π΅Π²Π½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ DevOps (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, kubectl, helm, ...).
Terraform β ΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ·ΡΠΊ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ HCL (HashiCorp Configuration Language) Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π½ΡΠΆΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΠ½ΠΎΠΉ ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ "ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ" Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ°ΡΠ΅ΠΌ ΠΎΠ½ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΏΠ»Π°Π½ Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΠ»Π°Π½ ΠΏΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ. https://cloud.yandex.ru/docs/solutions/infrastructure-management/terraform-quickstart https://gcorelabs.com/ru/blog/why-you-need-terraform/
$ binenv install terraform
Kubectl β ΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°ΠΌΠΈ Kubernetes.
$ binenv install kubectl
Helm β ΡΡΠΎ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π΄Π»Ρ Kubernetes, ΡΠΏΡΠΎΡΠ°ΡΡΠΈΠΉ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΡ, Π½Π°ΡΡΡΠΎΠΉΠΊΡ ΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΡΠ»ΡΠΆΠ± Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ°Ρ Kubernetes.
$ binenv install helm
JQ - ΡΡΠΈΠ»ΠΈΡΠ° Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π°, ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ, ΡΡΠ°Π²Π½ΠΈΡ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ JSON.
$ sudo apt install jq
$ sudo apt install python3-pip git
Π‘ΠΊΠ°ΡΠ°Π΅ΠΌ Kubespray Π²Π΅ΡΡΠΈΠΈ 2.14.2 ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄Π»Ρ Kubespray
ΠΡΠ±ΠΈΡΠ°Π΅ΠΌ Π²Π΅ΡΡΠΈΡ 2.14.2, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π±ΡΠ»Π° Π²Π΅ΡΡΠΈΡ 2.14.2
$ wget https://github.com/kubernetes-sigs/kubespray/archive/refs/tags/v2.14.2.tar.gz
$ tar -xvzf v2.14.2.tar.gz
$ mv kubespray-2.14.2 kubespray
$ sudo pip3 install -r kubespray/requirements.txt
$ cp terraform/private.auto.tfvars.example terraform/private.auto.tfvars
$ yc config list
$ vim terraform/private.auto.tfvars
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ² Π² Yandex Cloud ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Kubernetes ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Kubespray
$ bash cluster_install.sh
2 ingress ΠΈ 2 worker ΡΠ΄Π΅Π»Π°Π½Ρ Π΄Π»Ρ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΠΈ ΠΈ Π΄Π»Ρ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ².
resource "yandex_vpc_network" "k8s-network" {
name = "k8s-network"
}
yandex_vpc_network β ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΠ±Π»Π°ΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈ. ΠΠ±Π»Π°ΡΠ½Π°Ρ ΡΠ΅ΡΡ β ΡΡΠΎ Π°Π½Π°Π»ΠΎΠ³ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈ Π² Π΄Π°ΡΠ°-ΡΠ΅Π½ΡΡΠ΅. ΠΠ±Π»Π°ΡΠ½ΡΠ΅ ΡΠ΅ΡΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±Π»Π°ΡΠ½ΡΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ ΠΈ ΡΠ²ΡΠ·ΠΈ ΡΠ΅ΡΡΡΡΠΎΠ² Ρ ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠΎΠΌ. Π Π΅ΡΡΡΡ yandex_vpc_network Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Virtual Private Cloud
yandex_vpc_subnet β ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΡΠ΅ΡΠΈ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π°. ΠΠΎΠ΄ΡΠ΅ΡΡ β ΡΡΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ IP-Π°Π΄ΡΠ΅ΡΠΎΠ² Π² ΠΎΠ±Π»Π°ΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈ. ΠΠ΄ΡΠ΅ΡΠ° ΠΈΠ· ΡΡΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΌΠΎΠ³ΡΡ Π½Π°Π·Π½Π°ΡΠ°ΡΡΡΡ ΠΎΠ±Π»Π°ΡΠ½ΡΠΌ ΡΠ΅ΡΡΡΡΠ°ΠΌ β ΠΠ ΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°ΠΌ Π±Π°Π· Π΄Π°Π½Π½ΡΡ . ΠΠΎΠ΄ΡΠ΅ΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΎΠ±Π»Π°ΡΠ½Π°Ρ ΡΠ΅ΡΡ. Π Π°Π·ΠΌΠ΅Ρ ΠΏΠΎΠ΄ΡΠ΅ΡΠΈ Π·Π°Π΄Π°Π΅ΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ Π±Π΅ΡΠΊΠ»Π°ΡΡΠΎΠ²ΠΎΠΉ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΠΈ (CIDR). Π ΠΏΠΎΠ΄ΡΠ΅ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΠ½ΡΠ΅ IPv4-Π°Π΄ΡΠ΅ΡΠ° ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π² RFC 1918
resource "yandex_vpc_subnet" "k8s-subnet-1" {
name = "k8s-subnet-1"
zone = "ru-central1-a"
network_id = yandex_vpc_network.k8s-network.id
v4_cidr_blocks = ["192.168.10.0/24"]
depends_on = [
yandex_vpc_network.k8s-network,
]
}
Π ΡΡΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠ΅ΡΡΡΡ yandex_vpc_subnet Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ k8s-subnet-1 Π² Π·ΠΎΠ½Π΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ ru-central1-a, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ΅ΡΡ v4_cidr_blocks Π±ΡΠ΄Π΅Ρ 192.168.10.0/24.
Π Π΅ΡΡΡΡ "yandex_vpc_subnet" "k8s-subnet-1" Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Virtual Private Cloud Π² ΡΠ°Π·Π΄Π΅Π»Π΅ k8s-network
yandex_iam_service_account β ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ°. ΠΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² Instance Groups Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ°. Π Π΅ΡΡΡΡ "yandex_iam_service_account" Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, Π³Π΄Π΅ Π²Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Π‘Π΅ΡΠ²ΠΈΡΠ½ΡΠ΅ Π°ΠΊΠΊΠ°ΡΠ½ΡΡ.
Instance Groups β ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠ΅ΡΠ²ΠΈΡΠ° Compute Cloud, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π³ΡΡΠΏΠΏΠ°ΠΌΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½. Instance Groups Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΠ΅Ρ ΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΡΠ΅Ρ Π½Π΅ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΡΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ Π² Π³ΡΡΠΏΠΏΠ΅ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ. Π Π΅ΡΡΡΡ "yandex_compute_instance_group" Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Compute Cloud Π² ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΡΡΠΏΠΏΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½
Π Π΅ΡΡΡΡ yandex_storage_bucket Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Object Storage. ΠΠΌΠ΅Π½Π° Π±Π°ΠΊΠ΅ΡΠΎΠ² ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½Ρ Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ Object Storage, Ρ.Π΅. Π½Π΅Π»ΡΠ·Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π²Π° Π±Π°ΠΊΠ΅ΡΠ° Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π΄Π°ΠΆΠ΅ Π² ΡΠ°Π·Π½ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°Ρ ΡΠ°Π·Π½ΡΡ ΠΎΠ±Π»Π°ΠΊΠΎΠ². ΠΠΎΠΌΠ½ΠΈΡΠ΅ ΠΎΠ± ΡΡΠΎΠΌ, Π΅ΡΠ»ΠΈ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π±Π°ΠΊΠ΅ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅ΡΠ΅Π· API.
$ mkdir -p ~/.kube && cp kubespray/inventory/mycluster/artifacts/admin.conf ~/.kube/config
$ kubectl apply -f manifests/test-app.yml
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΡΠ°ΠΉΠ» hosts ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΈ IP Π°Π΄ΡΠ΅ΡΠ°Ρ Π½Π°ΡΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ²
$ sudo sh -c "cat kubespray_inventory/etc-hosts >> /etc/hosts"
$ curl hello.local
Hello from my-deployment-784598767c-7gjjs
Kubernetes Dashboard - ΡΡΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ Π²Π΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ² Kubernetes. ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΌΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅, ΠΈ ΡΡΡΡΠ°Π½ΡΡΡ ΠΈΡ Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ°ΠΌΠΈΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠΌ.
$ helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
$ helm install --namespace monitoring --create-namespace -f manifests/dashboard-values.yml \
kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard
$ kubectl apply -f manifests/dashboard-admin.yml
$ kubectl -n monitoring describe secret \
$(kubectl -n monitoring get secret | grep admin-user | awk '{print $1}')
$ kubectl port-forward -n monitoring $(kubectl get pods -n monitoring \
-l "app.kubernetes.io/name=kubernetes-dashboard" -o jsonpath="{.items[0].metadata.name}") 9090
Go to http://localhost:9090 and use token for authentication
Prometheus - Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ Π΄Π°Π½Π½ΡΡ , Π³ΠΈΠ±ΠΊΠΈΠΌ ΡΠ·ΡΠΊΠΎΠΌ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΠ΄ΠΎΠ² ΠΈ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠΌ ΠΊ ΠΎΠΏΠΎΠ²Π΅ΡΠ΅Π½ΠΈΡ. Grafana β ΡΡΠΎ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½ΡΡ .
$ helm install --namespace monitoring --create-namespace -f manifests/prometheus-values.yml \
prometheus stable/prometheus
$ helm install --namespace monitoring --create-namespace -f manifests/grafana-values.yml \
grafana stable/grafana
Go to http://prometheus.local
$ kubectl get secret -n monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
Go to http://grafana.local (user: admin, password: result of first command). Add new data source with type "Prometheus" and url "http://prometheus-server". Import a new dashboard to Grafana (grafana.com dashboard: https://grafana.com/dashboards/1621, Prometheus: created one).
Loghouse β Open Source-ΡΠΈΡΡΠ΅ΠΌΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π»ΠΎΠ³Π°ΠΌΠΈ Π² Kubernetes
$ helm repo add loghouse https://flant.github.io/loghouse/charts/
$ helm install --namespace loghouse --create-namespace -f manifests/loghouse-values.yml \
loghouse loghouse/loghouse
Go to http://loghouse.local (login: admin, password: PASSWORD).
Try to search logs of test app with the query:
~app = "my-app"
Velero - ΡΡΠΎ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ kubernetes, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΆΠΈΠΌΠ°Π΅Ρ ΠΈ Π±ΡΠΊΠ°ΠΏΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ kubernetes Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅.
https://velero.io/docs/v1.4/basic-install/
$ velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.1.0 \
--bucket backup-backet-apatsev \
--backup-location-config region=ru-central1-a,s3ForcePathStyle="true",s3Url=https://storage.yandexcloud.net \
--snapshot-location-config region=ru-central1-a \
--secret-file kubespray_inventory/credentials-velero
$ velero backup create my-first-backup
$ velero backup get
$ kubectl delete -f manifests/test-app.yml
ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π±Π΅ΠΊΠ°ΠΏΠ° ΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡ ΡΠΏΠΈΡΠΊΠ° Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ Π±Π΅ΠΊΠ°ΠΏΠΎΠ²
$ velero restore create --from-backup my-first-backup
$ velero restore get
$ bash cluster_destroy.sh