Curl запросы на тайм-аут minikube, не понимаю почему - PullRequest
0 голосов
/ 07 августа 2020

Я работаю над главой 5 Cloud Native Patterns (Корнелия Дэвис, Manning Press, (c) 2019). Я пытаюсь получить доступ к службе minikube с помощью команды curl, но время ожидания постоянно истекает.

Я использую Windows 10 Домашний компьютер. Он имеет Docker (с виртуальным ящиком), Minikube, kubectl, MySql 8 и OpenJdk 1.8. Я использую терминал Bash (MINGW64), предоставленный GIT.

Согласно инструкциям, я использую приложения, предоставленные автором (подключение, публикация, подключение + публикация), и скомпилировал их с помощью Maven. Затем я загрузил их в свою учетную запись Docker Hub, чтобы Docker мог их использовать. Затем я запустил mysql -sv c через kubectl, как и сказано в руководстве.

После запуска mysql я использовал сервис minikube mysql -sv c --format ... чтобы получить IP: порт и установить его в файл YAML для каждой службы подключения и почтовой службы. Я запустил две службы, и они - на мгновение - заработали.

Вот мой статус кластера:

$ kubectl get all
NAME                              READY   STATUS             RESTARTS   AGE
pod/connections-56bcf7896-h4tz7   0/1     CrashLoopBackOff   8          26m
pod/mysql-7dbfd4dbc4-2jsjt        1/1     Running            0          24h
pod/posts-5d7f46b546-crfmj        1/1     Running            1          102s

NAME                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/connections-svc   NodePort    10.104.27.91    <none>        80:31286/TCP     26m
service/kubernetes        ClusterIP   10.96.0.1       <none>        443/TCP          2d12h
service/mysql-svc         NodePort    10.107.19.70    <none>        3306:31067/TCP   24h
service/posts-svc         NodePort    10.97.232.158   <none>        80:31651/TCP     103s

NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/connections   0/1     1            0           26m
deployment.apps/mysql         1/1     1            1           24h
deployment.apps/posts         1/1     1            1           103s

NAME                                    DESIRED   CURRENT   READY   AGE
replicaset.apps/connections-56bcf7896   1         1         0       26m
replicaset.apps/mysql-7dbfd4dbc4        1         1         1       24h
replicaset.apps/posts-5d7f46b546        1         1         1       103s

Хорошо, служба сообщений запущена. Так что попросите у него что-нибудь:

$ curl $(minikube service --url posts-svc)/posts
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0
curl: (7) Failed to connect to 192.168.99.101 port 31651: Connection refused

Я не знаю, почему он отказывается, и может кто-нибудь объяснить? Или, по крайней мере, объясните, почему в соединениях отказано, даже если у меня правильный IP: Port. Не прошло и четырех минут, как сообщения-sv c вылетали несколько раз:

$ kubectl get all
NAME                              READY   STATUS             RESTARTS   AGE
pod/connections-56bcf7896-h4tz7   0/1     CrashLoopBackOff   9          28m
pod/mysql-7dbfd4dbc4-2jsjt        1/1     Running            0          24h
pod/posts-5d7f46b546-crfmj        0/1     CrashLoopBackOff   3          3m53s
[SNIP]

Как я могу добиться большей стабильности здесь?

Спасибо,

Джером .

ОБНОВЛЕНИЕ 8/11/2020:

После просмотра логов я изменил вот это:

  • Запуск minikube файл mysql -deployment.yaml теперь явно использует пароль, например

    containers:
    - name: mysql
      image: mysql:5.7.22
      env:
        - name: MYSQL_ROOT_PASSWORD
          value: "the_actual_password"
    
  • Я добавил диалект в файл application.properties. Теперь тестовым файлам h2 из примера не нравится этот диалект, поэтому я перекомпилировал, пропуская тесты. Позже я могу добавить диалект h2 в тесты.

      spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL57Dialect
    

Теперь все, что я получаю, это то, что пользователь root не может войти в систему:

    java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)

Из mysql CLI я могу войти в систему как root и получить доступ к базе данных «поваренной книги», которую использует этот код. Проверил, что у root есть все гранты, эт c. Это просто не работает.

Есть еще подсказки?

Джером.

ОБНОВЛЕНИЕ ОТ 12.08.2020:

У меня сейчас хорошие результаты. Вот чем отличается моя жалоба от текущей.

В этом руководстве мне было необходимо загрузить версию MySQL через Docker. Однако на моем компьютере также установлена ​​версия MySQL P C. Я думал, что серверы Docker / Minikube каким-то образом будут использовать загруженный MySQL для подключения к моему рабочему столу MySQL. Поэтому я изменил команду загрузки и файл .yaml, используемый для запуска Minikube mysql -sv c, чтобы дублировать номер версии, пароль и, возможно, другие аспекты использования MySQL. Эффект net заключается в том, что программа и mysql не нравятся друг другу, поэтому службы продолжают перезапускаться.

Правильный подход к Minikube - это загрузка всего необходимого программного обеспечения в контейнер , и это не касается того, что уже есть. Я прочитал это, но, очевидно, не понял. Теперь я обжег пальцы и вижу, что в контейнере есть все программы, которые мне нужны.

Итак, я восстановил всю конфигурацию до того, с чего начинался репозиторий GIT, и заменил mysql, который я изначально установил ( версия 8. +, чтобы соответствовать моему рабочему столу) с тем, который запрашивал учебник (5.7.22).

После перекомпиляции и последующего внесения изменений в мою учетную запись Docker Hub, все работает так же, как Обещанный учебник. Обратите внимание, что в этой книге есть несколько опечаток в командах, в частности, отсутствует предложение '--url' в командах «minikube service ...» на стр.121. Будьте осторожны.

В моем предыдущем бухгалтерском учете говорилось, что я создавал свои файлы «в соответствии с инструкциями», но я был слеп к изменениям, которые я действительно внес.

Джером.

Извините, еще одно ОБНОВЛЕНИЕ от 13.08.2020:

Я сказал, что в конечном итоге использовал файлы конфигурации .yaml точно так, как указано. Фактически я внес два изменения.

  1. Файлы имели apiVersion: apps / v1beta. Это должно стать apps / v1, иначе другие вещи не работают.

  2. Файлы искали свои Docker образы концентраторов как cdavisafc / *, например cdavisafc / cloudnative-statelessness-posts. Поскольку я помещаю изображения в свою учетную запись Docker Hub, мои изображения называются logicaltiger / cloudnative-statelessness-posts, et c.

В руководстве говорится о хороших вещах, но вы узнаете много нового о docker и minikube, просто получив предоставленный код для фактического развертывания OK.

Jerome.

Ответы [ 2 ]

1 голос
/ 07 августа 2020

При запуске minikube попробуйте настроить RAM и память (--cpus 4 --memory 8192, если на вашем компьютере есть эти ресурсы). Кажется, что у minikube недостаточно ресурсов для правильного выполнения собственных задач.

Minikube - fr agile, когда дело доходит до нехватки доступных ресурсов, и если ресурсов мало, вам может потребоваться остановить / запустить несколько раз, пока он не загрузится правильно.

0 голосов
/ 07 августа 2020

Вы также можете выполнить некоторую диагностику, чтобы получить больше информации о том, почему ваши поды падают. *

...