Развертывайте, масштабируйте и обновляйте свой веб-сайт с помощью Google Kubernetes Engine (GKE).

1. Введение

Запускать веб-сайты и приложения сложно.

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

Представьте себе инструмент, который мог бы помочь вам сделать все это и даже автоматизировать это! С GKE все это не только возможно, но и просто! В этой лаборатории кода вы берете на себя роль разработчика, управляющего веб-сайтом электронной коммерции для вымышленной компании Fancy Store. Из-за проблем с масштабированием и сбоями вам поручено развернуть приложение в GKE!

Упражнения упорядочены так, чтобы отразить общий опыт разработчиков облачных технологий:

  1. Создайте кластер GKE.
  2. Создайте Docker-контейнер.
  3. Разверните контейнер в GKE.
  4. Откройте доступ к контейнеру через службу.
  5. Масштабируйте контейнер до нескольких реплик.
  6. Измените сайт.
  7. Выпустите новую версию без простоев.

Схема архитектуры

ddba666bd2b02d0d.png

Что вы узнаете

  • Как создать кластер GKE
  • Как создать образ Docker
  • Как развернуть образы Docker в Kubernetes
  • Как масштабировать приложение в Kubernetes
  • Как выполнить скользящее обновление в Kubernetes

Предварительные условия

  • Аккаунт Google с административным доступом для создания проектов или проект с ролью владельца проекта.
  • Базовое понимание Docker и Kubernetes (если вам не хватает базового понимания, ознакомьтесь с Docker и Kubernetes прямо сейчас.)

2. Настройка среды

Самостоятельная настройка среды

Если у вас еще нет учетной записи Google, вам необходимо ее создать . Войдите в Google Cloud Console и создайте новый проект.

53dad2cefdae71da.png

Скриншот от 10.02.2016 12:45:26.png

Помните, что идентификатор проекта — это уникальное имя для всех проектов Google Cloud (имя, указанное выше, уже занято и не подойдет вам, извините!). Позже он будет называться PROJECT_ID .

Далее вам необходимо включить биллинг в Cloud Console, чтобы использовать ресурсы Google Cloud. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США . Если вы не новый пользователь, не волнуйтесь, потому что лаборатория кода не должна стоить вам больше нескольких долларов. Однако лаборатория кода может стоить вам больше денег, если вы используете больше ресурсов или оставляете их включенными (см. раздел «Очистка» в конце). Дополнительную информацию см. в разделе Цены .

Облачная оболочка

Хотя вы можете удаленно управлять Google Cloud и GKE со своего ноутбука, для лаборатории кода вы будете использовать Cloud Shell — среду командной строки, работающую в облаке.

Эта виртуальная машина на базе Debian оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Это означает, что все, что вам понадобится для этой лаборатории кода, — это браузер (да, он работает на Chromebook).

  1. Чтобы активировать Cloud Shell из Cloud Console, просто нажмите «Активировать Cloud Shell». fEbHefbrRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X 3-й квартал (подготовка и подключение к среде займет всего несколько минут).

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARE01A

Снимок экрана 14.06.2017, 22.13.43.png

После подключения к Cloud Shell вы увидите, что вы уже прошли аутентификацию и что для проекта уже установлен ваш PROJECT_ID .

gcloud auth list

Вывод команды

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Вывод команды

[core]
project = <PROJECT_ID>

Если по какой-то причине проект не установлен, просто введите следующую команду:

gcloud config set project <PROJECT_ID>

Ищете свой PROJECT_ID ? Узнайте, какой идентификатор вы использовали на этапах настройки, или найдите его на панели управления Cloud Console:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

Cloud Shell также по умолчанию устанавливает некоторые переменные среды, которые могут быть полезны при выполнении будущих команд.

echo $GOOGLE_CLOUD_PROJECT

Вывод команды

<PROJECT_ID>
  1. Наконец, установите зону по умолчанию и конфигурацию проекта.
gcloud config set compute/zone us-central1-f

Вы можете выбрать множество различных зон. Дополнительную информацию см. в разделе «Регионы и зоны» .

3. Создайте кластер GKE.

Теперь, когда у вас есть рабочая среда разработки, вам нужен кластер GKE для развертывания вашего веб-сайта! Прежде чем создавать кластер, необходимо убедиться, что включены соответствующие API. Выполните следующую команду, чтобы включить API контейнеров:

gcloud services enable container.googleapis.com

Теперь вы можете создать свой кластер! Выполните следующие шаги, чтобы создать кластер с именем Fancy-cluster с 3 узлами:

gcloud container clusters create fancy-cluster --num-nodes 3

Создание кластера может занять несколько минут. После этого выполните следующую команду и просмотрите три экземпляра рабочих виртуальных машин (ВМ) кластера:

gcloud compute instances list

Выход:

NAME                                          ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
gke-fancy-cluster-default-pool-ad92506d-1ng3  us-east4-a  n1-standard-1               10.150.0.7   XX.XX.XX.XX    RUNNING
gke-fancy-cluster-default-pool-ad92506d-4fvq  us-east4-a  n1-standard-1               10.150.0.5   XX.XX.XX.XX    RUNNING
gke-fancy-cluster-default-pool-ad92506d-4zs3  us-east4-a  n1-standard-1               10.150.0.6   XX.XX.XX.XX    RUNNING

Вы также можете просмотреть свой кластер и связанную с ним информацию в Cloud Console. Нажмите кнопку меню в верхнем левом углу, прокрутите вниз до Kubernetes Engine и нажмите «Кластеры». Вы должны увидеть свой кластер с именем Fancy-cluster .

795c794b03c5d2b0.png

6b394dfb8a6031f2.png

Поздравляем! Вы создали свой первый кластер!

4. Клонировать исходный репозиторий

Поскольку это существующий веб-сайт, вам нужно только клонировать исходный код из репозитория, чтобы вы могли сосредоточиться на создании образов Docker и развертывании в GKE.

Выполните следующие команды, чтобы клонировать исходный репозиторий в экземпляр Cloud Shell и изменить его на соответствующий каталог. Вы также установите зависимости Node.js, чтобы иметь возможность протестировать свое приложение перед его развертыванием.

cd ~
git clone https://github.com/googlecodelabs/monolith-to-microservices.git
cd ~/monolith-to-microservices
./setup.sh

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

Проявите должную осмотрительность и протестируйте свое приложение. Выполните следующую команду, чтобы запустить веб-сервер:

cd ~/monolith-to-microservices/monolith
npm start

Выход:

Monolith listening on port 8080!

Вы можете просмотреть свое приложение, щелкнув значок веб-предварительного просмотра в меню Cloud Shell и выбрав «Предварительный просмотр на порту 8080».

5869738f0e9ec386.png

Откроется новое окно, в котором вы сможете увидеть свой Fancy Store в действии!

9ed25c3f0cbe62fa.png

Вы можете закрыть это окно после просмотра веб-сайта. Нажмите Control+C (Windows или Mac) в окне терминала, чтобы остановить процесс веб-сервера.

5. Создайте контейнер Docker с помощью Cloud Build.

Теперь, когда ваши исходные файлы готовы к работе, пришло время Dockerize ваше приложение!

Обычно вам придется использовать двухэтапный подход, который влечет за собой создание контейнера Docker и отправку его в реестр для хранения образа, из которого извлекается GKE. Однако вы можете облегчить жизнь, используя Cloud Build, чтобы создать контейнер Docker и поместить образ в реестр контейнеров с помощью одной команды! (Чтобы просмотреть ручной процесс создания файла Docker и его отправки, см. Краткое руководство по реестру контейнеров .)

Cloud Build сжимает файлы из каталога и перемещает их в корзину Cloud Storage. Затем процесс сборки берет файлы из корзины и использует Dockerfile для запуска процесса сборки Docker. Поскольку вы указали флаг --tag с хостом gcr.io для образа Docker, полученный образ Docker будет отправлен в реестр контейнеров.

Сначала вам необходимо включить Cloud Build API, выполнив следующую команду:

gcloud services enable cloudbuild.googleapis.com

После включения API выполните следующую команду в Cloud Shell, чтобы начать процесс сборки:

cd ~/monolith-to-microservices/monolith
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .

Этот процесс занимает несколько минут, но после его завершения вы увидите в терминале следующий вывод:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ID                                    CREATE_TIME                DURATION  SOURCE                                                                                  IMAGES                              STATUS
1ae295d9-63cb-482c-959b-bc52e9644d53  2019-08-29T01:56:35+00:00  33S       gs://<PROJECT_ID>_cloudbuild/source/1567043793.94-abfd382011724422bf49af1558b894aa.tgz  gcr.io/<PROJECT_ID>/monolith:1.0.0  SUCCESS

Чтобы просмотреть историю сборки или наблюдать за процессом в режиме реального времени, вы можете перейти в Cloud Console. Нажмите кнопку меню в верхнем левом углу, прокрутите вниз до Ci/CD, затем нажмите Cloud Build и, наконец, нажмите «История». Там вы можете увидеть список ваших предыдущих сборок, но там должна быть только та, которую вы создали.

4c753ede203255f6.png

Если вы нажмете «Идентификатор сборки», вы увидите все подробности этой сборки, включая выходные данные журнала.

На странице сведений о сборке вы можете просмотреть созданный образ контейнера, щелкнув имя образа в разделе информации о сборке.

6e88ed1643dfe629.png

6. Разверните контейнер в GKE.

Теперь, когда вы контейнеризировали свой веб-сайт и поместили контейнер в реестр контейнеров, вы можете развернуть его в Kubernetes!

Для развертывания приложений и управления ими в кластере GKE вам необходимо взаимодействовать с системой управления кластером Kubernetes. Обычно это делается с помощью инструмента командной строки kubectl .

Kubernetes представляет приложения как Pods — модули, представляющие контейнер (или группу тесно связанных контейнеров). Pod — это самая маленькая развертываемая единица в Kubernetes. Здесь каждый под содержит только ваш монолитный контейнер.

Чтобы развернуть приложение, вам необходимо создать Deployment . Развертывание управляет несколькими копиями вашего приложения, называемыми репликами, и планирует их запуск на отдельных узлах вашего кластера. В этом случае при развертывании будет запущен только один модуль вашего приложения. Развертывания гарантируют это путем создания ReplicaSet . ReplicaSet отвечает за то, чтобы указанное количество реплик всегда работало.

Команда kubectl create deployment заставляет Kubernetes создать в вашем кластере развертывание под названием monolith с одной репликой.

Запустите следующую команду, чтобы развернуть приложение:

kubectl create deployment monolith --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0

Проверка развертывания

Чтобы убедиться, что развертывание было успешно создано, выполните следующую команду (преобразование статуса модуля в «Выполняется» может занять несколько секунд):

kubectl get all

Выход:

NAME                            READY   STATUS    RESTARTS   AGE
pod/monolith-7d8bc7bf68-htm7z   1/1     Running   0          6m21s

NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.27.240.1   <none>        443/TCP   24h

NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/monolith   1         1         1            1           20m

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/monolith-7d8bc7bf68   1         1         1       20m

Этот вывод показывает вам несколько вещей. Вы можете увидеть свое текущее развертывание; ваш ReplicaSet с желаемым количеством модулей, равным одному; и ваш Pod, который работает. Похоже, вы успешно все создали!

Чтобы индивидуально просмотреть ваши ресурсы, вы можете запустить следующие команды:

# Show pods
kubectl get pods

# Show deployments
kubectl get deployments

# Show replica sets
kubectl get rs

#You can also combine them
kubectl get pods,deployments

Чтобы увидеть все преимущества Kubernetes, вы можете смоделировать сбой сервера, удалить под и посмотреть, что произойдет!

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

kubectl delete pod/<POD_NAME>

Если вы достаточно быстры, вы можете запустить предыдущую команду, чтобы увидеть все снова, и вы должны увидеть два модуля: один завершается, а другой создается или работает:

kubectl get all

Выход:

NAME                            READY   STATUS        RESTARTS   AGE
pod/monolith-7d8bc7bf68-2bxts   1/1     Running       0          4s
pod/monolith-7d8bc7bf68-htm7z   1/1     Terminating   0          9m35s

NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.27.240.1   <none>        443/TCP   24h

NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/monolith   1         1         1            1           24m

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/monolith-7d8bc7bf68   1         1         1       24m

Почему это произошло? ReplicaSet увидел, что модуль завершается, и запустил новый модуль, чтобы поддерживать желаемое количество реплик. Позже вы увидите, как выполнить масштабирование, чтобы гарантировать, что у вас работает несколько экземпляров, и если один из них выйдет из строя, ваши пользователи не увидят простоя!

7. Раскройте развертывание GKE

Вы развернули свое приложение в GKE, но у вас нет доступа к нему за пределами кластера. По умолчанию контейнеры, которые вы запускаете в GKE, недоступны из Интернета, поскольку у них нет внешних IP-адресов. Вы должны явно предоставить своему приложению доступ к трафику из Интернета через ресурс службы . Служба обеспечивает поддержку сети и IP для модулей вашего приложения. GKE создает внешний IP-адрес и балансировщик нагрузки ( при условии оплаты ) для вашего приложения.

Запустите следующую команду, чтобы открыть доступ к вашему веб-сайту из Интернета:

kubectl expose deployment monolith --type=LoadBalancer --port 80 --target-port 8080

Выход:

service/monolith exposed

Доступ к услуге

GKE назначает внешний IP-адрес ресурсу службы, а не развертыванию. Если вы хотите найти внешний IP-адрес, предоставленный GKE для вашего приложения, вы можете проверить Службу с помощью команды kubectl get service:

kubectl get service

Выход:

NAME         CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
monolith     10.3.251.122    203.0.113.0     80:30877/TCP     3d

Определив внешний IP-адрес для вашего приложения, скопируйте его. Направьте свой браузер на этот URL-адрес (например, http://203.0.113.0), чтобы проверить, доступно ли ваше приложение.

9ed25c3f0cbe62fa.png

Вы должны увидеть тот же веб-сайт, который вы тестировали ранее! Поздравляем! Ваш сайт полностью работает на Kubernetes!

8. Масштабируйте развертывание GKE

Теперь, когда у вас есть работающий экземпляр вашего приложения в GKE и выложен его в Интернет, ваш веб-сайт стал чрезвычайно популярным! Вам нужен способ масштабирования вашего приложения на несколько экземпляров, чтобы вы могли обрабатывать трафик. Научитесь масштабировать свое приложение до трех реплик.

Выполните следующую команду, чтобы масштабировать развертывание до трех реплик:

kubectl scale deployment monolith --replicas=3

Выход:

deployment.apps/monolith scaled

Проверка масштабируемого развертывания

Чтобы убедиться, что развертывание было успешно масштабировано, выполните следующую команду:

kubectl get all

Выход:

NAME                            READY   STATUS    RESTARTS   AGE
pod/monolith-7d8bc7bf68-2bxts   1/1     Running   0          36m
pod/monolith-7d8bc7bf68-7ds7q   1/1     Running   0          45s
pod/monolith-7d8bc7bf68-c5kxk   1/1     Running   0          45s

NAME                 TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)        AGE
service/kubernetes   ClusterIP      10.27.240.1    <none>         443/TCP        25h
service/monolith     LoadBalancer   10.27.253.64   XX.XX.XX.XX   80:32050/TCP   6m7s

NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/monolith   3         3         3            3           61m

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/monolith-7d8bc7bf68   3         3         3       61m

Вы должны увидеть три запущенных экземпляра вашего Pod. Также обратите внимание, что ваши Deployment и ReplicaSet теперь имеют желаемое количество — три.

9. Внесите изменения на сайт

Ваша маркетинговая команда попросила вас изменить домашнюю страницу вашего сайта. Они считают, что оно должно быть более информативным, объясняя, что представляет собой ваша компания и что вы на самом деле продаете. В этом разделе вы добавите текст на домашнюю страницу, чтобы порадовать команду маркетинга! Похоже, один из наших разработчиков уже внес изменения с именем файла index.js.new . Вы можете скопировать файл в index.js , и ваши изменения должны быть отражены. Следуйте инструкциям ниже, чтобы внести соответствующие изменения.

Выполните следующие команды, скопируйте обновленный файл в файл с правильным именем и распечатайте его содержимое, чтобы проверить изменения:

cd ~/monolith-to-microservices/react-app/src/pages/Home
mv index.js.new index.js
cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js

Результирующий код должен выглядеть следующим образом:

/*
Copyright 2019 Google LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import Paper from "@material-ui/core/Paper";
import Typography from "@material-ui/core/Typography";
const useStyles = makeStyles(theme => ({
  root: {
    flexGrow: 1
  },
  paper: {
    width: "800px",
    margin: "0 auto",
    padding: theme.spacing(3, 2)
  }
}));
export default function Home() {
  const classes = useStyles();
  return (
    <div className={classes.root}>
      <Paper className={classes.paper}>
        <Typography variant="h5">
          Fancy Fashion &amp; Style Online
        </Typography>
        <br />
        <Typography variant="body1">
          Tired of mainstream fashion ideas, popular trends and societal norms?
          This line of lifestyle products will help you catch up with the Fancy trend and express your personal style.
          Start shopping Fancy items now!
        </Typography>
      </Paper>
    </div>
  );
}

Вы обновили компоненты React, но вам нужно создать приложение React для создания статических файлов. Запустите следующую команду, чтобы создать приложение React, и скопируйте его в общедоступный каталог монолита:

cd ~/monolith-to-microservices/react-app
npm run build:monolith

Теперь, когда ваш код обновлен, вам необходимо перестроить контейнер Docker и опубликовать его в реестре контейнеров. Вы можете использовать ту же команду, что и раньше, за исключением того, что на этот раз вы обновите метку версии!

Выполните следующую команду, чтобы запустить новую облачную сборку с обновленным образом версии 2.0.0:

cd ~/monolith-to-microservices/monolith

#Feel free to test your application
npm start

gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .

Нажмите Control+C (Windows или Mac) в окне терминала, чтобы остановить процесс веб-сервера.

В следующем разделе вы будете использовать этот образ для обновления приложения без простоев.

10. Обновляйте веб-сайт без простоев

Изменения завершены, и маркетинговая команда довольна вашими обновлениями! Пришло время обновить сайт, не отвлекая пользователей. Следуйте инструкциям ниже, чтобы обновить свой веб-сайт.

Последовательные обновления GKE гарантируют, что ваше приложение останется работоспособным и доступным, даже если система заменяет экземпляры вашего старого образа контейнера новым во всех запущенных репликах.

Из командной строки вы можете сообщить Kubernetes, что хотите обновить образ вашего развертывания до новой версии, с помощью следующей команды:

kubectl set image deployment/monolith monolith=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0

Выход:

deployment.apps/monolith image updated

Проверка развертывания

Вы можете проверить обновление развертывания, выполнив следующую команду:

kubectl get pods

Выход:

NAME                        READY   STATUS              RESTARTS   AGE
monolith-584fbc994b-4hj68   1/1     Terminating         0          60m
monolith-584fbc994b-fpwdw   1/1     Running             0          60m
monolith-584fbc994b-xsk8s   1/1     Terminating         0          60m
monolith-75f4cf58d5-24cq8   1/1     Running             0          3s
monolith-75f4cf58d5-rfj8r   1/1     Running             0          5s
monolith-75f4cf58d5-xm44v   0/1     ContainerCreating   0          1s

Вы видите, как создаются три новых модуля, а ваши старые модули закрываются. По эпохам можно определить, какие времена новые, а какие старые. В конце концов вы снова увидите только три модуля, которые будут вашими тремя обновленными модулями.

Чтобы проверить изменения, снова перейдите на внешний IP-адрес балансировщика нагрузки и обратите внимание, что ваше приложение было обновлено.

Запустите следующую команду, чтобы просмотреть список служб и просмотреть IP-адрес, если вы его забыли:

kubectl get svc

На вашем веб-сайте должен отображаться текст, который вы добавили в компонент домашней страницы!

8006c9938dbd5aa5.png

11. Очистка

Удалить репозиторий Git

cd ~
rm -rf monolith-to-microservices

Удалить образы реестра контейнеров

ПРИМЕЧАНИЕ. Если вы создали другие версии, вы можете использовать тот же синтаксис и для удаления этих изображений. В этой лаборатории кода предполагается, что у вас есть только два тега.

# Delete the container image for version 1.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --quiet

# Delete the container image for version 2.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --quiet

Удаление артефактов Cloud Build из Cloud Storage

ПРИМЕЧАНИЕ. Если вы использовали Cloud Build для артефактов, отличных от этой лаборатории кода, вам придется вручную удалить источник из сегмента Cloud Storage gs://<PROJECT_ID>_cloudbuild/source .

# The following command will take all source archives from all builds and delete them from cloud storage

# Run this command to print all sources:
# gcloud builds list | awk 'NR > 1 {print $4}'

gcloud builds list | awk 'NR > 1 {print $4}' | while read line; do gsutil rm $line; done

Удалить службу GKE

kubectl delete service monolith
kubectl delete deployment monolith

Удалить кластер GKE

gcloud container clusters delete fancy-cluster

ПРИМЕЧАНИЕ. Выполнение этой команды может занять некоторое время.

12. Поздравляем!

Вы развернули, масштабировали и обновили свой веб-сайт на GKE. Теперь у вас есть опыт работы с Docker и Kubernetes!

Дополнительные ресурсы