我已经在kubernetes中部署了mysql数据库,并通过服务公开了该数据库。当我的应用程序尝试连接到该数据库时,它一直被拒绝。当我尝试在本地访问它时,我也会得到相同的信息。 Kubernetes节点在minikube中运行。
apiVersion: v1
kind: Service
metadata:
name: mysql-service
spec:
type: NodePort
selector:
app: mysql
ports:
- port: 3306
protocol: TCP
targetPort: 3306
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-deployment
labels:
app: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql_db
imagePullPolicy: Never
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-persistent-storage
mountPath: "/var/lib/mysql"
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
这是我用于持久存储的Yaml:
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/Users/Work/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
此后,我通过运行minikube service list
来获得此信息:
default | mysql-service | http://192.168.99.101:31613
但是,我既不能从应用程序也不能从本地计算机访问数据库。 我缺少什么或我配置错误了吗?
编辑: 我在这里没有定义任何环境,因为由docker运行的映像已经是一个正在运行的mysql数据库,并且一些脚本也在docker映像内运行。
答案 0 :(得分:1)
MySQL必须尚未启动,请通过检查日志进行确认。 kubectl get pods | grep mysql
; kubectl logs -f $POD_ID
。请记住,必须指定环境变量 MYSQL_DATABASE 和 MYSQL_ROOT_PASSWORD 才能启动mysql。如果您不想为root设置密码,则还要指定相应的命令。在这里,我给您一个mysql yaml的示例。
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-deployment
labels:
app: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql_db
imagePullPolicy: Never
env:
- name: MYSQL_DATABASE
value: main_db
- name: MYSQL_ROOT_PASSWORD
value: s4cur4p4ss
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-persistent-storage
mountPath: "/var/lib/mysql"
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
答案 1 :(得分:1)
好,我知道了。浏览日志后,我发现错误Can't create/write to file '/var/lib/mysql/is_writable' (Errcode: 13 - Permission denied)
。
构建时,我必须将此添加到我的docker映像中:
RUN usermod -u 1000 mysql
重建图像后,一切开始起作用。谢谢你们。
答案 2 :(得分:0)
我认为我正确连接到我的数据库服务器,但我错了。我的数据库部署在线(使用 kubectl exec -it xxxx -- bash
和 mysql -u root --password=$MYSQL_ROOT_PASSWORD
进行测试),但这不是问题。
我犯了一个简单的错误,混淆了我的服务和部署标签。我的数据库服务使用的标签与 Joomla configMap 指定为 MySQL 主机的标签不同。
总而言之,数据库服务 yaml 是
metadata:
labels:
app: fnjoomlaopencart-db-service
和需要的 Joomla configMap yaml
data:
# point to the DB service
MYSQL_HOST: fnjoomlaopencart-db-service