Изоляция рабочих нагрузок с использованием пространств имен (namespace)

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

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

Введение

Kubernetes предоставляет пространства имен (namespaces) как способ изолировать рабочие нагрузки и ресурсы в кластере. В этом практическом занятии (lab) вы узнаете, как использовать пространства имен для изоляции рабочих нагрузок и ресурсов. Вы создадите пространство имен, развернете простое веб-приложение в этом пространстве имен и убедитесь, что веб-приложение изолировано от других ресурсов в кластере.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/expose("Expose") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("Exec") subgraph Lab Skills kubernetes/initialization -.-> lab-9199{{"Изоляция рабочих нагрузок с использованием пространств имен (namespace)"}} kubernetes/get -.-> lab-9199{{"Изоляция рабочих нагрузок с использованием пространств имен (namespace)"}} kubernetes/create -.-> lab-9199{{"Изоляция рабочих нагрузок с использованием пространств имен (namespace)"}} kubernetes/expose -.-> lab-9199{{"Изоляция рабочих нагрузок с использованием пространств имен (namespace)"}} kubernetes/apply -.-> lab-9199{{"Изоляция рабочих нагрузок с использованием пространств имен (namespace)"}} kubernetes/describe -.-> lab-9199{{"Изоляция рабочих нагрузок с использованием пространств имен (namespace)"}} kubernetes/exec -.-> lab-9199{{"Изоляция рабочих нагрузок с использованием пространств имен (namespace)"}} 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 для сброса среды при необходимости.

Создание пространства имен (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

Вы должны увидеть под other. Запишите имя этого пода.

Далее, выполните следующую команду, чтобы открыть сеанс оболочки (shell) в контейнере, в котором запущено ваше приложение:

kubectl exec -it /bin/sh < pod-name > --

Замените <pod-name> именем пода, которое вы записали ранее.

После того, как вы войдете в сеанс оболочки, выполните следующую команду, чтобы получить доступ к развертыванию (Deployment) web-app:

curl web-app.webapp

Вы должны увидеть HTML-ответ от веб-сервера Nginx.

Резюме

В этом практическом занятии вы узнали, как использовать пространства имен (namespace) для изоляции рабочих нагрузок и ресурсов в кластере Kubernetes. Вы создали пространство имен, развернули простое веб-приложение в этом пространстве имен, сделали веб-приложение доступным извне с помощью сервиса (Service) Kubernetes и убедились, что веб-приложение изолировано от других ресурсов в кластере.