Книга Облачная экосистема - читать онлайн бесплатно, автор Евгений Сергеевич Штольц. Cтраница 11
bannerbanner
Вы не авторизовались
Войти
Зарегистрироваться
Облачная экосистема
Облачная экосистема
Добавить В библиотекуАвторизуйтесь, чтобы добавить
Оценить:

Рейтинг: 0

Добавить отзывДобавить цитату

Облачная экосистема

esschtolts@gke-node-ks-node-ks-pool-07115c5b-bw15 ~ $ curl 10.7.246.234

terraform-nodejs-6bd565dc6c-hr5vg

esschtolts@gke-node-ks-node-ks-pool-07115c5b-bw15 ~ $ curl 10.7.246.234

terraform-nodejs-6bd565dc6c-hr5vg

esschtolts@gke-node-ks-node-ks-pool-07115c5b-bw15 ~ $ curl 10.7.246.234

terraform-nodejs-6bd565dc6c-8768b

esschtolts@gke-node-ks-node-ks-pool-07115c5b-bw15 ~ $ curl 10.7.246.234

terraform-nodejs-6bd565dc6c-mm7lh


essh@kubernetes-master:~/node-cluster$ curl 35.197.220.103

terraform-nodejs-6bd565dc6c-mm7lh

essh@kubernetes-master:~/node-cluster$ curl 35.197.220.103

terraform-nodejs-6bd565dc6c-mm7lh

essh@kubernetes-master:~/node-cluster$ curl 35.197.220.103

terraform-nodejs-6bd565dc6c-8768b

essh@kubernetes-master:~/node-cluster$ curl 35.197.220.103

terraform-nodejs-6bd565dc6c-hr5vg

essh@kubernetes-master:~/node-cluster$ curl 35.197.220.103

terraform-nodejs-6bd565dc6c-8768b

essh@kubernetes-master:~/node-cluster$ curl 35.197.220.103

terraform-nodejs-6bd565dc6c-mm7lh

Теперь перейдем к внедрению сервера NodeJS:

essh@kubernetes-master:~/node-cluster$ sudo ./terraform destroy

essh@kubernetes-master:~/node-cluster$ sudo ./terraform apply

essh@kubernetes-master:~/node-cluster$ sudo docker run -it –rm node:12 which node

/usr/local/bin/node

sudo docker run -it –rm -p 8222:80 node:12 /bin/bash -c 'cd /usr/src/ && git clone https://github.com/fhinkel/nodejs-hello-world.git &&

/usr/local/bin/node /usr/src/nodejs-hello-world/index.js'

firefox http://localhost:8222

Заменим блок у нашего контейнера на:

container {

image = "node:12"

name = "node-js"

command = ["/bin/bash"]

args = [

"-c",

"cd /usr/src/ && git clone https://github.com/fhinkel/nodejs-hello-world.git && /usr/local/bin/node /usr/src/nodejs-hello-world/index.js"

]

}

Если закомментировать модуль Kubernetes, а в кэше он остаётся, остаётся убрать из кэша лишнее:

essh@kubernetes-master:~/node-cluster$ ./terraform apply


Error: Provider configuration not present


essh@kubernetes-master:~/node-cluster$ ./terraform state list

data.google_client_config.default

module.Kubernetes.google_container_cluster.node-ks

module.Kubernetes.google_container_node_pool.node-ks-pool

module.nodejs.kubernetes_deployment.nodejs

module.nodejs.kubernetes_service.nodejs


essh@kubernetes-master:~/node-cluster$ ./terraform state rm module.nodejs.kubernetes_deployment.nodejs

Removed module.nodejs.kubernetes_deployment.nodejs

Successfully removed 1 resource instance(s).

essh@kubernetes-master:~/node-cluster$ ./terraform state rm module.nodejs.kubernetes_service.nodejs

Removed module.nodejs.kubernetes_service.nodejs

Successfully removed 1 resource instance(s).


essh@kubernetes-master:~/node-cluster$ ./terraform apply

module.Kubernetes.google_container_cluster.node-ks: Refreshing state… [id=node-ks]

module.Kubernetes.google_container_node_pool.node-ks-pool: Refreshing state… [id=europe-west2-a/node-ks/node-ks-pool]


Apply complete! Resources: 0 added, 0 changed, 0 destroyed.


Надежность и автоматизация кластера на Terraform

В общих черта автоматизация рассмотрена в https://codelabs.developers.google.com/codelabs/cloud-builder-gke-continuous-deploy/index. html #0. Мы остановимся подробнее. Теперь, если мы запустим удаление ./terraform destroy и попытаемся воссоздать инфраструктуру целиком сначала, то у нас появятся ошибки. Ошибки получаются из-за того, что порядок создания сервисов не задан и terraform, по умолчанию, отравляет запросы к API в 10 параллельных потоков, хотя это можно изменить, указав при применении или удаление ключ -parallelism=1. В результате Terraform пытается создать Kubernetes сервисы (Deployment и service) на серверах (node-pull), которых пока ещё нет, та же ситуация и при создании сервиса, которому требуется , проксирующего ещё не созданный Deployment. Указывая Terraform запрашивать API в один поток ./terraform apply -parallelism=1 мы снижаем возможные ограничения со стороны провайдера на частоту обращений к API, но не решаем проблему отсутствия порядка создания сущностей. Мы не будем комментировать зависимые блоки и постепенно раскомментировать и запускать ./terraform apply, также не будем запускать по частям нашу систему, указывая конкретные блоки ./terraform apply -target=module.nodejs.kubernetes_deployment.nodejs. Мы укажем в коде сами зависимости на инициализации переменной, первая из которой уже определена как внешняя var.endpoint, а вторую мы создадим локально:

locals {

app = kubernetes_deployment.nodejs.metadata.0.labels.app

}

Теперь мы можем добавить зависимости в код depends_on = [var.endpoint] и depends_on = [kubernetes_deployment .nodejs].

Таже может появляться ошибка недоступности сервиса: Error: Get https://35.197.228.3/API/v1…: dial tcp 35.197.228.3:443: connect: connection refused, то скорее превышено время подключения, которое составляет по умолчанию 6 минут (3600 секунд), но тут можно просто попробовать еще раз.

Теперь перейдём к решению проблемы надёжности работы контейнера, основной процесс которого мы запускаем в командной оболочке. Первое, что мы сделаем, отделим создание приложения от запуска контейнера. Для этого нужно весь процесс создания сервиса перенести в процесс создания образа, которых можно протестировать, и по которому можно создать контейнер сервиса. Итак, создадим образ:

essh@kubernetes-master:~/node-cluster$ cat app/server.js

const http = require('http');

const server = http.createServer(function(request, response) {

response.writeHead(200, {"Content-Type": "text/plain"});

response.end(`Nodejs_cluster is working! My host is ${process.env.HOSTNAME}`);

});


server.listen(80);


essh@kubernetes-master:~/node-cluster$ cat Dockerfile

FROM node:12

WORKDIR /usr/src/

ADD ./app /usr/src/


RUN npm install


EXPOSE 3000

ENTRYPOINT ["node", "server.js"]


essh@kubernetes-master:~/node-cluster$ sudo docker image build -t nodejs_cluster .

Sending build context to Docker daemon 257.4MB

Step 1/6 : FROM node:12

––> b074182f4154

Step 2/6 : WORKDIR /usr/src/

––> Using cache

––> 06666b54afba

Step 3/6 : ADD ./app /usr/src/

––> Using cache

––> 13fa01953b4a

Step 4/6 : RUN npm install

––> Using cache

––> dd074632659c

Step 5/6 : EXPOSE 3000

––> Using cache

––> ba3b7745b8e3

Step 6/6 : ENTRYPOINT ["node", "server.js"]

––> Using cache

––> a957fa7a1efa

Successfully built a957fa7a1efa

Successfully tagged nodejs_cluster:latest


essh@kubernetes-master:~/node-cluster$ sudo docker images | grep nodejs_cluster

nodejs_cluster latest a957fa7a1efa 26 minutes ago 906MB


Теперь положим наш образ в реестр GCP, а не Docker Hub, потому что мы получаем сразу приватный репозиторий с которому автоматом есть доступ у наших сервисов:

essh@kubernetes-master:~/node-cluster$ IMAGE_ID="nodejs_cluster"

essh@kubernetes-master:~/node-cluster$ sudo docker tag $IMAGE_ID:latest gcr.io/$PROJECT_ID/$IMAGE_ID:latest

essh@kubernetes-master:~/node-cluster$ sudo docker images | grep nodejs_cluster

nodejs_cluster latest a957fa7a1efa 26 minutes ago 906MB

gcr.io/node-cluster-243923/nodejs_cluster latest a957fa7a1efa 26 minutes ago 906MB


essh@kubernetes-master:~/node-cluster$ gcloud auth configure-docker

gcloud credential helpers already registered correctly.

essh@kubernetes-master:~/node-cluster$ docker push gcr.io/$PROJECT_ID/$IMAGE_ID:latest

The push refers to repository [gcr.io/node-cluster-243923/nodejs_cluster]

194f3d074f36: Pushed

b91e71cc9778: Pushed

640fdb25c9d7: Layer already exists

b0b300677afe: Layer already exists

5667af297e60: Layer already exists

84d0c4b192e8: Layer already exists

a637c551a0da: Layer already exists

2c8d31157b81: Layer already exists

7b76d801397d: Layer already exists

f32868cde90b: Layer already exists

0db06dff9d9a: Layer already exists

latest: digest: sha256:912938003a93c53b7c8f806cded3f9bffae7b5553b9350c75791ff7acd1dad0b size: 2629


essh@kubernetes-master:~/node-cluster$ gcloud container images list

NAME

gcr.io/node-cluster-243923/nodejs_cluster

Only listing images in gcr.io/node-cluster-243923. Use –repository to list images in other repositories.

Теперь мы можем посмотреть его в админке GCP: Container Registry –> Образы. Заменим код нашего контейнера на код с нашим образом. Если для продакшна нужно обязательно версионировать запускаемый образ во избежание автоматического их обновления при системных пересозданиях POD, например, при переносе POD с одной ноды на другую при выводе машины с нашей нодой на техническое обслуживание. Для разработки лучше использовать тег latest, который позволит при обновлении образа обновить сервис. При обновлении сервиса его нужно пересоздать, то есть удалить и заново создать, так как иначе terraform просто обновит параметры, а не пересоздаст контейнер с новым образом. Также, если обновим образ и пометим сервис как изменённый с помощью команды ./terraform taint ${NAME_SERVICE}, наш сервис будет просто обновлён, что можно увидеть с помощью команды ./terraform plan. Поэтому для обновления, пока, нужно пользоваться командами ./terraform destroy -target=${NAME_SERVICE} и ./terraform apply, а название сервисов можно посмотреть в ./terraform state list:

essh@kubernetes-master:~/node-cluster$ ./terraform state list

data.google_client_config.default

module.kubernetes.google_container_cluster.node-ks

module.kubernetes.google_container_node_pool.node-ks-pool

module.Nginx.kubernetes_deployment.nodejs

module.Nginx.kubernetes_service.nodejs


essh@kubernetes-master:~/node-cluster$ ./terraform destroy -target=module.nodejs.kubernetes_deployment.nodejs


essh@kubernetes-master:~/node-cluster$ ./terraform apply

А теперь заменим код нашего контейнера:

container {

image = "gcr.io/node-cluster-243923/nodejs_cluster:latest"

name = "node-js"

}

Проверим результат балансировки на разные ноды(нет переноса строк в конце вывода):

essh@kubernetes-master:~/node-cluster$ curl http://35.246.85.138:80

Nodejs_cluster is working! My host is terraform-nodejs-997fd5c9c-lqg48essh@kubernetes-master:~/node-cluster$ curl http://35.246.85.138:80

Nodejs_cluster is working! My host is terraform-nodejs-997fd5c9c-lhgsnessh@kubernetes-master:~/node-cluster$ curl http://35.246.85.138:80

Nodejs_cluster is working! My host is terraform-nodejs-997fd5c9c-lhgsnessh@kubernetes-master:~/node-cluster$ curl http://35.246.85.138:80

Nodejs_cluster is working! My host is terraform-nodejs-997fd5c9c-lhgsnessh@kubernetes-master:~/node-cluster$ curl http://35.246.85.138:80

Nodejs_cluster is working! My host is terraform-nodejs-997fd5c9c-lhgsnessh@kubernetes-master:~/node-cluster$ curl http://35.246.85.138:80

Nodejs_cluster is working! My host is terraform-nodejs-997fd5c9c-lhgsnessh@kubernetes-master:~/node-cluster$ curl http://35.246.85.138:80

Nodejs_cluster is working! My host is terraform-nodejs-997fd5c9c-lqg48essh@kubernetes-master:~/node-cluster$ curl http://35.246.85.138:80

Nodejs_cluster is working! My host is terraform-nodejs-997fd5c9c-lhgsnessh@kubernetes-master:~/node-cluster$ curl http://35.246.85.138:80

Nodejs_cluster is working! My host is terraform-nodejs-997fd5c9c-lhgsnessh@kubernetes-master:~/node-cluster$ curl http://35.246.85.138:80

Nodejs_cluster is working! My host is terraform-nodejs-997fd5c9c-lhgsnessh@kubernetes-master:~/node-cluster$ curl http://35.246.85.138:80

Nodejs_cluster is working! My host is terraform-nodejs-997fd5c9c-lqg48essh@kubernetes-master:~/node-cluster$

Автоматизируем процесс создания образов, для этого воспользуемся сервисом Google Cloud Build (бесплатен для 5 пользователей и трафике до 50Гб) для создания нового образа при создании в репозитории Cloud Source Repositories (бесплатно на Google Cloud Platform Free Tier) новой версии (тэга). Google Cloud Platform –> Menu –> Инструменты –> Cloud Build –> триггеры –> Включить Cloud Build API –> Начать –> Создать хранилище, которое будет доступно по Google Cloud Platform –> Menu –> Инструменты —> Хранилища исходного кода (Cloud Source Repositories):

essh@kubernetes-master:~/node-cluster$ cd app/

essh@kubernetes-master:~/node-cluster/app$ ls

server.js

essh@kubernetes-master:~/node-cluster/app$ mv ./server.js ../

essh@kubernetes-master:~/node-cluster/app$ gcloud source repos clone nodejs –project=node-cluster-243923

Cloning into '/home/essh/node-cluster/app/nodejs'…

warning: You appear to have cloned an empty repository.

Project [node-cluster-243923] repository [nodejs] was cloned to [/home/essh/node-cluster/app/nodejs].

essh@kubernetes-master:~/node-cluster/app$ ls -a

. .. nodejs

essh@kubernetes-master:~/node-cluster/app$ ls nodejs/

essh@kubernetes-master:~/node-cluster/app$ ls -a nodejs/

. .. .git

essh@kubernetes-master:~/node-cluster/app$ cd nodejs/

essh@kubernetes-master:~/node-cluster/app/nodejs$ mv ../../server.js .

essh@kubernetes-master:~/node-cluster/app/nodejs$ git add server.js

essh@kubernetes-master:~/node-cluster/app/nodejs$ git commit -m 'test server'

[master (root-commit) 46dd957] test server

1 file changed, 7 insertions(+)

create mode 100644 server.js


essh@kubernetes-master:~/node-cluster/app/nodejs$ git push -u origin master

Counting objects: 3, done.

Delta compression using up to 8 threads.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (3/3), 408 bytes | 408.00 KiB/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To https://source.developers.google.com/p/node-cluster-243923/r/nodejs

* [new branch] master –> master

Branch 'master' set up to track remote branch 'master' from 'origin'.

Теперь пора настроить создание образа при создании новой версии продукта: переходим в GCP –> Cloud Build –> триггеры –> Создать триггер –> Хранилище исходного кода Google Cloud –> NodeJS. Тип триггер тег, чтобы не создавался образ при обычных коммитах. Я поменяю название образа с gcr.io/node-cluster-243923/NodeJS:$SHORT_SHA на gcr.io/node-cluster-243923/NodeJS:$SHORT_SHA, а время ожидания на 60 секунд. Теперь сделаю коммит и добавлю тег:

essh@kubernetes-master:~/node-cluster/app/nodejs$ cp ../../Dockerfile .

essh@kubernetes-master:~/node-cluster/app/nodejs$ git add Dockerfile

essh@kubernetes-master:~/node-cluster/app/nodejs$ git add Dockerfile

essh@kubernetes-master:~/node-cluster/app/nodejs$ cp ../../Dockerfile .

essh@kubernetes-master:~/node-cluster/app/nodejs$ git add Dockerfile

essh@kubernetes-master:~/node-cluster/app/nodejs$ git commit -m 'add Dockerfile'

essh@kubernetes-master:~/node-cluster/app/nodejs$ git remote -v

origin https://source.developers.google.com/p/node-cluster-243923/r/nodejs (fetch)

origin https://source.developers.google.com/p/node-cluster-243923/r/nodejs (push)

essh@kubernetes-master:~/node-cluster/app/nodejs$ git push origin master

Counting objects: 3, done.

Delta compression using up to 8 threads.

Compressing objects: 100% (3/3), done.

Writing objects: 100% (3/3), 380 bytes | 380.00 KiB/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To https://source.developers.google.com/p/node-cluster-243923/r/nodejs

46dd957..b86c01d master –> master

essh@kubernetes-master:~/node-cluster/app/nodejs$ git tag

essh@kubernetes-master:~/node-cluster/app/nodejs$ git tag -a v0.0.1 -m 'test to run'

essh@kubernetes-master:~/node-cluster/app/nodejs$ git push origin v0.0.1

Counting objects: 1, done.

Writing objects: 100% (1/1), 161 bytes | 161.00 KiB/s, done.

Total 1 (delta 0), reused 0 (delta 0)

To https://source.developers.google.com/p/node-cluster-243923/r/nodejs

* [new tag] v0.0.1 –> v0.0.1

Теперь, если мы нажмём кнопку запустить триггер, мы увидим образ в Container Registry c нашим тегом:

essh@kubernetes-master:~/node-cluster/app/nodejs$ gcloud container images list

NAME

gcr.io/node-cluster-243923/nodejs

gcr.io/node-cluster-243923/nodejs_cluster

Only listing images in gcr.io/node-cluster-243923. Use –repository to list images in other repositories.

Теперь если мы просто добавим изменения и тег, то образ будет создан автоматически:

essh@kubernetes-master:~/node-cluster/app/nodejs$ sed -i 's/HOSTNAME\}/HOSTNAME\}\n/' server.js

essh@kubernetes-master:~/node-cluster/app/nodejs$ git add server.js

essh@kubernetes-master:~/node-cluster/app/nodejs$ git commit -m 'fix'

[master 230d67e] fix

1 file changed, 2 insertions(+), 1 deletion(-)

essh@kubernetes-master:~/node-cluster/app/nodejs$ git push origin master

Counting objects: 3, done.

Delta compression using up to 8 threads.

Compressing objects: 100% (3/3), done.

Writing objects: 100% (3/3), 304 bytes | 304.00 KiB/s, done.

Total 3 (delta 1), reused 0 (delta 0)

remote: Resolving deltas: 100% (1/1)

To https://source.developers.google.com/p/node-cluster-243923/r/nodejs

b86c01d..230d67e master –> master

essh@kubernetes-master:~/node-cluster/app/nodejs$ git tag -a v0.0.2 -m 'fix'

essh@kubernetes-master:~/node-cluster/app/nodejs$ git push origin v0.0.2

Counting objects: 1, done.

Writing objects: 100% (1/1), 158 bytes | 158.00 KiB/s, done.

Total 1 (delta 0), reused 0 (delta 0)

To https://source.developers.google.com/p/node-cluster-243923/r/nodejs

* [new tag] v0.0.2 –> v0.0.2

essh@kubernetes-master:~/node-cluster/app/nodejs$ sleep 60


essh@kubernetes-master:~/node-cluster/app/nodejs$ gcloud builds list

ID CREATE_TIME DURATION SOURCE IMAGES STATUS

2b024d7e-87a9-4d2a-980b-4e7c108c5fad 2019-06-22T17:13:14+00:00 28S nodejs@v0.0.2 gcr.io/node-cluster-243923/nodejs:v0.0.2 SUCCESS

6b4ae6ff-2f4a-481b-9f4e-219fafb5d572 2019-06-22T16:57:11+00:00 29S nodejs@v0.0.1 gcr.io/node-cluster-243923/nodejs:v0.0.1 SUCCESS

e50df082-31a4-463b-abb2-d0f72fbf62cb 2019-06-22T16:56:48+00:00 29S nodejs@v0.0.1 gcr.io/node-cluster-243923/nodejs:v0.0.1 SUCCESS

essh@kubernetes-master:~/node-cluster/app/nodejs$ git tag -a latest -m 'fix'

essh@kubernetes-master:~/node-cluster/app/nodejs$ git push origin latest

Counting objects: 1, done.

Writing objects: 100% (1/1), 156 bytes | 156.00 KiB/s, done.

Total 1 (delta 0), reused 0 (delta 0)

To https://source.developers.google.com/p/node-cluster-243923/r/nodejs

* [new tag] latest –> latest

essh@kubernetes-master:~/node-cluster/app/nodejs$ cd ../..


Создание нескольких окружений с кластерами Terraform

При попытке создать несколько кластеров из одной конфигурации мы столкнёмся с дублированием идентификаторов, которые должны быть уникальны, поэтому изолируем их друг от друга, создав и поместив в разные проекты. Для ручного создания проекта перейдём по GCP –> Продукты –> IAM и администрирование –> Управление ресурсами и создадим проект NodeJS-prod и переключившись в проект, дождемся его активации. Посмотрим на состояние текущего проекта:

essh@kubernetes-master:~/node-cluster$ cat main.tf

provider "google" {

credentials = file("./kubernetes_key.json")

project = "node-cluster-243923"

region = "europe-west2"

}


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.