1.4.3 注册中心服务部署到k8s

1、定义StatefulSet类型的yaml文件

# 创建ns
[root@k8s-master01 ~]# k create ns demo
[root@k8s-master01 ~]# mkdir springcloud

# 定义yaml文件
[root@k8s-master01 ~]# cd springcloud
[root@k8s-master01 springcloud]# vim demo-eureka-sts.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: demo-eureka
  namespace: demo
  labels:
    app: demo-eureka
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demo-eureka
  serviceName: demo-eureka  # 必须关联 Headless Service
  podManagementPolicy: Parallel
  template:
    metadata:
      labels:
        app: demo-eureka
    spec:
      containers:
      - name: eureka
        image: registry.cn-hangzhou.aliyuncs.com/abroad_images/demo-eureka:v0.0.1
        ports:
        - name: http-web
          containerPort: 8761
          protocol: TCP
        env:
          - name: SPRING_PROFILES_ACTIVE
            value: "k8s"
          - name: SERVER_PORT
            value: "8761"
          - name: EUREKA_SERVER_ADDRESS
            value: "http://demo-eureka-0.demo-eureka:8761/eureka/,http://demo-eureka-1.demo-eureka:8761/eureka/,http://demo-eureka-2.demo-eureka:8761/eureka/"
        resources:
          limits:
            cpu: "1"
            memory: 1Gi
          requests:
            cpu: "100m"
            memory: "128Mi"
        imagePullPolicy: IfNotPresent
        readinessProbe:
          tcpSocket:
            port: 8761
          initialDelaySeconds: 10
          timeoutSeconds: 2
          periodSeconds: 5
        livenessProbe:
          tcpSocket:
            port: 8761
          initialDelaySeconds: 10
          timeoutSeconds: 2
          periodSeconds: 5
      restartPolicy: Always

2、定义Service类型的yaml文件

# 创建无头服务,用于给eureka节点添加标识
[root@k8s-master01 ~]# cd springcloud
[root@k8s-master01 springcloud]# vim demo-eureka-sts-headless-svc.yaml
apiVersion: v1
kind: Service
metadata:
  labels: 
    app: demo-eureka
  name: demo-eureka
  namespace: demo
spec:
  clusterIP: None 
  sessionAffinity: None
  type: ClusterIP
  ports:
  - name: http-web
    port: 8761      
    targetPort: 8761
    protocol: TCP
  selector:
    app: demo-eureka

[root@k8s-master01 ~]# cd springcloud
[root@k8s-master01 springcloud]# vim demo-eureka-sts-nodeport-svc.yaml
apiVersion: v1
kind: Service
metadata:
  labels: 
    app: eureka
  name: eureka
  namespace: demo
spec:
  sessionAffinity: None
  type: NodePort
  ports:
  - name: http-web
    port: 8761      
    targetPort: 8761
    protocol: TCP
  selector:
    app: demo-eureka

3、创建eureka及相关服务

[root@k8s-master01 springcloud]# k apply -f  demo-eureka-sts.yaml -f  demo-eureka-sts-headless-svc.yaml -f demo-eureka-sts-nodeport-svc.yaml

# 验证pod
[root@k8s-master01 springcloud]# kgp -n demo
NAME            READY   STATUS    RESTARTS   AGE
demo-eureka-0   1/1     Running   0          96s
demo-eureka-1   1/1     Running   0          96s
demo-eureka-2   1/1     Running   0          96s

# 验证服务
[root@k8s-master01 springcloud]# kg svc -n demo
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
demo-eureka   ClusterIP   None            <none>        8761/TCP         2m
eureka        NodePort    10.99.172.139   <none>        8761:30590/TCP   2m

4、使用任意节点ip:30590进行访问,这里使用http://10.0.0.20:30590/测试服务,观察到服务正常

image-20250323083953408