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

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

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

    54 引用 • 25 回帖 • 7 关注

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    87 引用 • 139 回帖 • 6 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖 • 2 关注
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    77 引用 • 389 回帖 • 1 关注
  • GitBook

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

    3 引用 • 8 回帖
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 332 关注
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 718 关注
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    10 引用 • 76 回帖 • 1 关注
  • PWA

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

    14 引用 • 69 回帖 • 170 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 2 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 539 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 619 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖
  • Windows

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

    223 引用 • 474 回帖 • 1 关注
  • RemNote
    2 引用 • 16 回帖 • 8 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    124 引用 • 74 回帖
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 656 关注
  • 小薇

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

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

    34 引用 • 467 回帖 • 751 关注
  • TensorFlow

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

    20 引用 • 19 回帖 • 2 关注
  • V2EX

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

    17 引用 • 236 回帖 • 294 关注
  • OkHttp

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

    16 引用 • 6 回帖 • 79 关注
  • MyBatis

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

    170 引用 • 414 回帖 • 375 关注
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 701 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖 • 1 关注
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 164 关注
  • 心情

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

    59 引用 • 369 回帖
  • SendCloud

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

    2 引用 • 8 回帖 • 494 关注
  • abitmean

    有点意思就行了

    31 关注