kubernetes - 从集群外部连接到 statefulset 内的特定 pod
问题描述
我有一个与 StatefulSet Kubernetes 教程中描述的相匹配的 StatefulSet,它创建了一个 mysql 主/从结构。我有以下 Kubernetes 对象:
NAME READY STATUS RESTARTS AGE
pod/mysql-0 2/2 Running 7 23h
pod/mysql-1 2/2 Running 6 23h
pod/mysql-2 2/2 Running 6 23h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 21d
service/mysql ClusterIP None <none> 3306/TCP 23h
service/mysql-read ClusterIP 10.152.183.89 <none> 3306/TCP 23h
NAME READY AGE
statefulset.apps/mysql 3/3 23h
编辑: mysql 和 mysql-read 服务与所有 mysql pod 连接。
节点在我的电脑上,我用的是microk8s。
现在我有一个小程序在我的计算机上运行(不在集群中),我想连接到 StatefulSet 中的主服务器(mysql-0)。我需要像只与 mysql-0 连接的服务之类的东西。关于如何做的任何建议?
编辑:想法是找到一个解决方案,允许我仅使用 .yaml 文件部署集群。找到一个包含更多命令的命令并不有趣kubectl apply
该程序如下:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost??",
user="root",
passwd="",
database="testtable"
)
mycursor = mydb.cursor()
sql = "INSERT INTO testtable (name) VALUES (%s)"
val = ("holaquetal")
mycursor.execute(sql, val)
mydb.commit()
我想我可以向 mysql-0 pod 添加一个不同的标签并添加一个查找该标签的 NodePort 服务,但我不想通过命令行来执行此操作。是否可以在 StatefulSet yaml 中为 mysql-0 添加一个标签?
另一个想法可能是向microk8s提供的DNS服务器查询DNS,寻找“mysql.mysql-0”,但我不知道如何将程序连接到DNS服务器,以便我可以使用host=mysql.mysql-0
或整个 CNAME。
解决方案
如果节点在您的计算机上,则可以使用port-forward
将 mysql 的端口从 pod 转发到您的本地。尝试这个:
kubectl port-forward mysql-0 3306:3306
或直接转发到您的主服务
kubectl port-forward svc/mysql-read 3306:3306
推荐阅读
- python - 如何按记录列表过滤 __in django ORM?
- sql - 1 月 1 日 = 第 1 周
- flutter - 我如何转移集团供应商
- c++ - 如何将 OASIS 目录与 libXML2 一起使用
- drupal-8 - 未定义的函数'field_widget_instance
- ddev - 如何添加到 DDEV-Local Web 容器中的 $PATH?(例如,对于 drush)
- windows - 使用批处理从路径中删除尾部反斜杠
- javascript - 无法在 React Natvie 中显示其他组件
- sql - SQL 在我的查询中添加一个带有 COUNT(*) 的列
- python - 如何获取 249 个国家的 DataFrame?