Я работаю над главой 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 точно так, как указано. Фактически я внес два изменения.
Файлы имели apiVersion: apps / v1beta. Это должно стать apps / v1, иначе другие вещи не работают.
Файлы искали свои Docker образы концентраторов как cdavisafc / *, например cdavisafc / cloudnative-statelessness-posts. Поскольку я помещаю изображения в свою учетную запись Docker Hub, мои изображения называются logicaltiger / cloudnative-statelessness-posts, et c.
В руководстве говорится о хороших вещах, но вы узнаете много нового о docker и minikube, просто получив предоставленный код для фактического развертывания OK.
Jerome.