基于kubernetes平台微服务的部署
基于kubernetes平台微服务的部署
首先下载插件:
kubernetes Continuous Deploy
然后去找 .kube/ 里的config 复制里面的内容
去添加凭据:
然后就是脚本更新:
- def git_address = "http://20.0.0.20:82/root/tensquare_back.git"
- def git_auth = "904eff5d-41c8-44ad-ba24-7f539a0edb96"
- //构建版本的名称
- def tag = "latest"
- //Harbor私服地址
- def harbor_url = "20.0.0.50:85"
- //Harbor的项目名称
- def harbor_project_name = "tensquare"
- //Harbor的凭证
- def harbor_auth = "427399a8-db35-48e8-b5cf-a1ea63f10cc5"
- //k8s的凭证
- def k8s_auth="4f3c9e60-da07-49b3-89ae-d708516e8071"
- //定义k8s-barbor的凭证
- def secret_name="registry-auth-secret"
- podTemplate(label: 'jenkins-slave', cloud: 'kubernetes', containers: [
- containerTemplate(
- name: 'jnlp',
- image: "20.0.0.50:85/library/jenkins-slave-maven:latest"
- ),
- containerTemplate(
- name: 'docker',
- image: "docker:stable",
- ttyEnabled: true,
- command: 'cat'
- ),
- ],
- volumes: [
- hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'),
- nfsVolume(mountPath: '/usr/local/apache-maven/repo', serverAddress: '20.0.0.10' , serverPath: '/opt/nfs/maven'),
- ],
- )
- {
- node("jenkins-slave"){
- // 第一步
- stage('pull code'){
- checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
- }
- // 第二步
- stage('make public sub project'){
- //编译并安装公共工程
- sh "mvn -f tensquare_common clean install"
- }
- // 第三步
- stage('make image'){
- //把选择的项目信息转为数组
- def selectedProjects = "${project_name}".split(',')
- for(int i=0;i<selectedProjects.size();i++){
- //取出每个项目的名称和端口
- def currentProject = selectedProjects[i];
- //项目名称
- def currentProjectName = currentProject.split('@')[0]
- //项目启动端口
- def currentProjectPort = currentProject.split('@')[1]
- //定义镜像名称
- def imageName = "${currentProjectName}:${tag}"
- //编译,构建本地镜像
- sh "mvn -f ${currentProjectName} clean package dockerfile:build"
- container('docker') {
- //给镜像打标签
- sh "docker tag ${imageName} ${harbor_url}/${harbor_project_name}/${imageName}"
- //登录Harbor,并上传镜像
- withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')])
- {
- //登录
- sh "docker login -u ${username} -p ${password} ${harbor_url}"
- //上传镜像
- sh "docker push ${harbor_url}/${harbor_project_name}/${imageName}"
- }
- //删除本地镜像
- sh "docker rmi -f ${imageName}"
- sh "docker rmi -f ${harbor_url}/${harbor_project_name}/${imageName}"
- }
- def deploy_image_name = "${harbor_url}/${harbor_project_name}/${imageName}"
- //部署到K8S
- sh """
- sed -i 's#\$IMAGE_NAME#${deploy_image_name}#' ${currentProjectName}/deploy.yml
- sed -i 's#\$SECRET_NAME#${secret_name}#' ${currentProjectName}/deploy.yml
- """
- kubernetesDeploy configs: "${currentProjectName}/deploy.yml", kubeconfigId: "${k8s_auth}"
- }
- }
- }
- }
要更改的就是:
添加k8s的凭证:
然后在eureka 目录下创建deploy文件:
- metadata:
- name: eureka
- spec:
- serviceName: "eureka"
- replicas: 2
- selector:
- matchLabels:
- app: eureka
- template:
- metadata:
- labels:
- app: eureka
- spec:
- imagePullSecrets:
- - name: $SECRET_NAME
- containers:
- - name: eureka
- image: $IMAGE_NAME
- ports:
- - containerPort: 10086
- env:
- - name: MY_POD_NAME
- valueFrom:
- fieldRef:
- fieldPath: metadata.name
- - name: EUREKA_SERVER
- value: "http://eureka-0.eureka:10086/eureka/,http://eureka- 1.eureka:10086/eureka/"
- - name: EUREKA_INSTANCE_HOSTNAME
- value: ${MY_POD_NAME}.eureka
- podManagementPolicy: "Parallel"
里面的application.yml配置文件更改如下:
- server:
- port: ${PORT:10086}
- spring:
- application:
- name: eureka
- eureka:
- server:
- # 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
- eviction-interval-timer-in-ms: 5000
- enable-self-preservation: false
- use-read-only-response-cache: false
- client:
- # eureka client间隔多久去拉取服务注册信息 默认30s
- registry-fetch-interval-seconds: 5
- serviceUrl:
- defaultZone: ${EUREKA_SERVER:http://127.0.0.1:${server.port}/eureka/}
- instance:
- # 心跳间隔时间,即发送一次心跳之后,多久在发起下一次(缺省为30s)
- lease-renewal-interval-in-seconds: 5
- # 在收到一次心跳之后,等待下一次心跳的空档时间,大于心跳间隔即可,即服务续约到期时间(缺省为90s)
- lease-expiration-duration-in-seconds: 10
- instance-id: ${EUREKA_INSTANCE_HOSTNAME:${spring.application.name}}:${server.port}@${random.l ong(1000000,9999999)}
- hostname: ${EUREKA_INSTANCE_HOSTNAME:${spring.application.name}}
然后在提交前在k8s所有主机上操作
- docker login -u lvbu -p Lvbu1234 20.0.0.50:85
- kubectl create secret docker-registry registry-auth-secret --docker-server=20.0.0.50:85 --docker-username=lvbu --docker-password=Lvbu1234 -- docker-email=lbu@qq.com
然后去提交之前的修改的配置
提交完之后就可以构建了!
然后去查看:
- kubectl get secrets
- kubectl get pods
- kubectl get servicef 查看能看到端口 访问node节点的端口 就会发现注册中心有了
然后部署服务网关:
同理更改配置文件中的eureka集群地址:
- http://eureka-0.eureka:10086/eureka/,http://eureka- 1.eureka:10086/eureka/
所有的都要更改!
然后一样的操作在网关低下创建deploy.yml文件:
内容如下:
- ---
- apiVersion: v1
- kind: Service
- metadata:
- name: zuul
- labels:
- app: zuul
- spec:
- type: NodePort
- ports:
- - port: 10020
- name: zuul
- targetPort: 10020
- selector:
- app: zuul
- ---
- apiVersion: apps/v1
- kind: StatefulSet
- metadata:
- name: zuul
- spec:
- serviceName: "zuul"
- replicas: 2
- selector:
- matchLabels:
- app: zuul
- template:
- metadata:
- labels:
- app: zuul
- spec:
- imagePullSecrets:
- - name: $SECRET_NAME
- containers:
- - name: zuul
- image: $IMAGE_NAME
- ports:
- - containerPort: 10020
- podManagementPolicy: "Parallel"
在提交前先去手动上传父工程依赖到NFS的maven共享仓库目录中:
然后在构建!
然后就是部署admin_service:
也是创建deploy.yml:
- ---
- apiVersion: v1
- kind: Service
- metadata:
- name: admin
- labels:
- app: admin
- spec:
- type: NodePort
- ports:
- - port: 9001
- name: admin
- targetPort: 9001
- selector:
- app: admin
- ---
- apiVersion: apps/v1
- kind: StatefulSet
- metadata:
- name: admin
- spec:
- serviceName: "admin"
- replicas: 2
- selector:
- matchLabels:
- app: admin
- template:
- metadata:
- labels:
- app: admin
- spec:
- imagePullSecrets:
- - name: $SECRET_NAME
- containers:
- - name: admin
- image: $IMAGE_NAME
- ports:
- - containerPort: 9001
- podManagementPolicy: "Parallel"
然后 集群地址也要更改!
接下来的部署gatjering 也是如此:
deploy.yml文件如下:
- ---
- apiVersion: v1
- kind: Service
- metadata:
- name: gathering
- labels:
- app: gathering
- spec:
- type: NodePort
- ports:
- - port: 9002
- name: gathering
- targetPort: 9002
- selector:
- app: gathering
- ---
- apiVersion: apps/v1
- kind: StatefulSet
- metadata:
- name: gathering
- spec:
- serviceName: "gathering"
- replicas: 2
- selector:
- matchLabels:
- app: gathering
- template:
- metadata:
- labels:
- app: gathering
- spec:
- imagePullSecrets:
- - name: $SECRET_NAME
- containers:
- - name: gathering
- image: $IMAGE_NAME
- ports:
- - containerPort: 9002
- podManagementPolicy: "Parallel"
也要修改集群地址eureka!
然后就可以一次性提交代码然后一次性构建!
结果如下:
基于kubernetes平台微服务的部署的更多相关文章
- 解读与部署(三):基于 Kubernetes 的微服务部署即代码
在基于 Kubernetes 的基础设施即代码一文中,我概要地介绍了基于 Kubernetes 的 .NET Core 微服务和 CI/CD 动手实践工作坊使用的基础设施是如何使用代码描述的,以及它的 ...
- iUAP云运维平台v3.0全面支持基于K8s的微服务架构
什么是微服务架构? 微服务(MicroServices)架构是当前互联网业界的一个技术热点,业内各公司也都纷纷开展微服务化体系建设.微服务架构的本质,是用一些功能比较明确.业务比较精练的服务去解决更大 ...
- QCon技术干货:个推基于Docker和Kubernetes的微服务实践
2016年伊始,Docker无比兴盛,如今Kubernetes万人瞩目.在这个无比需要创新与速度的时代,由容器.微服务.DevOps构成的云原生席卷整个IT界.在近期举办的QCon全球软件开发大会上, ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十三)——istio+dapr构建多运行时服务网格之生产环境部署
之前所有的演示都是在docker for windows上进行部署的,没有真正模拟生产环境,今天我们模拟真实环境在公有云上用linux操作如何实现istio+dapr+电商demo的部署. 目录:一. ...
- 基于 abp vNext 微服务开发的敏捷应用构建平台 - 文章目录
系列文章: <基于 abp vNext 微服务开发的敏捷应用构建平台 - 设计构想> [点击查看] <基于 abp vNext 微服务开发的敏捷应用构建平台 - 文章目录> [ ...
- 基于 Docker 的微服务架构实践
本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 D ...
- 用友iuap云运维平台支持基于K8s的微服务架构
什么是微服务架构? 微服务(MicroServices)架构是当前互联网业界的一个技术热点,业内各公司也都纷纷开展微服务化体系建设.微服务架构的本质,是用一些功能比较明确.业务比较精练的服务去解决更大 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(三)——一步一步教你如何撸Dapr
目录:一.通过Dapr实现一个简单的基于.net的微服务电商系统 二.通过Dapr实现一个简单的基于.net的微服务电商系统(二)--通讯框架讲解 三.通过Dapr实现一个简单的基于.net的微服务电 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十二)——istio+dapr构建多运行时服务网格
多运行时是一个非常新的概念.在 2020 年,Bilgin Ibryam 提出了 Multi-Runtime(多运行时)的理念,对基于 Sidecar 模式的各种产品形态进行了实践总结和理论升华.那到 ...
随机推荐
- 深入Windows APC
本篇原文为 Depths of Windows APC ,如果有良好的英文基础,可以点击该链接进行阅读.本文为我个人:寂静的羽夏(wingsummer) 中文翻译,非机翻,著作权归原作者 Rbmm ...
- MyBatis加强(1)~myBatis对象关系映射(多对一关系、一对多关系)、延迟/懒加载
一.myBatis对象关系映射(多对一关系.一对多关系) 1.多对一关系: ---例子:多个员工同属于一个部门. (1)myBatis发送 额外SQL: ■ 案例:员工表通过 dept_id 关联 部 ...
- js 每日一更(数组转换成前端更容易解析的树状结构)
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...
- Redis 常见面试题(2020最新版)
阶段汇总集合:001期~180期汇总,方便阅读(增加设计模式) 概述 什么是Redis Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可) ...
- 【转】MySql根据经纬度获取附近的商家
创建geo表 create table geo( geo_id INT NOT NULL AUTO_INCREMENT, lng float NOT NULL, lat float NOT NULL, ...
- new JSONObject 无异常卡顿【Maven+Idea 导包不更新的小坑】
问题描述 今天在使用JSONObject过程中出现了一个非常不可思议的现象,我Junit测试没有问题,但是就是打开服务器运行的时候,结果就是出不来,经过多次测试发现代码竟然卡在了new JSONObj ...
- Idea中新建package包,却变成了Directory
问题描述 今天在IdeaJava工程src下新建了一个名字叫包implements的包,右键在里面新建类时,却发现根本就没有Class这个选项,然后发现implements这个包的图标也和其他包的图标 ...
- docker构建镜像 (3)
使用Dockerfile构建镜像 Dockerfile使用DSL(Domain Specific Language)来构建一个Docker镜像,只要编辑好了Dockerfile文件,就可以使用dock ...
- Redis 在 vivo 推送平台的应用与优化实践
一.推送平台特点 vivo推送平台是vivo公司向开发者提供的消息推送服务,通过在云端与客户端之间建立一条稳定.可靠的长连接,为开发者提供向客户端应用实时推送消息的服务,支持百亿级的通知/消息推送,秒 ...
- 使用污点分析检查log4j问题
摘要:log4j问题的余波还在继续,为什么这个问题潜伏了这么长时间,大家一直没有发现?这里从静态分析的角度谈下log4j问题的发现. 本文分享自华为云社区<使用污点分析检查log4j问题> ...