Привет, 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 22, 2023 at 9:09 AM PST: 更新编辑 (f4a7975)