5 минут развертывания hello world to kubernetes с Minikube на Mac

1. Запуск Minikube

Этот пост является продолжением исследования того, что такое minikube и на что он способен. Приступим к запуску minikube.

$ minikube start
╰─ minikube start
😄  minikube v1.4.0 on Darwin 10.14.6
💡  Tip: Use 'minikube start -p <name>' to create a new cluster, or 'minikube delete' to delete this one.
🔄  Starting existing virtualbox VM for "minikube" ...
⌛  Waiting for the host to be provisioned ...
🐳  Preparing Kubernetes v1.16.0 on Docker 18.09.9 ...
🔄  Relaunching Kubernetes using kubeadm ...
⌛  Waiting for: apiserver proxy etcd scheduler controller dns
🏄  Done! kubectl is now configured to use "minikube"

2. Запускаем приборную панель k8s.

На другой вкладке терминала запустите дашборд. Он автоматически откроет для вас вкладку браузера.

$ minikube dashboard
╰─ minikube dashboard
🤔  Verifying dashboard health ...
🚀  Launching proxy ...
🤔  Verifying proxy health ...
🎉  Opening http://127.0.0.1:59708/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...

2. Извлечь и развернуть

Вытащите образ докеры из реестра по вашему выбору. В этом случае мы воспользуемся собственным примером приложения GCP hello world.

$ kubectl get all     # 1
╰─ kubectl get all
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   4d18h

$ kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10     # 2
╰─ kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10
deployment.apps/hello-minikube created

$ kubectl get all      # 3
╰─ kubectl get all
NAME                                  READY   STATUS    RESTARTS   AGE
pod/hello-minikube-797f975945-mjqcc   1/1     Running   0          8s

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   4d18h

NAME                             READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/hello-minikube   1/1     1            1           8s

NAME                                        DESIRED   CURRENT   READY   AGE
replicaset.apps/hello-minikube-797f975945   1         1         1       8s     # <<<<<< running pods replicas

Мы видим разницу до и после в том, что в настоящее время выполняется в нашем кластере k8s.

  1. Перед созданием развертывания убедитесь, что не возникнет конфликта имен с другими службами.
  2. Получите образ развертывания из реестра.
  3. Мы видим, что работает только 1 набор реплик.

Затем мы представляем это развертывание как службу для обслуживания нашего веб-приложения hello world.

$ kubectl expose deployment hello-minikube --type=NodePort --port=8080
╰─ kubectl expose deployment hello-minikube --type=NodePort --port=8080
service/hello-minikube exposed

$ kubectl get all
╰─ kubectl get all
NAME                                  READY   STATUS    RESTARTS   AGE
pod/hello-minikube-797f975945-mjqcc   1/1     Running   0          53s

NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/hello-minikube   NodePort    10.103.90.129   <none>        8080:30455/TCP   2s    # <<<<<< EXPOSED SERVICE HERE
service/kubernetes       ClusterIP   10.96.0.1       <none>        443/TCP          4d18h

NAME                             READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/hello-minikube   1/1     1            1           53s

NAME                                        DESIRED   CURRENT   READY   AGE
replicaset.apps/hello-minikube-797f975945   1         1         1       53s

Теперь мы видим сопоставленный порт, который мы можем открыть в нашем браузере.

На панели управления minikube вы должны увидеть следующее:

3. Найдите URL-адрес и проследите журнал модуля.

$ minikube service hello-minikube --url     # 1
╰─ minikube service hello-minikube --url
http://192.168.99.100:30510

Вы должны иметь возможность открыть URL-адрес в браузере и увидеть следующее:

$ kubectl logs -f hello-minikube-797f975945-ldlxf     # 2
╰─ kubectl logs -f hello-minikube-797f975945-ldlxf
Generating self-signed cert
Generating a 2048 bit RSA private key
.......................................................+++
...........+++
writing new private key to '/certs/privateKey.key'
-----
Starting nginx
172.17.0.1 - - [01/Oct/2019:01:17:11 +0000] "GET / HTTP/1.1" 200 727 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:69.0) Gecko/20100101 Firefox/69.0"
172.17.0.1 - - [01/Oct/2019:01:17:11 +0000] "GET /favicon.ico HTTP/1.1" 200 671 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:69.0) Gecko/20100101 Firefox/69.0"
...

Также в другом окне терминала вы также можете отслеживать свой экземпляр пода.

4. Уменьшите размер беговых капсул.

У капсул нет функции паузы или остановки. Таким образом, единственный способ остановить модуль - это установить для наборов реплик значение 0.



$ kubectl scale --replicas=0 deployment/hello-minikube     # 1  
╰─ kubectl scale --replicas=0 deployment/hello-minikube
deployment.apps/hello-minikube scaled

$ kubectl get pods --context=minikube
╰─ kubectl get pods --context=minikube
NAME                              READY   STATUS        RESTARTS   AGE
hello-minikube-797f975945-rq66p   1/1     Terminating   0          2m59s

$ kubectl get pods --context=minikube
╰─ kubectl get pods --context=minikube
No resources found.

3. Очистить

$ kubectl delete services hello-minikube
╰─ kubectl delete services hello-minikube
service "hello-minikube" deleted

$ kubectl delete deployment hello-minikube
╰─ kubectl delete deployment.apps/hello-minikube
deployment.apps "hello-minikube" deleted

$ kubectl get all
╰─ kubectl get all
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   4d18h

Еще раз взгляните на свою панель управления, и вы не увидите никаких развертываний, служб, модулей, наборов реплик.

ПРИМЕЧАНИЕ. При удалении развертывания удаляются модули и наборы реплик, а также связанные с ним службы

Остановить Minikube

$ minikube stop
╰─ minikube stop
✋  Stopping "minikube" in virtualbox ...
🛑  "minikube" stopped.

ПРИМЕЧАНИЕ 2: НЕ ОСТАНАВЛИВАЙТЕ MINIKUBE В СРЕДНЕМ ПРОЦЕССЕ ОСТАНОВА. ОНА РАЗБИТ МИНИКУБ

Для тех из вас, кого больше интересует копирование и вставка

minkube start

kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10

kubectl expose deployment hello-minikube --type=NodePort --port=8080

kubectl get all

minikube service hello-minikube --url

minikube dashboard

Подвести итог

  • Извлечь образ докера из определенного реестра
  • Развертывание с использованием развертывания и службы yaml
  • Наблюдайте за запущенными модулями в командной строке и на панели инструментов
  • kubectl get all быстрее, чем kubectl get pods && kubectl get services && kubectl get deployments

Использованная литература:





#kubernetes #devops #docker #gcp #eks #tutorial #minikube # k8s #easy #cluster #helm #deployments #services #pods #dashboard