我正在使用 Minikube,這是我的配置:
kubectl describe deployment mysql
輸出:
Name: mysql
Namespace: default
CreationTimestamp: Sat, 12 Nov 2022 02:20:54 0200
Labels: <none>
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=mysql
Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=mysql
Containers:
mysql:
Image: mysql
Port: 3306/TCP
Host Port: 0/TCP
Environment:
MYSQL_ROOT_PASSWORD: <set to the key 'password' in secret 'mysql-pass'> Optional: false
Mounts:
/docker-entrypoint-initdb.d from mysql-init (rw)
Volumes:
mysql-init:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: mysql-init
Optional: false
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: mysql-77fd55bbd9 (1/1 replicas created)
當我嘗試使用 mysql workbench 連接到它時:

它告訴我:

但是,當我執行此行以創建一個mysql-client以嘗試連接到 mysql 服務器時:
kubectl run -it --rm --image=mysql:8.0 --restart=Never mysql-client -- mysql -h mysql -u skaffold -p
然后輸入密碼,就可以了!但我仍然需要更好地使用作業臺。
有什么幫助嗎?
編輯 1:
這是部署和服務的 yaml 檔案:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-init
mountPath: /docker-entrypoint-initdb.d
volumes:
- name: mysql-init
configMap:
name: mysql-init
---
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
name: mysql
spec:
ports:
- port: 3306
targetPort: 3306
protocol: TCP
selector:
app: mysql
uj5u.com熱心網友回復:
首先確保你的服務正在運行,所以
kubectl get service
應該回傳類似的東西:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysql ClusterIP 10.99.140.115 <none> 3306/TCP 2d6h
從那時起,我會嘗試先運行埠轉發:
kubectl port-forward service/mysql 3306:3306
這應該允許您即使在使用 ClusterIP 服務時也能連接。
uj5u.com熱心網友回復:
如果您想通過 直接連接到mysqlDeployment 的 Pod localhost,首先,您必須將 Pod 的容器埠轉發到localhost.
kubectl port-forward <pod-name> <local-port>:<container-port>
然后您mysql將可以在 上訪問localhost:<local-port>。
與 Pod 通信的另一種方法是創建一個服務物件,它將您的請求直接傳遞給 Pod。對于不同型別的使用,有幾種型別的服務。查看檔案以了解更多資訊。
以下命令的原因
kubectl run -it --rm --image=mysql:8.0 --restart=Never mysql-client -- mysql -h mysql -u skaffold -p
正確連接到資料庫是因為連接命令是在 mysql 容器本身內部完成的。
編輯 1
如果您未指定服務型別,則默認為ClusterIP不允許您在集群外公開埠。
因為Minikube不處理而是LoadBalancer使用NodePort服務型別。
您的服務 YAML 清單應如下所示:
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
name: mysql
spec:
type: NodePort
ports:
- port: 3306
targetPort: 3306
protocol: TCP
selector:
app: mysql
最后,因此您的集群是通過配置的Minikube,您仍然需要呼叫下面的命令來獲取MinikubeIP 和服務NodePort:
minikube service <service-name> --url
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/534616.html
