скачать книгу бесплатно
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"