---
title: 'Развернуть Docker-образ в Kubernetes'
sidebar_label: 'Развернуть Docker-образ в Kubernetes'
description: 'Как загрузить Docker-образ, настроить интеграцию с кластером и развернуть приложение из образа'
sidebar_position: 4
---

import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
import {TabItemLabel} from '@selectel/docux/components'
import Formbricks from '@theme/MDXComponents/Formbricks'

# Развернуть Docker-образ в Kubernetes

Если вы храните Docker-образы в Container Registry, вы можете развернуть под в кластере [Managed Kubernetes](/managed-kubernetes/about/about-managed-kubernetes.mdx) или в кластере Kubernetes, который администрируете самостоятельно.

1. [Загрузите образ в реестр Container Registry](#upload-image).
2. [Настройте интеграцию Container Registry с кластером](#configure-registry-integration-with-cluster).
3. [Разверните приложение из образа](#deploy-application-from-image).

## 1. Загрузить образ в Container Registry \{#upload-image}

1. [Авторизуйтесь в реестре](/craas/images/use-docker.mdx).

2. Введите логин (username) и пароль (password).

3. Присвойте образу тег:

   ```bash
   docker tag <image> cr.selcloud.ru/<registry>/<image>:<tag>
   ```

   Укажите:

   * `<image>` — имя образа, можно посмотреть с помощью `docker image list`;
   * `<registry>` — имя реестра, в который нужно загрузить образ;
   * `<tag>` — тег.

4. Загрузите образ в реестр:

   ```bash
   docker push cr.selcloud.ru/<registry>/<image>:<tag>
   ```

## 2. Настроить интеграцию Container Registry с кластером \{#configure-registry-integration-with-cluster}

Для кластера Managed Kubernetes после интеграции данные для аутентификации автоматически добавляются в сервисный аккаунт, используемый по умолчанию, и в секрет ко всем пространствам имен кластера.

В кластере Kubernetes вы создаете объект [Secret](https://kubernetes.io/docs/concepts/configuration/secret/) — секрет с данными токена Container Registry самостоятельно.

<Tabs queryString="configure-registry-integration-with-cluster">
  <TabItem value="managed-kubernetes" default>
    <TabItemLabel>
      Managed Kubernetes
    </TabItemLabel>

    Вы можете настроить интеграцию из реестра Container Registry с одним или несколькими кластерами Managed Kubernetes.

    1. В [панели управления](https://my.selectel.ru/vpc/default/craas/) в верхнем меню нажмите **Продукты** и выберите **Container Registry**.
    2. Откройте вкладку **Реестры**.
    3. Откройте страницу реестра.
    4. Нажмите **Доступ к реестру**.
    5. Выберите **Интеграция с Kubernetes**.
    6. Нажмите **Продолжить**.
    7. Выберите кластеры Managed Kubernetes, которым будет предоставлен доступ к выбранному реестру. Вы можете выбрать только кластеры со [статусом](/managed-kubernetes/clusters/cluster-statuses.mdx) `ACTIVE`. Кластеры с другими статусами обозначены как `INACTIVE`.
    8. Если вы настраиваете интеграцию в первый раз, нажмите **Интегрировать**.
    9. Если вы изменяете настройки интеграции, нажмите **Сохранить**.

    Информация о кластерах Managed Kubernetes, которым предоставлен доступ к выбранному реестру, отображается на странице реестра, под его названием.
  </TabItem>

  <TabItem value="kubernetes">
    <TabItemLabel>
      Kubernetes
    </TabItemLabel>

    1. Создайте секрет:

       ```shell
       kubectl create secret docker-registry <secret_name> \
         --docker-server=cr.selcloud.ru \
         --docker-username=<username> \
         --docker-password=<password> \
         --namespace=<namespace>
       ```

       Укажите:

       * `<secret_name>` — имя секрета;
       * `<username>` — имя пользователя, созданное при получении токена;
       * `<password>` — пароль, созданный при получении токена;
       * `<namespace>` — опционально: если вы создаете контейнер в пространстве имен, отличном от default, укажите имя своего пространства имен.

    2. Проверьте, что секрет создан:

       ```bash
       kubectl get secret <secret_name> --output=yaml
       ```
  </TabItem>
</Tabs>

## 3. Развернуть приложение из образа \{#deploy-application-from-image}

<Tabs queryString="deploy-application-from-image">
  <TabItem value="managed-kubernetes" default>
    <TabItemLabel>
      Managed Kubernetes
    </TabItemLabel>

    1. Создайте файл deployment.yaml:

       ```bash
       nano deployment.yaml
       ```

    2. Скопируйте в файл содержимое:

       ```yaml
       apiVersion: apps/v1
       kind: Deployment
       metadata:
         name: example-deployment
         labels:
           app: example-deployment
       spec:
         replicas: 2
         selector:
           matchLabels:
             app: example-deployment
         template:
           metadata:
             labels:
               app: example-deployment
           spec:
             containers:
             - name: <image_name>
               image: cr.selcloud.ru/<registry>/<image>:latest  
             imagePullSecrets:
             - name: craas-auth
       ```

       Укажите:

       * `<registry>` — имя реестра;
       * `<image_name>` — имя образа.

    3. Разверните приложение:

       ```bash
       kubectl apply -f deployment.yaml
       ```

    4. Проверьте статус подов — они должны быть в статусе `running`:

       ```bash
       kubectl get pods
       ```
  </TabItem>

  <TabItem value="kubernetes">
    <TabItemLabel>
      Kubernetes
    </TabItemLabel>

    1. Создайте файл deployment.yaml:

       ```bash
       nano deployment.yaml
       ```

    2. Скопируйте в файл содержимое:

       ```yaml
       apiVersion: apps/v1
       kind: Deployment
       metadata:
         name: example-deployment
         labels:
           app: example-deployment
       spec:
         replicas: 2
         selector:
           matchLabels:
             app: example-deployment
         template:
           metadata:
             labels:
               app: example-deployment
           spec:
             containers:
             - name: <image_name>
               image: cr.selcloud.ru/<registry>/<image>:latest
             imagePullSecrets:
             - name: <secret_name>
       ```

       Укажите:

       * `<registry>` — имя реестра;
       * `<image_name>` — имя образа;
       * `<secret_name>` — имя секрета.

    3. Разверните приложение:

       ```bash
       kubectl apply -f deployment.yaml
       ```

    4. Проверьте статус подов — они должны быть в статусе `running`:

       ```bash
       kubectl get pods
       ```
  </TabItem>
</Tabs>

<Formbricks />
