我正在使用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
,然后输入密码,**效果很好!**但我仍然需要更好地使用Workbench。
有没有人帮忙?
编辑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
2条答案
按热度按时间lmvvr0a81#
首先确保服务正在运行,
应返回类似于以下内容的内容:
从那时起,我将首先尝试运行一个端口转发:
这样,即使在使用ClusterIP服务时也可以进行连接。
ee7vknir2#
如果要通过
localhost
直接连接到mysql
部署的Pod,首先必须将Pod的容器端口转发到localhost
。然后您的
mysql
将可以在localhost:<local-port>
上访问。与Pod通信的另一种方式是创建一个Service对象,它将把您的请求直接传递给Pod。有几种类型的服务可用于不同的使用类型。请查看documentation了解更多信息。
原因如下命令
正确地连接到数据库是因为connect命令是在mysql容器本身内部完成的。
编辑1
如果未指定服务类型,则默认值将为
ClusterIP
,该值不允许您在群集外部公开端口。由于
Minikube
不处理LoadBalancer
,因此请改用NodePort
服务类型。您的服务YAML清单应如下所示:
最后,由于您的集群是通过
Minikube
配置的,因此您仍需要调用以下命令来获取Minikube
IP和服务的NodePort
: