k8s 上使用 statefulset 方式部署 eureka 集群

本贴最后更新于 1792 天前,其中的信息可能已经时移俗易

statefulset-eureka.yml

apiVersion: v1
kind: ConfigMap
metadata:
  name: {APP_NAME}-cm
data:
  # if you want to deploy n instances of eureka cluster, 
  # you should set eureka_service_address: http://eureka-0.eureka:8761/eureka,...,http://eureka-(n-1).eureka:8761/eureka
  eureka_service_address: http://{APP_NAME}-0.{APP_NAME}:8888/eureka,http://{APP_NAME}-1.{APP_NAME}:8888/eureka,http://{APP_NAME}-2.{APP_NAME}:8888/eureka
---
apiVersion: v1
kind: Service
metadata:
  name: {APP_NAME}
  labels:
    app: {APP_NAME}
spec:
  type: NodePort
  ports:
  - port: 8888
    targetPort: 8888
    name: {APP_NAME}
  selector:
    app: {APP_NAME}
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: {APP_NAME}
spec:
  serviceName: '{APP_NAME}'
  # n instances
  replicas: 3
  selector:
    matchLabels:
      app: {APP_NAME}
  template:
    metadata:
      labels:
        app: {APP_NAME}
    spec:
      imagePullSecrets:
      - name: hhotel-registry
      containers:
      - args:
        - -javaagent:agent/skywalking-agent.jar
        - -Dskywalking.collector.backend_service=apm2.hhotel.com:11800
        - -Dskywalking.agent.service_name={SPRING_PROFILE}-{PROJECT}
        - -Dspring.profiles.active={SPRING_PROFILE}
        - -Dapollo.bootstrap.enabled=true
        {APOLLO_ENV}
        {APOLLO_NS}
        {APOLLO_APPIP}
        {APOLLO_META}
        - -jar
        - -server
        - -Xms1024m
        - -Xmx1024m
        - -Xss512k
        - -XX:MetaspaceSize=256m
        - -XX:MaxMetaspaceSize=256m
        - -Dserver.port=8888
        - -Dport=8888
        - {APP_NAME}.jar
        command:
        - java
        name: {APP_NAME}
        image: {IMAGE_URL}
        ports:
        - containerPort: 8888
        resources:
          requests:
            memory: "1Gi"
            cpu: "500m"
          limits:
            memory: "1200Mi"
            cpu: "500m"
#        readinessProbe:
#          httpGet:
#            path: /actuator/health
#            port: 8888
#            scheme: HTTP
#          initialDelaySeconds: 10
#          timeoutSeconds: 2
#          periodSeconds: 10    
        env:
        - name: EURAKE_HOST
          valueFrom:
            configMapKeyRef:
              name: {APP_NAME}-cm
              key: eureka_service_address
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: HOST_NAME
          value: "$(POD_NAME).{APP_NAME}"

pipeline

pipeline {
    agent any
    
    tools {
        maven 'mvn-3.5.4'
    }
    
    parameters{
        gitParameter branchFilter: '.*k8s.*', tagFilter: '.*', defaultValue: 'develop', name: 'TAG', type: 'PT_BRANCH_TAG', selectedValue: 'TOP', sortMode: 'DESCENDING_SMART'
    }
    
    environment {
        GIT = 'http://scm.hhotel.com/bzy-server/bzy-eureka.git'
        IMAGE_GROUP = "bzy" //对应harbor镜像分组
        // APOLLO_SERVER = "http://apollo-cfg2.hhotel.com:8082"
        // MORE_CFG = ",common.yml"
        // APOLLO_ENV="- -Denv=$ENV"
        // APOLLO_NS="- -Dapollo.bootstrap.namespaces=${PROJECT}.yml${MORE_CFG}"
        // APOLLO_APPIP="- -Dapp.id=${IMAGE_GROUP}"
        // APOLLO_META="- -Dapollo.meta=${APOLLO_SERVER}"
        APOLLO_ENV=" "
        APOLLO_NS=" "
        APOLLO_APPIP=" "
        APOLLO_META=" "
        K8S_NAMESPACE = "${IMAGE_GROUP}-${ENV}"
        PROJECT = sh(script: "echo ${GIT} | awk -F '/' '{print \$NF}' | awk -F '.' '{print \$1}'", returnStdout: true).trim()
        ENV = sh(script: "echo ${JOB_BASE_NAME} | awk -F '-' '{print \$1}'", returnStdout: true).trim()
        HARBOR_HOST = 'registry.hhotel.com'
        DOCKER_IMAGE = "${IMAGE_GROUP}/${JOB_BASE_NAME}:${BUILD_ID}"
        MAIL_TO = "yunwei@hhotel.com"
        ZIP = "target"
        CHECK_TAG = "${TAG}" // 分支或tag
        TIME = sh(script: "date '+%Y%m%d%H%M%S'", returnStdout: true).trim()
    }
    
    stages {
        
        stage ('克隆代码') {
            steps {
                deleteDir() // 清理工作目录
                git credentialsId: '9c9b7b17-04d5-47de-9b8f-6207a78e6973', url: "${GIT}" 
                sh '[ -n "${CHECK_TAG}" ] &&  git checkout ${CHECK_TAG} ||  { echo -e "切换至指定的tag的版本,tag:${CHECK_TAG} 不存在或为空,请检查输入的tag!" && exit 111; }'
            }
        }
        
        stage ('编译打包') {
            steps {
                sh "mvn clean && mvn -U -Dmaven.test.skip=true install"
                // archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true, onlyIfSuccessful: true // 归档制品
            }
        }
        
        stage('Docker Build') {
            steps {
                sh "/usr/bin/cp -f /data/tools/Dockerfile ."
                sh "/usr/bin/cp -r -f /data/tools/agent ."
                sh "sed -i -e 's#{SW_AGENT_NAME:Your_ApplicationName}#${JOB_BASE_NAME}#g' agent/config/agent.config"
                sh "sudo docker build --build-arg JAR_FILE=${PROJECT}.jar -t ${HARBOR_HOST}/${DOCKER_IMAGE} ."
                sh "sudo docker push ${HARBOR_HOST}/${DOCKER_IMAGE}"
                sh "sudo docker rmi ${HARBOR_HOST}/${DOCKER_IMAGE}"
            }
        }
        
        stage('Deploy') {
            steps {
              echo "${ENV}"
              sh "kubectl config use-context dev-test-k8s && kubectl cluster-info && kubectl get nodes"
              sh "cp /data/tools/statefulset-eureka.yml deployment.yml"
              sh "sed -i -e 's#{IMAGE_URL}#${HARBOR_HOST}/${DOCKER_IMAGE}#g;s#{APP_NAME}#${PROJECT}#g;s#{SPRING_PROFILE}#${ENV}#g;s#{PROJECT}#${PROJECT}#g;s#{APOLLO_ENV}#${APOLLO_ENV}#g;s#{APOLLO_NS}#${APOLLO_NS}#g;s#{APOLLO_APPIP}#${APOLLO_APPIP}#g;s#{APOLLO_META}#${APOLLO_META}#g' deployment.yml"
              sh "kubectl apply -f deployment.yml --namespace=${K8S_NAMESPACE}"
            }
        }
        
        
    }
    
    post {
        always {
            // deleteDir() // 清理工作空间
            mail to: "${MAIL_TO}", 
                subject: "[${currentBuild.currentResult}] Pipeline: ${currentBuild.fullDisplayName}", 
                body: "<b>Project</b>: ${JOB_NAME} <br> <b>Git</b>: ${GIT} <br> <b>Branch or Tag</b>: ${CHECK_TAG} <br><b>Build Number</b>: ${BUILD_NUMBER} <br> \
                <b>Build Status</b>: ${currentBuild.currentResult} <br> <b>URL de build</b>: ${env.BUILD_URL} <br> <b>Duration</b>:${currentBuild.durationString} <br> \
                <b>Cause</b>: ${currentBuild.rawBuild.getCause(hudson.model.Cause$UserIdCause).properties.shortDescription}",
                mimeType:"text/html", 
                charset:"UTF-8"
        }
    }

}

eureka配置

server:
  port: ${port}

spring:
  resources:
    add-mappings: true
  application:
    name: bzy-eureka

eureka:
  environment: ${spring.profiles.active}
  instance:
    hostname: ${HOST_NAME}
    prefer-ip-address: false
    appname: ${spring.application.name}
    nonSecurePort: ${server.port}
    metadata-map:
          zone: ${spring.profiles.active}
  server:
    enable-self-preservation: true
      #5秒清理一次
    eviction-interval-timer-in-ms: 5000
  client:
        #如果需要集群rp,则需要打开自注册
    register-with-eureka: true
        #表示不去检索其他的Eureka Server获取注册信息,因为服务注册中心本身的职责就是维护服务实例,它也不需要去检索其他服务
    fetch-registry: false
    service-url:
        #对外暴露的地址
          defaultZone: ${EURAKE_HOST}

微服务配置

eureka:
    instance:
        hostname: bzy-daily
        prefer-ip-address: true
        instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
        nonSecurePort: ${server.port}
    client:
        service-url:
            defaultZone: ${EURAKE_HOST}

  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    45 引用 • 25 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖 • 2 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 11 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 1 关注
  • CodeMirror
    1 引用 • 2 回帖 • 132 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    497 引用 • 1387 回帖 • 318 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 58 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    98 引用 • 344 回帖
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 720 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 392 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖 • 1 关注
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 95 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    19 引用 • 7 回帖 • 2 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 50 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    540 引用 • 672 回帖
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 30 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    220 引用 • 472 回帖
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 2 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    58 引用 • 22 回帖 • 4 关注
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 137 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 466 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    75 引用 • 258 回帖 • 635 关注
  • abitmean

    有点意思就行了

    36 关注
  • gRpc
    11 引用 • 9 回帖 • 53 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 199 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 268 回帖 • 85 关注