Доброе утро,
Я очень новичок в Docker и Kubernetes, и я действительно не знаю, с чего начать искать помощь. Я создал контейнер базы данных с Docker, и я хочу управлять им и масштабировать с помощью Kubernetes. Я начал устанавливать minikube на своей машине и попытался сначала создать Deployment, а затем StatefulSet для контейнера базы данных. Но у меня есть проблема с StatefulSet при создании Pod с базой данных (mariadb или mysql). Когда я использую Deployment, модули загружаются и работают нормально. Однако те же модули не работают при использовании их в StatefulSet, возвращая ошибки, запрашивающие константы MYSQL. Это развертывание, и я использую команду kubectl create -f deployment.yaml
:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: mydb-deployment
spec:
template:
metadata:
labels:
name: mydb-pod
spec:
containers:
- name: mydb
image: ignasiet/aravomysql
ports:
- containerPort: 3306
А при перечислении развертываний: kubectl get Deployments
:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
mydb-deployment 1 1 1 1 2m
И стручки: kubectl get pods
:
NAME READY STATUS RESTARTS AGE
mydb-deployment-59c867c49d-4rslh 1/1 Running 0 50s
Но так как я хочу создать постоянную базу данных, я пытаюсь создать объект statefulSet с тем же контейнером и постоянным томом.
Таким образом, при создании следующего StatefulSet с kubectl create -f statefulset.yaml
:
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: statefulset-mydb
spec:
serviceName: mydb-pod
template:
metadata:
labels:
name: mydb-pod
spec:
containers:
- name: aravo-database
image: ignasiet/aravomysql
ports:
- containerPort: 3306
volumeMounts:
- name: volume-mydb
mountPath: /var/lib/mysql
volumes:
- name: volume-mydb
persistentVolumeClaim:
claimName: config-mydb
С услугой kubectl create -f service-db.yaml
:
apiVersion: v1
kind: Service
metadata:
name: mydb
spec:
type: ClusterIP
ports:
- port: 3306
selector:
name: mydb-pod
И файл разрешений kubectl create -f permissions.yaml
:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: config-mydb
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
Стручки не работают. Они дают ошибку:
NAME READY STATUS RESTARTS AGE
statefulset-mydb-0 0/1 CrashLoopBackOff 1 37s
А при анализе логов kubectl logs statefulset-mydb-0:
`error: database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD`
Как возможно, что он запрашивает эти переменные, когда контейнер уже имеет скрипт инициализации и работает отлично? И почему он спрашивает только при запуске с набором состояний, а не при запуске развертывания?
Заранее спасибо.