簡體   English   中英

MySQL Kubernetes

[英]MySQL Kubernetes

我有這樣一個 mysql 配置用於 kubernetes。 但是我無法使用本地 mysql 連接到數據庫。 我正在做端口轉發:kubectl port-forward svc/mysql 3307 然后嘗試使用命令連接:mysql -h 127.0.0.1 -P 3307 -uroot -p

帶密碼:通過

此密碼在 root 用戶的機密文件中定義。 錯誤是:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

你知道可能出了什么問題嗎?

mysql部署:

apiVersion: v1
kind: Service
metadata:
  name: mysql 
  labels:
    app: mysql
    tier: database
spec:
  ports:
    - port: 3307
      targetPort: 3306
  selector:       
    app: mysql
    tier: database
---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim 
  labels:
    app: mysql
    tier: database
spec:
  accessModes:
    - ReadWriteOnce   
  resources:
    requests:
      storage: 1Gi   
---
# 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  labels:
    app: mysql
    tier: database
spec:
  selector:
    matchLabels:
      app: mysql
      tier: database
  strategy:
    type: Recreate
  template:
    metadata:
      labels: 
        app: mysql
        tier: database
    spec:
      containers:
        - image: mysql:5.7 # image from docker-hub
          args:
            - "--ignore-db-dir=lost+found" 
          name: mysql
          env:
            - name: MYSQL_ROOT_PASSWORD 
              valueFrom:
                secretKeyRef:
                  name: db-root-credentials 
                  key: password  
            - name: MYSQL_USER 
              valueFrom:
                secretKeyRef:
                  name: db-credentials
                  key: username
            - name: MYSQL_PASSWORD 
              valueFrom:
                secretKeyRef:
                  name: db-credentials
                  key: password
            - name: MYSQL_DATABASE 
              valueFrom:
                configMapKeyRef:
                  name: db-conf
                  key: name
          ports:
            - containerPort: 3306
              name: mysql
          volumeMounts:        
            - name: mysql-persistent-storage
              mountPath: 
      volumes:
        - name: mysql-persistent-storage 
          persistentVolumeClaim:
            claimName: mysql-pv-claim

mysqldb-root-credentials:

apiVersion: v1
kind: Secret
metadata:
  name: db-root-credentials
data:
  password: cGFzcwo=

mysqldb-憑據:

apiVersion: v1
kind: Secret
metadata:
  name: db-credentials
data:
  username: c2ViYQo=
  password: c2ViYQo=

我已經復制了您的問題並通過更改創建秘密的方式來解決它。 我使用kubectl CLI 創建秘密:

kubectl create secret generic db-credentials --from-literal=password=xyz --from-literal=username=xyz
kubectl create secret generic mysql-pass --from-literal=password=pass

然后部署PVC, Deployment and Service

apiVersion: v1
kind: Service
metadata:
  name: mysql 
  labels:
    app: mysql
    tier: database
spec:
  ports:
    - port: 3306
      targetPort: 3306
  selector:       
    app: mysql
    tier: database
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim 
  labels:
    app: mysql
    tier: database
spec:
  accessModes:
    - ReadWriteOnce   
  resources:
    requests:
      storage: 1Gi   
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  labels:
    app: mysql
    tier: database
spec:
  selector:
    matchLabels:
      app: mysql
      tier: database
  strategy:
    type: Recreate
  template:
    metadata:
      labels: 
        app: mysql
        tier: database
    spec:
      containers:
        - image: mysql:5.7 # image from docker-hub
          args:
            - "--ignore-db-dir=lost+found" 
          name: mysql
          env:
            - name: MYSQL_ROOT_PASSWORD 
              valueFrom:
                secretKeyRef:
                  name: mysql-pass
                  key: password  
            - name: MYSQL_USER 
              valueFrom:
                secretKeyRef:
                  name: db-credentials
                  key: username
            - name: MYSQL_PASSWORD 
              valueFrom:
                secretKeyRef:
                  name: db-credentials
                  key: password
          ports:
            - containerPort: 3306
              name: mysql
          volumeMounts:        
            - name: mysql-persistent-storage
              mountPath: /var/lib/mysql
      volumes:
        - name: mysql-persistent-storage 
          persistentVolumeClaim:
            claimName: mysql-pv-claim

執行到 pod:

kubectl exec -it mysql-78d9b7b765-2ms5n -- mysql -h 127.0.0.1 -P 3306 -uroot -p

輸入root密碼后,一切正常:

Welcome to the MySQL monitor.  Commands end with ; or \g.
[...]

mysql>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM