скачать книгу бесплатно
}
module "kubernetes" {
source = "./Kubernetes"
}
data "google_client_config" "default" {}
module "Nginx" {
source = "./nodejs"
image = "gcr.io/node-cluster-243923/nodejs_cluster:latest"
endpoint = module.kubernetes.endpoint
access_token = data.google_client_config.default.access_token
cluster_ca_certificate = module.kubernetes.cluster_ca_certificate
}
essh@kubernetes-master:~/node-cluster$ gcloud config list project
[core]
project = node-cluster-243923
Your active configuration is: [default]
essh@kubernetes-master:~/node-cluster$ gcloud config set project node-cluster-243923
Updated property [core/project].
essh@kubernetes-master:~/node-cluster$ gcloud compute instances list
NAME ZONE INTERNAL_IP EXTERNAL_IP STATUS
gke-node-ks-default-pool-2e5073d4-csmg europe-north1-a 10.166.0.2 35.228.96.97 RUNNING
gke-node-ks-node-ks-pool-ccbaf5c6-4xgc europe-north1-a 10.166.15.233 35.228.82.222 RUNNING
gke-node-ks-default-pool-72a6d4a3-ldzg europe-north1-b 10.166.15.231 35.228.143.7 RUNNING
gke-node-ks-node-ks-pool-9ee6a401-ngfn europe-north1-b 10.166.15.234 35.228.129.224 RUNNING
gke-node-ks-default-pool-d370036c-kbg6 europe-north1-c 10.166.15.232 35.228.117.98 RUNNING
gke-node-ks-node-ks-pool-d7b09e63-q8r2 europe-north1-c 10.166.15.235 35.228.85.157 RUNNING
Переключим gcloud и посмотри на пустой проект:
essh@kubernetes-master:~/node-cluster$ gcloud config set project node-cluster-prod-244519
Updated property [core/project].
essh@kubernetes-master:~/node-cluster$ gcloud config list project
[core]
project = node-cluster-prod-244519
Your active configuration is: [default]
essh@kubernetes-master:~/node-cluster$ gcloud compute instances list
Listed 0 items.
В предыдущий раз, для node-cluster-243923 мы создавали сервисный аккаунт, от имени которого мы создавали кластер. Для работы с несколькими аккаунтами из Terraform создадим и для нового проекта сервисный аккаунт через IAM и администрирование –> Сервисные аккаунты. Нам нужно будет сделать две отдельные папки для запуска Terraform по отдельности для того, чтобы разделить SSH- подключения, имеющие разные авторизационные ключи. Если мы поместим оба провайдера с разными ключами, то получим успешное соединение для первого проекта, позже, когда Terraform перейдёт к созданию кластера для следующего проекта он получит отказ из-за недействительности ключа от первого проекта ко второму. Есть и другая возможность – активировать аккаунт, как аккаунт компании (потребуется сайт и электронная почта, и проверка их со стороны Google), тогда появится возможность создавать из кода проекты без использования админки. После dev- окружение:
essh@kubernetes-master:~/node-cluster$ ./terraform destroy
essh@kubernetes-master:~/node-cluster$ mkdir dev
essh@kubernetes-master:~/node-cluster$ cd dev/
essh@kubernetes-master:~/node-cluster/dev$ gcloud config set project node-cluster-243923
Updated property [core/project].
essh@kubernetes-master:~/node-cluster/dev$ gcloud config list project
[core]
project = node-cluster-243923
Your active configuration is: [default]
essh@kubernetes-master:~/node-cluster/dev$ ../kubernetes_key.json ../main.tf .
essh@kubernetes-master:~/node-cluster/dev$ cat main.tf
provider "google" {
alias = "dev"
credentials = file("./kubernetes_key.json")
project = "node-cluster-243923"
region = "europe-west2"
}
module "kubernetes_dev" {
source = "../Kubernetes"
node_pull = false
providers = {
google = google.dev
}
}
data "google_client_config" "default" {}
module "Nginx" {
source = "../nodejs"
providers = {
google = google.dev
}
image = "gcr.io/node-cluster-243923/nodejs_cluster:latest"
endpoint = module.kubernetes_dev.endpoint
access_token = data.google_client_config.default.access_token
cluster_ca_certificate = module.kubernetes_dev.cluster_ca_certificate
}
essh@kubernetes-master:~/node-cluster/dev$ ../terraform init
essh@kubernetes-master:~/node-cluster/dev$ ../terraform apply
essh@kubernetes-master:~/node-cluster/dev$ gcloud compute instances list
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
gke-node-ks-default-pool-71afadb8-4t39 europe-north1-a n1-standard-1 10.166.0.60 35.228.96.97 RUNNING
gke-node-ks-node-ks-pool-134dada1-3cdf europe-north1-a n1-standard-1 10.166.0.61 35.228.117.98 RUNNING
gke-node-ks-node-ks-pool-134dada1-c476 europe-north1-a n1-standard-1 10.166.15.194 35.228.82.222 RUNNING
essh@kubernetes-master:~/node-cluster/dev$ gcloud container clusters get-credentials node-ks
Fetching cluster endpoint and auth data.
kubeconfig entry generated for node-ks.
essh@kubernetes-master:~/node-cluster/dev$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
terraform-nodejs-6fd8498cb5-29dzx 1/1 Running 0 2m57s 10.12.3.2 gke-node-ks-node-ks-pool-134dada1-c476 none>
terraform-nodejs-6fd8498cb5-jcbj6 0/1 Pending 0 2m58s none> none> none>
terraform-nodejs-6fd8498cb5-lvfjf 1/1 Running 0 2m58s 10.12.1.3 gke-node-ks-node-ks-pool-134dada1-3cdf none>
Как видно POD распределились по пулу нод, при этом не попали на ноду с Kubernetes из-за отсутствия свободного места. Важно заметить, что количество нод в пуле было увеличено автоматически, и только заданное ограничение не позволило создать третью ноду в пуле. Если мы установим remove_default_node_pool в true, то объединим POD Kubernetes и наши POD. По запросам ресурсов, Kubernetes занимает чуть более одного ядра, а наш POD половину, поэтому остальные POD не были созданы, но зато мы сэкономили на ресурсах:
essh@kubernetes-master:~/node-cluster/Kubernetes$ gcloud compute instances list
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
gke-node-ks-node-ks-pool-495b75fa-08q2 europe-north1-a n1-standard-1 10.166.0.57 35.228.117.98 RUNNING
gke-node-ks-node-ks-pool-495b75fa-wsf5 europe-north1-a n1-standard-1 10.166.0.59 35.228.96.97 RUNNING
essh@kubernetes-master:~/node-cluster/Kubernetes$ gcloud container clusters get-credentials node-ks
Fetching cluster endpoint and auth data.
kubeconfig entry generated for node-ks.
essh@kubernetes-master:~/node-cluster/Kubernetes$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
terraform-nodejs-6fd8498cb5-97svs 1/1 Running 0 14m 10.12.2.2 gke-node-ks-node-ks-pool-495b75fa-wsf5 none>
terraform-nodejs-6fd8498cb5-d9zkr 0/1 Pending 0 14m none> none> none>
terraform-nodejs-6fd8498cb5-phk8x 0/1 Pending 0 14m none> none> none>
После создания сервисного аккаунту, добавим ключ и проверим его: