Введение
В этом лабораторном занятии (lab) вы научитесь запускать контейнеры в подах (Pods) Kubernetes. Поды (Pods) являются наименьшими и простейшими единицами в Kubernetes, и они могут содержать один или несколько контейнеров. Запуск контейнеров в подах (Pods) предоставляет множество преимуществ, включая более эффективное использование ресурсов, более простое масштабирование и более эффективную развертывание.
Запустите кластер Minikube
Перед созданием ресурсов вам нужен работающий кластер Kubernetes. Minikube - это легковесная среда Kubernetes, которая запускается на вашем локальном компьютере.
Перейдите в рабочую директорию:
Откройте терминал и перейдите в папку проекта по умолчанию:
cd /home/labex/projectЗапустите Minikube:
Запустите Minikube для инициализации кластера Kubernetes:
minikube start- Эта команда настраивает однодневный кластер Kubernetes на вашем локальном компьютере.
- В зависимости от производительности вашей системы Minikube может потребовать несколько минут для запуска.
Проверьте, что 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, который позволяет хранить конфигурационные данные (например, переменные окружения, конфигурационные файлы) отдельно от кода вашего приложения. Это разделение упрощает изменение конфигурации без перестройки контейнеров.
Разобьём этот процесс на простые шаги:
Сначала создайте 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Затем создайте 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). Это мощные концепции, которые помогут вам создавать более надежные и масштабируемые приложения.


