• k8s发布eureka集群,创建微服务项目


    1.创建eureka服务

    1.1创建父级项目,父级项目pom.xml文件中的打包类型为pom

    
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0modelVersion>
        <groupId>com.diguagroupId>
        <artifactId>cloudartifactId>
        <version>releaseversion>
        <packaging>pompackaging>
        <modules>
            <module>eurekamodule>
            <module>ordermodule>
            <module>monitormodule>
            <module>commonmodule>
            <module>zuulmodule>
        modules>
        <properties>
            <java.version>1.8java.version>
            <mybatis.plus.version>3.4.2mybatis.plus.version>
            <mysql.connect.java.version>8.0.27mysql.connect.java.version>
            <druid.version>1.2.8druid.version>
            <spring-boot-dependencies.version>2.3.7.RELEASEspring-boot-dependencies.version>
            <spring-cloud-dependencies.version>Hoxton.SR12spring-cloud-dependencies.version>
        properties>
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    1.2创建eureka服务
    1.1.2配置pom.xml依赖

    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0modelVersion>
    	<parent>
    		<groupId>com.diguagroupId>
    		<artifactId>cloudartifactId>
    		<version>releaseversion>
    	parent>
    	<groupId>comgroupId>
    	<artifactId>eurekaartifactId>
    	<version>0.0.1-SNAPSHOTversion>
    	<name>eurekaname>
    	<packaging>jarpackaging>
    	<properties>
    		<java.version>1.8java.version>
    	properties>
    	<dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>org.springframework.cloudgroupId>
    				<artifactId>spring-cloud-dependenciesartifactId>
    				<version>${spring-cloud-dependencies.version}version>
    				<type>pomtype>
    				<scope>importscope>
    			dependency>
    			
    			<dependency>
    				<groupId>org.springframework.bootgroupId>
    				<artifactId>spring-boot-dependenciesartifactId>
    				<version>${spring-boot-dependencies.version}version>
    				<type>pomtype>
    				<scope>importscope>
    			dependency>
    		dependencies>
    	dependencyManagement>
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.cloudgroupId>
    			<artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
    			<version>2.2.9.RELEASEversion>
    		dependency>
    		<dependency>
    			<groupId>org.springframework.bootgroupId>
    			<artifactId>spring-boot-starter-webartifactId>
    			<version>2.3.7.RELEASEversion>
    		dependency>
    	dependencies>
    	<build>
    		<finalName>eurekafinalName>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.bootgroupId>
    				<artifactId>spring-boot-maven-pluginartifactId>
    				<executions>
    					<execution>
    						<goals>
    							<goal>repackagegoal>
    						goals>
    					execution>
    				executions>
    				<configuration>
    					<includeSystemScope>trueincludeSystemScope>
    				configuration>
    			plugin>
    			<plugin>
    				<groupId>org.apache.maven.pluginsgroupId>
    				<artifactId>maven-surefire-pluginartifactId>
    				<configuration>
    					<skipTests>trueskipTests>
    				configuration>
    			plugin>
    		plugins>
    	build>
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75

    1.1.3创建eureka的application.yml文件

    server:
      port: 8001
    spring:
      application:
        name: eureka01
    eureka:
      client:
        service-url:
          defaultZone: ${EUREKA_URL:http://127.0.0.1:8001/eureka/}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    1.2构建项目推送到docke仓库
    此步骤省略可参考以下连接
    1.2.1-docker安装配置
    1.2.2-Dockerfile 文件编写
    1.2.3 -jenkins构建项目
    1.2.4-Harbor仓库搭建

    2.创建k8s对应的yaml文件

    2.1 由于eureka是集群形式存在,可以有一个也可以有N个,对于eureka的相互注册要保持有序,所以使用k8s中的StatefulSets来进行
    2.1.1- StatefulSet是为了解决有状态服务的问题(对应Deployments和ReplicaSets是为无状态服务而设计),配合Headless Service(无头服务) 进行服务的扩缩容

    ##格式会程这种样式
    statefulSet的名称-0(从0开始每增加一个pod就递增).Headless (无头服务名称).命名空间.svc.cluster.local
    statefulSetName-{0...N-1}.serviceName.namespace.svc.cluster.local
    
    • 1
    • 2
    • 3

    2.2 创建 Headless Service 无头服务

    apiVersion: v1
    kind: Service
    metadata:
      name: eureka-hl  ##服务名称
      namespace: test  ##命名空间
    spec:
      clusterIP: None  ##无头服务
      ports:
      - name: eureka
        port: 8001
        protocol: TCP
        targetPort: 8001
      selector:
        workload.user.cattle.io/workloadselector: apps.statefulset-test-eureka
      sessionAffinity: None
      type: ClusterIP
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2.3 创建 StatefulSet 有状态服务

    apiVersion: apps/v1
    kind: StatefulSet   ##资源类型
    metadata:
      labels:
        workload.user.cattle.io/workloadselector: apps.statefulset-test-eureka
      name: eureka      ##服务名称
      namespace: test   ##命名空间
    spec:
      podManagementPolicy: OrderedReady
      replicas: 2        ##副本数目
      revisionHistoryLimit: 10    ##历史最大保留数目
      selector:
        matchLabels:
          workload.user.cattle.io/workloadselector: apps.statefulset-test-eureka
      serviceName: eureka-hl  ## Headless Service 无头服务名称
      template:
        metadata:
          labels:
            workload.user.cattle.io/workloadselector: apps.statefulset-test-eureka
        spec:
          containers:    ##容器信息
          - env:
            - name: EUREKA_URL
            - ##相同的服务内可以简写,如下
              value: http://eureka-0.eureka-hl:8001/eureka/,http://eureka-1.eureka-hl:8001/eureka/
            image: 192.168.34.8:85/hhd/eureka:1   ##镜像
            imagePullPolicy: Always    ##拉取策略
            name: eureka
          restartPolicy: Always        ##重启策略
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
      updateStrategy:
        rollingUpdate:
          partition: 0
        type: RollingUpdate
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    3.部署查看eureka服务

    3.1使用命令部署两个服务

    kubectl create -f 文件名称.yaml
    
    • 1

    3.2.查看服务

    kubectl get sts eureka -n test
    
    • 1

    在这里插入图片描述
    3.3 通过浏览器查看eureka的dashboard页面
    3.3.1 首先暴露eureka的NodePort端口

    apiVersion: v1
    kind: Service
    metadata:
      name: eureka-np
      namespace: test
    spec:
      clusterIP: 10.108.244.16
      externalTrafficPolicy: Cluster
      ports:
      - name: eureka
        nodePort: 30001
        port: 8001
        protocol: TCP
        targetPort: 8001
      selector:
        workload.user.cattle.io/workloadselector: apps.statefulset-test-eureka
      sessionAffinity: None
      type: NodePort
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

    4.k8s中部署微服务的其他模块

    4.1创建服务对应的pom.xml依赖

    
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>cloudartifactId>
            <groupId>com.diguagroupId>
            <version>releaseversion>
        parent>
        <modelVersion>4.0.0modelVersion>
    
        <groupId>comgroupId>
        <artifactId>orderartifactId>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloudgroupId>
                    <artifactId>spring-cloud-dependenciesartifactId>
                    <version>${spring-cloud-dependencies.version}version>
                    <type>pomtype>
                    <scope>importscope>
                dependency>
                
                <dependency>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-dependenciesartifactId>
                    <version>${spring-boot-dependencies.version}version>
                    <type>pomtype>
                    <scope>importscope>
                dependency>
            dependencies>
        dependencyManagement>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
            dependency>
        dependencies>
        <build>
            <finalName>orderfinalName>
            <plugins>
                <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackagegoal>
                            goals>
                        execution>
                    executions>
                    <configuration>
                        <includeSystemScope>trueincludeSystemScope>
                    configuration>
                plugin>
                <plugin>
                    <groupId>org.apache.maven.pluginsgroupId>
                    <artifactId>maven-surefire-pluginartifactId>
                    <configuration>
                        <skipTests>trueskipTests>
                    configuration>
                plugin>
            plugins>
        build>
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    4.2 配置application.yml文件

    server:
      port: 8011
    spring:
      application:
        name: order-server01
    eureka:
      client:
        service-url:
          defaultZone: ${EUREKA_URL:http://127.0.0.1:8001/eureka/}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    4.3 构建发布harbor过程忽略,当前发布的是一个无状态服务,所以用到Deployment无状态服务
    请注意,因为是同一个命名空间下,可以直接通过Headless的服务名称访问pod

    上边2.2部分创建的Headless,通过 eureka-hl 既可以轮询访问下边的pod
    
    • 1
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        workload.user.cattle.io/workloadselector: apps.deployment-test-order
      name: order
      namespace: test
    spec:
      progressDeadlineSeconds: 600
      replicas: 0
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          workload.user.cattle.io/workloadselector: apps.deployment-test-order
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          labels:
            workload.user.cattle.io/workloadselector: apps.deployment-test-order
        spec:
          containers:
          - env:
            - name: EUREKA_URL
               ##可以通过Headless 的服务名称直接访问
              value: http://eureka-hl:8001/eureka/
            image: 192.168.34.8:85/hhd/order:1
            imagePullPolicy: Always
            name: order
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    4.4 发布项目,并在eureka的dashboard页面查看

    kubectl apply -f 文件名称.yaml
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    pytorch 实现线性回归(Pytorch 03)
    使用Spring的表达式解析器+Redis实现分布式锁
    华为云双十一服务器数据中心带宽全动态BGP和静态BGP区别
    python 根据shp文件解析经纬度市县信息
    工业镜头的类别
    【云原生】Java 处理 Excel:从 POI 到 SPL
    MFC的定义和实际操作方法
    含文档+PPT+源码等]精品springboot毕业设计管理系统包运行成功]Java毕业设计springboot项目源码
    Sqlserver 多行合并为一行
    东北天坐标系与84坐标系的相互转换
  • 原文地址:https://blog.csdn.net/weixin_47752736/article/details/127570045