k8s中引入外部服务,k8s中引入外部数据源
本篇博客 copy 自 https://www.cnblogs.com/lvzhenjiang/p/14445315.html,感谢博主!本人的博客主要做自己爬坑记录之用。
k8s中如何使用外部有状态服务,如mysql。
一、需求
在工作中,总会遇到这种情况:k8s环境中跑着各种程序接口,有状态服务如mysql,部署在物理机上,那么如果此时,程序接口需要访问数据库,一般有如下几种方式:
* 通过设置程序部署文件中的 HostAliases 字段,来解析到数据库地址。(不建议,如果应用程序较多,需要每个程序部署文件都要指定 HostAlias)
* 手动创建无头服务及endpoint,引入外部数据库,然后通过k8s集群中的域名解析服务访问,访问的主机名格式为:[svc_name].[namespace_name].svc.cluster.local。
* 通过k8s中service的externel name功能实现,具体实现方法暂时没研究,后续补充。
二、通过无头服务实现
个人推荐使用无头服务,使用传统的
假设我这里外部 mysql 地址为:192.168.181.147:3306
,那么对应的 svc 及 endpoint 配置文件 mysql.yaml 如下:
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.181.147
ports:
- name: mysql
port: 3306
protocol: TCP
# 创建service及endpoint
# kubectl apply -f mysql.yml
查看创建的 svc 及 endpoint 如下
# kubectl describe svc/mysql
# kubectl describe endpoints/mysql
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
进入容器访问数据库进行测试:
# kubectl exec -it cdh-master bin/bash
[root@cdh-master /]# ping mysql.default.svc.cluster.local
springboot 数据源配置:
mysql.default.svc.cluster.local
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步