#kubernetes
Вопрос:
Я создал постоянную базу данных MySQL в кластере Kubernetes, следуя этому руководству. Я пытаюсь создать таблицы при инициализации, но не могу заставить их работать.
Я попробовал два разных подхода.
Сначала создайте новую карту конфигурации:
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-initdb-config
data:
initdb.sql: |
#SQL GOES HERE
И я добавил его в тома здесь с помощью службы с отслеживанием состояния (я добавил закомментированные строки).:
volumes:
- name: conf
emptyDir: {}
- name: config-map
configMap:
name: mysql
# - name: mysql-initdb
# configMap:
# name: mysql-initdb-config
Я также попытался добавить данные SQL в используемую текущую карту конфигурации:
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql
namespace: thesis
labels:
app: mysql
data:
primary.cnf: |
[mysqld]
log-bin
replica.cnf: |
[mysqld]
super-read-only
initdb.sql: |
# SQL goes here
Еще раз сославшись на него в наборе с отслеживанием состояния:
volumes:
- name: conf
emptyDir: {}
- name: config-map
configMap:
name: mysql
# - name: mysql-initdb
# configMap:
# name: mysql;
Я использую совершенно неправильный подход или это просто небольшая ошибка?
Ответ №1:
Когда контейнер mysql запускается в первый раз, он будет выполнять файлы с расширениями .sh, .sql и sql.sz которые находятся в /docker-entrypoint-initdb.d после создания новой базы данных. Поэтому мы должны смонтировать сценарий инициализации в этом конкретном каталоге.
Сначала создайте новую карту конфигурации/секрет, которая будет использоваться в качестве источника тома.
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-initdb-config
data:
initdb.sql: |
#SQL GOES HERE
Затем создайте том, который будет смонтирован в каталоге /docker-entrypoint-initdb.d.
volumes:
- name: init-script
configMap:
name: mysql-initdb-config
Теперь смонтируйте этот том в определенном каталоге.
volumeMounts:
- name: init-script
mountPath: /docker-entrypoint-initdb.d
Далее читайте: Как использовать изображение MySQL
Комментарии:
1. Таким образом, это дает мне следующую ошибку: «Предупреждение не удалось создать 2m21s (x16 за 5m5s) набор состояний-контроллер создает модуль mysql-0 в наборе состояний ошибка mysql: Модуль «mysql-0» недопустим: спецификации.контейнеры[1].Объемные установки[2].имя: Не найдено: «init-скрипт»‘
2. Но это определенно полезный шаг в правильном направлении, я надеюсь, что смогу заставить его работать отсюда.
3. можете ли вы проверить, создан ли том сценария инициализации или нет? Я думаю, это потому, что volumeMount не смог найти ни одного тома с именем init-script.
4. Правильно: «Предупреждение не удалось установить 51s (x9 более 2m59s) кубелет MountVolume. Ошибка установки для тома «init-скрипт» : карта конфигурации «mysql-initdb-конфигурация» не найдена»
5. На самом деле ваше оригинальное решение сработало, я просто задержался из-за ошибки пространства имен