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}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于