我有一个Docker容器与MariaDB运行在Microk8s(运行在单个Unix机器上)。
# Hello World Deployment YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: mariadb
spec:
selector:
matchLabels:
app: mariadb
template:
metadata:
labels:
app: mariadb
spec:
containers:
- name: mariadb
image: mariadb:latest
env:
- name: MARIADB_ROOT_PASSWORD
value: sa
ports:
- containerPort: 3306
这些是日志:
(...)
2021-09-30 6:09:59 0 [Note] mysqld: ready for connections.
Version: '10.6.4-MariaDB-1:10.6.4+maria~focal' socket: '/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution
现在
- 连接到机器的3306端口不工作。
- 在端口8081上使用服务(任何类型)暴露pod后连接也不工作。
如何接通?
答案已经写在评论区,但为了澄清,我在这里发布解决方案作为社区维基。
在这种情况下,通过设置spec.selector
解决了连接问题。
.spec.selector
字段定义了部署如何找到要管理的pod。在本例中,您选择在Pod模板(app: nginx
)中定义的标签。
.spec.selector
是一个必选字段,用于指定此部署所针对的pod的标签选择器。
您需要使用带有适当标签的服务
示例服务
apiVersion: v1
kind: Service
metadata:
name: mariadb
spec:
selector:
name: mariadb
ports:
- protocol: TCP
port: 3306
targetPort: 3306
type: ClusterIP
您可以使用服务名称来连接或更改服务类型为LoadBalancer
apiVersion: v1
kind: Service
metadata:
name: mariadb
spec:
selector:
name: mariadb
ports:
- protocol: TCP
port: 3306
targetPort: 3306
type: LoadBalancer