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

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

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)部门之间的沟通、协作与整合。

    38 引用 • 24 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    523 引用 • 4581 回帖 • 692 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    310 引用 • 1666 回帖
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 10 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 293 关注
  • OpenResty

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

    17 引用 • 35 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 682 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    17 引用 • 236 回帖 • 421 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖 • 1 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 398 关注
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 4 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 1 关注
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 693 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 24 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    284 引用 • 4481 回帖 • 655 关注
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    34 引用 • 37 回帖 • 496 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 228 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 17 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 84 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 186 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1347 回帖 • 1 关注
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 60 回帖 • 468 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 2 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 603 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    51 引用 • 37 回帖
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    1 引用 • 11 回帖