Вы просматриваете документацию для Kubernetes версии: v1.26

Kubernetes v1.26 документация больше не поддерживается. Версия, которую вы сейчас просматриваете, является статической. Для актуальной документации см. последнюю версию.

Привет, Minikube

Это руководство покажет вам, как запустить простое Hello World Node.js приложение на Kubernetes используя Minikube и Katacoda. Katacoda предоставляет бесплатную, встроенную в браузер Kubernetes среду.

Цели

  • Разверните hello world приложение в Minikube.
  • Запустите приложение.
  • Посмотрите логи приложения.

Подготовка к работе

Для этого примера создан образ контейнера, собранный на основе следующих файлов:

var http = require('http');

var handleRequest = function(request, response) {
  console.log('Получен запрос на URL: ' + request.url);
  response.writeHead(200);
  response.end('Hello World!');
};
var www = http.createServer(handleRequest);
www.listen(8080);
FROM node:6.14.2
EXPOSE 8080
COPY server.js .
CMD [ "node", "server.js" ]

Чтобы получить больше информации по запуску команды docker build, ознакомьтесь с документацией по Docker.

Создание кластера Minikube

  1. Нажмите Запуск Терминала

  2. Откройте веб-панель Kubernetes в браузере:

    minikube dashboard
    
  3. Только для окружения Katacoda: В верхней части панели нажмите знак "плюс", а затем на Select port to view on Host 1 (Выберите порт для отображения на хосте 1).

  4. Только для окружения Katacoda: введите 30000, а затем нажмите Display Port (Показать порт).

Создание Deployment

Под Kubernetes - это группа из одного или более контейнеров, связанных друг с другом с целью адмистрирования и организации сети. В данном руководстве под включает в себя один контейнер. Deployment в Kubernetes проверяет здоровье пода и перезагружает контейнер пода в случае его отказа. Deployment-ы являются рекоммендуемым способом организации создания и масштабирования подов.

  1. Используйте команду kubectl create для создание деплоймента для управления подом. Под запускает контейнер на основе предоставленного Docker образа.

    kubectl create deployment hello-node --image=registry.k8s.io/echoserver:1.4
    
  2. Посмотреть информацию о Deployment:

    kubectl get deployments
    

    Вывод:

    NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    hello-node   1         1         1            1           1m
    
  3. Посмотреть информацию о поде:

    kubectl get pods
    

    Вывод:

    NAME                          READY     STATUS    RESTARTS   AGE
    hello-node-5f76cf6ccf-br9b5   1/1       Running   0          1m
    
  4. Посмотреть события кластера:

    kubectl get events
    
  5. Посмотреть kubectl конфигурацию:

    kubectl config view
    

Создание сервиса

По-умолчанию под доступен только при обращении по его внутреннему IP адресу внутри кластера Kubernetes. Чтобы сделать контейнер hello-node доступным вне виртульной сети Kubernetes, необходимо представить под как сервис Kubernetes.

  1. Сделать под доступным для публичной сети Интернет можно с помощью команды kubectl expose:

    kubectl expose deployment hello-node --type=LoadBalancer --port=8080
    

    Флаг --type=LoadBalancer показывает, что сервис должен быть виден вне кластера.

  2. Посмотреть только что созданный сервис:

    kubectl get services
    

    Вывод:

    NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    hello-node   LoadBalancer   10.108.144.78   <pending>     8080:30369/TCP   21s
    kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP          23m
    

    Для облачных провайдеров, поддерживающих балансировщики нагрузки, для доступа к сервису будет предоставлен внешний IP адрес. В Minikube тип LoadBalancer делает сервис доступным при обращении с помощью команды minikube service.

  3. Выполните следующую команду:

    minikube service hello-node
    
  4. Только для окружения Katacoda: Нажмите на знак "Плюс", затем нажмите Select port to view on Host 1.

  5. Только для окружения Katacoda: Введите 30369 (порт указан рядом с 8080 в выводе сервиса), затем нажмите ???.

    Откроется окно браузера, в котором запущено ваше приложение и будет отображено сообщение "Hello World".

Добавление дополнений

В Minikube есть набор встроенных дополнений, которые могут быть включены, выключены и открыты в локальном окружении Kubernetes.

  1. Отобразить текущие поддерживаемые дополнения:

    minikube addons list
    

    Вывод:

    addon-manager: enabled
    dashboard: enabled
    default-storageclass: enabled
    efk: disabled
    freshpod: disabled
    gvisor: disabled
    heapster: disabled
    helm-tiller: disabled
    ingress: disabled
    ingress-dns: disabled
    logviewer: disabled
    metrics-server: disabled
    nvidia-driver-installer: disabled
    nvidia-gpu-device-plugin: disabled
    registry: disabled
    registry-creds: disabled
    storage-provisioner: enabled
    storage-provisioner-gluster: disabled
    
  2. Включить дополнение, например, metrics-server:

    minikube addons enable metrics-server
    

    Вывод:

    metrics-server was successfully enabled
    
  3. Посмотреть Pod и Service, которые вы только что создали:

    kubectl get pod,svc -n kube-system
    

    Вывод:

    NAME                                        READY     STATUS    RESTARTS   AGE
    pod/coredns-5644d7b6d9-mh9ll                1/1       Running   0          34m
    pod/coredns-5644d7b6d9-pqd2t                1/1       Running   0          34m
    pod/metrics-server-67fb648c5                1/1       Running   0          26s
    pod/etcd-minikube                           1/1       Running   0          34m
    pod/influxdb-grafana-b29w8                  2/2       Running   0          26s
    pod/kube-addon-manager-minikube             1/1       Running   0          34m
    pod/kube-apiserver-minikube                 1/1       Running   0          34m
    pod/kube-controller-manager-minikube        1/1       Running   0          34m
    pod/kube-proxy-rnlps                        1/1       Running   0          34m
    pod/kube-scheduler-minikube                 1/1       Running   0          34m
    pod/storage-provisioner                     1/1       Running   0          34m
    
    NAME                           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
    service/metrics-server         ClusterIP   10.96.241.45    <none>        80/TCP              26s
    service/kube-dns               ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP       34m
    service/monitoring-grafana     NodePort    10.99.24.54     <none>        80:30002/TCP        26s
    service/monitoring-influxdb    ClusterIP   10.111.169.94   <none>        8083/TCP,8086/TCP   26s
    
  4. Отключить metrics-server:

    minikube addons disable metrics-server
    

    Вывод:

    metrics-server was successfully disabled
    

Освобождение ресурсов

Теперь вы можете освободить ресурсы созданного вами кластера:

kubectl delete service hello-node
kubectl delete deployment hello-node

Остановите выполнение виртуальной машины Minikube (опционально):

minikube stop

Удалите виртуальную машину Minikube (опционально):

minikube delete

Что дальше

Изменено February 03, 2023 at 3:48 PM PST: Replace k8s.gcr.io with registry.k8s.io (0746ed5683)