k8s中引入外部服务
简单记录下k8s中如何使用外部有状态服务,如mysql。
一、需求
在工作中,总会遇到这种情况:k8s环境中跑着各种程序接口,有状态服务如mysql,部署在物理机上,那么如果此时,程序接口需要访问数据库,一般有如下几种方式:
- 通过设置程序部署文件中的 HostAliases 字段,来解析到数据库地址。(不建议,如果应用程序较多,需要每个程序部署文件都要指定 HostAlias)
- 手动创建无头服务及endpoint,引入外部数据库,然后通过k8s集群中的域名解析服务访问,访问的主机名格式为:
[svc_name].[namespace_name].svc.cluster.local
。- 通过k8s中service的externel name功能实现,具体实现方法暂时没研究,后续补充。
二、通过无头服务实现
个人推荐使用无头服务,使用传统的
假设我这里外部mysql地址为:192.168.20.2:3306
,那么对应的svc及endpoint配置文件应该如下:
# yml文件内容如下(service和endpoint名字要相同,属于同一个名称空间) $ cat > mysql_svc.yml << EOF apiVersion: v1 kind: Service metadata: name: mysql namespace: default spec: clusterIP: None ports: - name: mysql port: 3306 protocol: TCP targetPort: 3306 type: ClusterIP --- apiVersion: v1 kind: Endpoints metadata: name: mysql namespace: default subsets: - addresses: - ip: 192.168.20.2 ports: - name: mysql port: 3306 protocol: TCP EOF # 创建service及endpoint $ kubectl apply -f mysql_svc.yml
查看创建的svc及endpoint如下:
k8s集群中启动一个centos容器进行验证:
$ cat > cenots.yml << EOF apiVersion: v1 kind: Pod metadata: name: cdh-master labels: role: cdh6.3 spec: containers: - name: centos7-1 image: registry.cn-hangzhou.aliyuncs.com/dragon8512/centos7jdk8ssh:v1 ports: - containerPort: 22 hostPort: 50022 protocol: TCP EOF # ports 字段非必须 # 创建pod $ kubectl apply -f cenots.yml
进入容器访问数据库进行测试:
OK。。。
*************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
分类:
Kubernetes
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律