k8s 系列之 部署eureka集群

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的集群部署了

springcloud 地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章