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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM