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 набор реплик.
Затем мы представляем это развертывание как службу для обслуживания нашего веб-приложения 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