1:環境
k8s-master | 192.168.233.141 |
k8s-node1 | 192.168.233.142 |
k8s-node2 | 192.168.233.143 |
2:思路
一 : 採用兩個service 兩個 Deployment 兩個 Ingress 分片數量 replicas 都是1個 會產生兩個pod 這兩個pod 當中的eureka相互註冊
二 : 因爲通過網址的形式進行註冊 , 所以需要使用到 Headless Service 無頭服務
3:代碼以及解釋
一 :新建 資源清單 eureka01.yaml
二 : 資源清單代碼 以及解釋
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: eureka01 # Ingress 的名稱
namespace: ms # 命名空間 接下來的部署都會使用這個命名空間
spec:
rules:
- host: eureka01.ctnrs.com # 通過 Ingress 映射的地址 , 需要通過host去配置,下面講解
http:
paths:
- path: /
backend:
serviceName: eureka01 # 這裏對應着service 的 名字
servicePort: 8040 # 對應着需要映射的service的端口
---
apiVersion: v1
kind: Service
metadata:
name: eureka01 # Service 的 名稱 對應着 Ingress 中的 serviceName: eureka01
namespace: ms
spec:
clusterIP: None # 這就是將這個service 設置爲無頭服務
ports:
- name: eureka01 # 指定端口的名稱
port: 8040
selector:
project: ms
app: eureka01 # 輪詢對應 Deployment 中 ms 命名空間的 selector 指定的app
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: eureka01
namespace: ms
spec:
replicas: 1
selector:
matchLabels:
project: ms
app: eureka01 # RC通過spec.selector來篩選要控制的Pod
template:
metadata:
labels:
project: ms
app: eureka01
spec:
containers:
- name: eureka01 # pod的名稱,必須字段,名稱唯一且對象創建後不可以被修改
image: registry.cn-hangzhou.aliyuncs.com/sdongp-dkz/cloud-eureka:1.0-SNAPSHOT # 鏡像倉庫的路徑/鏡像的名稱:鏡像的標籤
ports:
- name: http # 指定端口的名稱
containerPort: 8040 # pod暴露的端口,此端口僅是額外的信息,對端口是否被暴露沒有影響
三 : 運行命令 kubectl apply -f eureka01.yaml
四 : 查看 pod 和 svc 的情況 <none> 就是無頭服務
kubectl get pod -o wide -n ms
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
eureka01-7d57b556df-pjfww 1/1 Running 0 2m17s 10.100.3.60 k8s-node2 <none> <none>
kubectl get svc -o wide -n ms
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
eureka01 ClusterIP None <none> 8040/TCP 2m31s app=eureka01,project=ms
五 : 這個時候我們已經創建了一個 eureka
六 : 這個時候還需要配置nginx-ingress 。 不然是沒辦法在外部訪問的 k8s nginx-ingress 的安裝
七 : 配置本地的host 文件 添加 映射
# 192.168.233.143 是我nginx-ingress所在的那臺 node的IP地址
192.168.233.143 eureka01.ctnrs.com
八 :這個時候就能去訪問了 http://eureka01.ctnrs.com:32486/
四:開始添加另一個eureka服務
一 : 新建 eureka02.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: eureka02 # Ingress 的名稱
namespace: ms # 命名空間 接下來的部署都會使用這個命名空間
spec:
rules:
- host: eureka02.ctnrs.com # 通過 Ingress 映射的地址 , 需要通過host去配置,下面講解
http:
paths:
- path: /
backend:
serviceName: eureka02 # 這裏對應着service 的 名字
servicePort: 8040 # 對應着需要映射的service的端口
---
apiVersion: v1
kind: Service
metadata:
name: eureka02 # Service 的 名稱 對應着 Ingress 中的 serviceName: eureka02
namespace: ms
spec:
clusterIP: None # 這就是將這個service 設置爲無頭服務
ports:
- name: eureka02 # 指定端口的名稱
port: 8040
selector:
project: ms
app: eureka02 # 輪詢對應 Deployment 中 ms 命名空間的 selector 指定的app
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: eureka02
namespace: ms
spec:
replicas: 1
selector:
matchLabels:
project: ms
app: eureka02 # RC通過spec.selector來篩選要控制的Pod
template:
metadata:
labels:
project: ms
app: eureka02
spec:
containers:
- name: eureka02 # pod的名稱,必須字段,名稱唯一且對象創建後不可以被修改
image: registry.cn-hangzhou.aliyuncs.com/sdongp-dkz/cloud-eureka:1.0-SNAPSHOT # 鏡像倉庫的路徑/鏡像的名稱:鏡像的標籤
ports:
- name: http # 指定端口的名稱
containerPort: 8040 # pod暴露的端口,此端口僅是額外的信息,對端口是否被暴露沒有影響
二 :其他步驟一樣 因爲已經添加了 nginx-ingress 所以不需要在去添加了
這個時候去訪問的時候我們就能訪問到兩個eureka了
這一個是 pod 是在 60 的ip地址的
這一個是pod在 61 端口的
五:springcloud eureka yml文件配置
eureka:
client:
#false表示不向註冊中心註冊自己。
# register-with-eureka: false
#false表示自己端就是註冊中心,我的職責就是維護服務實例,並不需要去檢索服務
fetch-registry: false
service-url:
#設置與Eureka Server交互的地址查詢服務和註冊服務都需要依賴這個地址。
defaultZone: http://eureka01.ms.svc.cluster.local:${server.port}/eureka/,http://eureka02.ms.svc.cluster.local:${server.port}/eureka/
這裏是一個很關鍵的點 這裏有 這樣的 兩個網址 http://eureka01.ms.svc.cluster.local:${server.port}/eureka/
這裏就是應爲使用了 k8s的無頭服務 。所以沒有ip 而無頭服務默認的 網址組成規則是
http://{serviceName}.{namespaceName}.svc.cluster.local
解釋
{serviceName} 就是我們在新增 eureka01 的時候 service 當中的 name 對應的 eureka01
{namespaceName} 命名空間的名稱 ms
svc.cluster.local 是k8s 默認的集羣名稱
在這裏就完成了一個eureka的集羣部署了