Введение
Kubernetes предоставляет пространства имен (namespaces) как способ изолировать рабочие нагрузки и ресурсы в кластере. В этом практическом занятии (lab) вы узнаете, как использовать пространства имен для изоляции рабочих нагрузок и ресурсов. Вы создадите пространство имен, развернете простое веб-приложение в этом пространстве имен и убедитесь, что веб-приложение изолировано от других ресурсов в кластере.
Запустите кластер 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 для сброса среды при необходимости.
Создание пространства имен (namespace)
На этом шаге вы создадите пространство имен с именем webapp, чтобы изолировать веб-приложение от других ресурсов в кластере.
Создайте файл с именем namespace.yaml со следующим содержимым:
apiVersion: v1
kind: Namespace
metadata:
name: webapp
Примените пространство имен к вашему кластеру с помощью следующей команды:
kubectl apply -f namespace.yaml
Проверьте, что пространство имен было создано, с помощью следующей команды:
kubectl get namespaces
Вы должны увидеть пространство имен webapp в списке пространств имен.
Развертывание веб-приложения
На этом шаге вы развернете простое веб-приложение в пространстве имен (namespace) webapp.
Создайте файл с именем web-app.yaml со следующим содержимым:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
namespace: webapp
spec:
replicas: 1
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Этот файл создает развертывание (Deployment) с одним экземпляром контейнера, который запускает последнюю версию веб-сервера Nginx.
Примените развертывание к вашему кластеру с помощью следующей команды:
kubectl apply -f web-app.yaml
Проверьте, что веб-приложение запущено в пространстве имен webapp с помощью следующей команды:
kubectl get pods -n webapp
Вы должны увидеть под (pod) web-app в списке подов, запущенных в пространстве имен webapp.
Размещение веб-приложения в доступной сети
На этом шаге вы сделаете веб-приложение доступным извне с помощью сервиса (Service) Kubernetes.
Создайте файл с именем web-app-service.yaml со следующим содержимым:
apiVersion: v1
kind: Service
metadata:
name: web-app
namespace: webapp
spec:
selector:
app: web-app
ports:
- name: http
port: 80
targetPort: 80
type: ClusterIP
Этот файл создает сервис, который делает веб-приложение доступным в кластере с использованием ClusterIP.
Примените сервис к вашему кластеру с помощью следующей команды:
kubectl apply -f web-app-service.yaml
Проверьте, что сервис запущен в пространстве имен webapp с помощью следующей команды:
kubectl get services -n webapp
Вы должны увидеть сервис web-app в списке сервисов, запущенных в пространстве имен webapp.
Проверка изоляции пространства имен (namespace)
На этом шаге вы убедитесь, что веб-приложение изолировано от других ресурсов в кластере.
Создайте файл с именем other-app.yaml со следующим содержимым:
apiVersion: apps/v1
kind: Deployment
metadata:
name: other
spec:
replicas: 1
selector:
matchLabels:
app: other
template:
metadata:
labels:
app: other
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
В этом файле вы создаете другое развертывание (Deployment) с именем other в пространстве имен по умолчанию, которое запускает контейнер с образом nginx.
Примените развертывание к вашему кластеру с помощью следующей команды:
kubectl apply -f other-app.yaml
Проверьте, что развертывание запущено в пространстве имен по умолчанию с помощью следующей команды:
kubectl get pods | grep other
Вы должны увидеть под (pod) other в списке подов, запущенных в пространстве имен по умолчанию.
Проверка доступа между пространствами имен (namespace)
Сначала найдите имя пода (pod), на котором запущено ваше приложение, выполнив следующую команду:
kubectl get pods -l app=other
Вы должны увидеть под (pod) с именем other. Запомните имя пода.
Затем выполните следующую команду, чтобы открыть сессию оболочки в контейнере, на котором запущено ваше приложение:
kubectl exec -it pod-name -- /bin/sh
Замените <pod-name> на имя пода, которое вы запомнили ранее.
После того, как вы окажетесь в сессии оболочки, выполните следующую команду, чтобы получить доступ к Deployment web-app:
curl web-app.webapp
Вы должны увидеть HTML-ответ от веб-сервера Nginx.
Резюме
В этом практическом занятии вы узнали, как использовать пространства имен (namespace) для изоляции рабочих нагрузок и ресурсов в кластере Kubernetes. Вы создали пространство имен, развернули простое веб-приложение в этом пространстве имен, сделали веб-приложение доступным извне с помощью сервиса (Service) Kubernetes и убедились, что веб-приложение изолировано от других ресурсов в кластере.


