Запуск контейнеров в подах (Pods)

KubernetesKubernetesBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/ConfigurationandVersioningGroup(["Configuration and Versioning"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/run("Run") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/config("Config") subgraph Lab Skills kubernetes/initialization -.-> lab-14998{{"Запуск контейнеров в подах (Pods)"}} kubernetes/get -.-> lab-14998{{"Запуск контейнеров в подах (Pods)"}} kubernetes/create -.-> lab-14998{{"Запуск контейнеров в подах (Pods)"}} kubernetes/run -.-> lab-14998{{"Запуск контейнеров в подах (Pods)"}} kubernetes/apply -.-> lab-14998{{"Запуск контейнеров в подах (Pods)"}} kubernetes/config -.-> lab-14998{{"Запуск контейнеров в подах (Pods)"}} end

Запуск кластера Minikube

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

  1. Перейдите в рабочую директорию:

    Откройте терминал и перейдите в папку проекта по умолчанию:

    cd /home/labex/project
  2. Запустите Minikube:

    Запустите Minikube для инициализации кластера Kubernetes:

    minikube start
    • Эта команда настраивает однодневный кластер Kubernetes на вашем локальном компьютере.
    • В зависимости от производительности вашей системы Minikube может потребовать несколько минут для запуска.
  3. Проверьте, что Minikube запущен:

    Проверьте статус кластера Minikube:

    minikube status
    • Найдите компоненты, такие как kubelet и apiserver, перечисленные как Running (работающие).
    • Если кластер не запущен, запустите команду minikube start снова.

Если у вас возникли проблемы при запуске Minikube, используйте minikube delete для сброса среды при необходимости.

Создание пода (Pod) с одним контейнером

Первым шагом является создание пода (Pod) с одним контейнером. Для этого вы создадите файл YAML, который определяет под (Pod) и его контейнер.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod-1
spec:
  containers:
    - name: my-container
      image: nginx

Сохраните приведенный выше код в файле с именем /home/labex/project/pod-single-container.yaml и выполните следующую команду:

kubectl apply -f /home/labex/project/pod-single-container.yaml

Эта команда создаст под (Pod) с именем my-pod-1 с одним контейнером, именуемым my-container, который запускает образ Nginx.

Создание пода (Pod) с несколькими контейнерами

Вторым шагом является создание пода (Pod) с несколькими контейнерами. Для этого вы измените предыдущий файл YAML, добавив еще один контейнер.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod-2
spec:
  containers:
    - name: my-container
      image: nginx
    - name: my-sidecar
      image: busybox
      command: ["sh", "-c", "echo Hello from the sidecar! && sleep 3600"]

Сохраните приведенный выше код в файле с именем /home/labex/project/pod-multiple-containers.yaml и выполните следующую команду:

kubectl apply -f /home/labex/project/pod-multiple-containers.yaml

Эта команда создаст под (Pod) с именем my-pod-2 с двумя контейнерами. Первый контейнер запускает образ Nginx, а второй контейнер запускает образ BusyBox и выводит сообщение в консоль.

Создание пода (Pod) с переменными окружения

Третий шаг - создать под (Pod) с переменными окружения. Для этого вы измените файл YAML, добавив переменные окружения в контейнер Nginx.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod-3
spec:
  containers:
    - name: my-container
      image: nginx
      env:
        - name: MY_ENV_VAR
          value: "Hello World!"

Сохраните приведенный выше код в файле с именем /home/labex/project/pod-env-vars.yaml и выполните следующую команду:

kubectl apply -f /home/labex/project/pod-env-vars.yaml

Эта команда создаст под (Pod) с именем my-pod-3 с одним контейнером, именуемым my-container, который запускает образ Nginx и имеет переменную окружения с именем MY_ENV_VAR и значением Hello World!.

Создание Pod с использованием ConfigMaps

Четвёртый шаг - создание Pod с использованием ConfigMaps. ConfigMap - это ресурс Kubernetes, который позволяет хранить конфигурационные данные (например, переменные окружения, конфигурационные файлы) отдельно от кода вашего приложения. Это разделение упрощает изменение конфигурации без перестройки контейнеров.

Разобьём этот процесс на простые шаги:

  1. Сначала создайте ConfigMap:

    kubectl create configmap my-config --from-literal=MY_ENV_VAR=labex

    Эта команда создаёт ConfigMap с именем my-config, который хранит одну пару ключ-значение:

    • Ключ: MY_ENV_VAR
    • Значение: labex

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

    kubectl get configmap my-config -o yaml
  2. Затем создайте Pod, который использует этот ConfigMap:

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod-4
    spec:
      containers:
        - name: my-container
          image: nginx
          envFrom:
            - configMapRef:
                name: my-config

    Сохраните этот YAML-файл в /home/labex/project/pod-configmap.yaml и примените его:

    kubectl apply -f /home/labex/project/pod-configmap.yaml

Это создаст Pod, который имеет доступ к конфигурационному значению, которое мы сохранили в ConfigMap. Это значение будет доступно как переменная окружения внутри контейнера. Вы можете проверить это, запустив команду:

kubectl exec -it my-pod-4 -- env | grep MY_ENV_VAR

Создание пода (Pod) с постоянными томами (Persistent Volumes)

Пятый шаг - создать под (Pod) с постоянным томом (Persistent Volume, PV) и заявкой на постоянный том (Persistent Volume Claim, PVC). PV и PVC используются для постоянного хранения и доступа к данным при перезапусках подов (Pods).

Для этого сначала создадим PV.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"

Сохраните приведенный выше код в файле с именем /home/labex/project/pv.yaml и выполните следующую команду:

kubectl apply -f /home/labex/project/pv.yaml

Эта команда создаст PV с именем my-pv с емкостью 1ГиБ и путем на узле /mnt/data.

Далее, создадим PVC, которая запрашивает 1ГиБ хранилища из PV.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

Сохраните приведенный выше код в файле с именем /home/labex/project/pvc.yaml и выполните следующую команду:

kubectl apply -f /home/labex/project/pvc.yaml

Эта команда создаст PVC с именем my-pvc, которая запрашивает 1ГиБ хранилища.

Наконец, вы измените файл YAML, чтобы добавить том и точку монтирования тома в контейнер Nginx.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod-5
spec:
  containers:
    - name: my-container
      image: nginx
      volumeMounts:
        - name: my-volume
          mountPath: /mnt/data
  volumes:
    - name: my-volume
      persistentVolumeClaim:
        claimName: my-pvc

Сохраните приведенный выше код в файле с именем /home/labex/project/pod-pv.yaml и выполните следующую команду:

kubectl apply -f /home/labex/project/pod-pv.yaml

Эта команда создаст под (Pod) с именем my-pod-5 с одним контейнером, именуемым my-container, который запускает образ Nginx и имеет точку монтирования тома по пути /mnt/data, которая поддерживается PVC с именем my-pvc.

Итог

Поздравляем! Вы завершили этот практический урок и узнали, как запускать контейнеры в подах (Pods) Kubernetes. Вы также научились создавать поды с несколькими контейнерами, переменными окружения, ConfigMaps и постоянными томами (Persistent Volumes). Это мощные концепции, которые помогут вам создавать более надежные и масштабируемые приложения.