mysql на GKE Autopilot с GCSFUSE: разрешение отказано on/var/lib/mysql/
p> body:
Я развертываю MySQL 8.0 на Google Kubernetes Engine (GKE) Autopilot с использованием Google Cloud Storage ( GCS) с GCSFUSE в качестве постоянного. Файлы базы данных хранятся в ведре GCS, а том установлен на /var/lib/mysql.
Тем не менее, MySQL не может запустить из -за разрешения Проблемы , со следующей ошибкой:
Код: Выделить всё
Defaulted container "mysql" out of: mysql, gke-gcsfuse-sidecar (init), fix-permissions (init)
2025-02-04 16:58:35+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.41-1.el9 started.
2025-02-04 16:58:38+00:00 [Note] [Entrypoint]: Initializing database files
mysqld: Can't create/write to file '/var/lib/mysql/is_writable' (OS errno 13 - Permission denied)
2025-02-04T16:58:38.828764Z 0 [ERROR] [MY-010460] [Server] --initialize specified but the data directory exists and is not writable. Aborting.
2025-02-04T16:58:38.828780Z 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable.
2025-02-04T16:58:38.829179Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.41) MySQL Community Server - GPL
< /code>
[b] Обзор настроек < /strong> < /h3>
У меня есть следующая настройка: < /p> [list]
[*] persistentvolume (pv) и persistentvolumeclair (pvc) < /strong> с использованием gcsfuse-csi < /code>: < /p>
< ul>
bucket: [/b] www_1 [*] Режим доступа: readwritemany (rwx)
< /li>
[*] развертывание (mysql) включает в себя: < /strong> < /p>
- initcontainer < /code> (), который устанавливает правильное право собственности (
Код: Выделить всё
fix-permissions)Код: Выделить всё
chown -R 999:999 /var/lib/mysql - для монтажа ведра GCS
Код: Выделить всё
gke-gcsfuse-sidecar - MySQL 8.0, работающий с монтированием громкости at/var/lib/mysql
[*] Конфигурация учетной записи службы: < /strong> < /p>
- Сервисная учетная запись GKE связана с пользовательской учетной записью сервиса [/b]., role/storage.objectadmin ).
Код: Выделить всё
roles/storage.admin - Требуемые каталоги (требуемые (необходимые каталоги () существует в ведре GCS .
Код: Выделить всё
databases/api
что я попробовал < /strong> < /h3>
- Проверено Статус ПВХ:
[/b] ** с Rwx **, так что Kubernetes видит его в качестве записи.
Код: Выделить всё
kubectl get pvc shared-storage-pvc < /code> Выход: [b]Bound
Код: Выделить всё
kubectl describe pv shared-storage-pv
< /code>
[list]
Вывод показывает, что объем правильно назначен PVC. < /li>
< /ul>
< /li> [b] Проверьте разрешения пользователя MySQL: < /strong> < /p>
kubectl exec -it deployment/api-mysql-deployment -- ls -lah /var/lib/mysql
< /code>
не может выполнить, потому что POD не может запустить. < /li>
< /ul>
< /li>
проверял, монтируется ли gcsfuse только чтенныйkubectl exec -it deployment/api-mysql-deployment -- mount | grep /var/lib/mysql
< /code>
не может выполнить, потому что POD не может запустить. < /li>
< /ul>
< /li>
Проверенные журналы неудачных POD: [/b]
kubectl logs deployment/api-mysql-deployment
< /code>
Показывает [b] ошибки разрешения на ****/var/lib/mysql/[/list]
Попробовал добавить флаги MySQL для совместимости GCSFUSE:
Код: Выделить всё
args:
- "--skip-log-bin"
- "--skip-ssl"
- "--ssl=0"
- "--innodb-flush-method=fsync"
- "--innodb-use-native-aio=0"
< /code>
< /li>
[b] попытаться вручную удалить /var/lib/mysql/*Код: Выделить всё
kubectl delete pod api-mysql-deployment
kubectl rollout restart deployment api-mysql-deployment
< /code>
Все еще не проходит с ошибок разрешения. < /li>
< /ul>
< /li>
< / ul>
[b] развертывание конфигурации yaml < /strong> < /h3>
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-mysql-deployment
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
annotations:
gke-gcsfuse/volumes: "true"
spec:
serviceAccountName: spock
initContainers:
- name: fix-permissions
image: busybox
command: ["sh", "-c", "chown -R 999:999 /var/lib/mysql && chmod -R 777 /var/lib/mysql"]
securityContext:
runAsUser: 0
volumeMounts:
- name: shared-storage
mountPath: "/var/lib/mysql"
subPath: "databases/api"
containers:
- name: mysql
image: mysql:8.0
args:
- "--skip-log-bin"
- "--skip-ssl"
- "--ssl=0"
- "--innodb-flush-method=fsync"
- "--innodb-use-native-aio=0"
env:
- name: MYSQL_ROOT_PASSWORD
value: "password"
- name: MYSQL_DATABASE
value: "api"
- name: MYSQL_USER
value: "user"
- name: MYSQL_PASSWORD
value: "password"
volumeMounts:
- name: shared-storage
mountPath: "/var/lib/mysql"
subPath: "databases/api"
volumes:
- name: shared-storage
persistentVolumeClaim:
claimName: shared-storage-pvc
< /code>
Вопросы < /strong> < /h3>
Почему это делает MySQL все еще видит /var/lib/mysqlКод: Выделить всё
GCSFuseКод: Выделить всё
read-write< /ol>
Я бы признателен за любые идеи от тех, кто успешно развернул MySQL с GCSFUSE на GKE Autopilot! < /p>
заранее спасибо! < /p>
Подробнее здесь: https://stackoverflow.com/questions/794 ... -lib-mysql
Мобильная версия