Python微信订餐小程序课程视频
https://blog.csdn.net/m0_56069948/article/details/122285951
Python实战量化交易理财系统
https://blog.csdn.net/m0_56069948/article/details/122285941阅读目录
因为之前写过基于K8S部署jenkins master/slave平台,在这个的基础上构建微服务到K8S集群中
回到顶部## Jenkins-slave构建微服务项目到K8S集群
1、微服务项目上传到git仓库
这个就不多说了
2、更改注册中心eureka的配置文件
进入到项目代码中,更改微服务中eureka-service的配置文件application.yaml(需要和开发对一下,具体还要加哪些参数)
| 123456789101112131415 | server:``port: 8761``spring:
application:
name: eureka-service
eureka:``instance:``prefer-ip-address:
false``client:``region:
default``service-url:``defaultZone: http:``//eureka-0.eureka.default:${server.port}/eureka/,http://eureka-1.eureka.default:${server.port}/eureka/``register-with-eureka:
true``fetch-registry:
true
|
其他应用程序往eureka注册,需要在各自的application.yaml里添加下面的eureka信息
| 123456789 | eureka:``instance:``prefer-ip-address:
false``client:``region:
default``service-url:``defaultZone: http:``//eureka-0.eureka:8761/eureka/,http://eureka-1.eureka:8761/eureka/``register-with-eureka:
true``fetch-registry:
true
|
3、创建statefulset资源文件部署eureka,ingress做负载均衡
(将所以要创建的资源都合并到一个yaml文件,上传到git仓库 项目代码的eureka目录下)
| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 | #创建Service为headless``apiVersion: v1``kind: Service``metadata:``namespace``: NS``labels:``app: eureka``name: eureka``spec:``clusterIP: None``selector:``app: eureka``ports:``- port: 8761``protocol: TCP``targetPort: 8761``status:``loadBalancer: {}
---``#创建StatefulSet``apiVersion: apps/v1``kind: StatefulSet``metadata:``name: eureka``namespace``: NS``spec:``selector:``matchLabels:``app: eureka``serviceName:
"eureka"``replicas: RSCOUNT``template:``metadata:``labels:``app: eureka``spec:``imagePullSecrets:``- name: SECRET_NAME``containers:``- name: eureka``image: IMAGE_NAME``ports:``- containerPort: 8761
---``#创建ingress``apiVersion: networking.k8s.io/v1``kind: Ingress``metadata:``name: eureka-ingress``annotations:``kubernetes.io/ingress.``class``:
"nginx"``spec:``rules:``- host: eureka.test.com``http:``paths:``- path: /``pathType: Prefix``backend:``service:``name: eureka``port:
number: 8761
|
4、在jenkins创建流水线任务
新建任务——eureka 流水线——然后进入项目配置,Jenkinsfile如下:
| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 | def registry =
"10.48.14.50:8888"``def project =
"dev"``def app_name =
"eureka-service"``def jar_path =
"build/libs"``def jar_name =
"${app_name}-0.0.1-SNAPSHOT.jar"``def jar_port =
"8761"``def image_name =
"${registry}/${project}/${app_name}:${BUILD_NUMBER}"``def git_address =
"http://10.48.14.100:30080/001/xiangmu.git"``// 认证``def secret_name =
"registrypullauth"``def docker_registry_auth =
"b07ed5ba-e191-4688-9ed2-623f4753781c"``def git_auth =
"a5ec87ae-87a1-418e-aa49-53c4aedcd261"``def k8s_auth =
"3cd3f414-a0e2-4bc0-8808-78c64e6ad7d2"``def JAVA_OPTS =
"-Xms128m -Xmx256m -Dfile.encoding=UTF8 -Duser.timezone=GMT+08 -Dspring.profiles.active=test"
pipeline {``agent {``kubernetes {``label
"jenkins-slave"``yaml
""``"``kind: Pod``metadata:``name: jenkins-slave``spec:``containers:``- name: jnlp``image:
"${registry}/library/jenkins-slave-jdk:latest"``imagePullPolicy: Always``env:
- name: TZ``value: Asia/Shanghai``volumeMounts:``- name: docker-cmd``mountPath: /usr/bin/docker``- name: docker-sock``mountPath: /``var``/run/docker.sock``- name: gradle-cache``mountPath: /root/.gradle``volumes:``- name: docker-cmd``hostPath:``path: /usr/bin/docker``- name: docker-sock``hostPath:``path: /``var``/run/docker.sock``- name: gradle-cache``hostPath:
path: /tmp/gradle``""``"``}``}``parameters {``choice (choices: [``'1'``,
'2'``,
'3'``,
'5'``,
'7'``], description:
'副本数'``, name:
'ReplicaCount'``)``choice (choices: [``'dev'``,``'test'``,``'prod'``,``'default'``], description:
'命名空间'``, name:
'Namespace'``)``}``stages {``stage(``'拉取代码'``){``steps {``checkout([$``class``:
'GitSCM'``,
branches: [[name:
"${params.Branch}"``]],
doGenerateSubmoduleConfigurations:
false``,
extensions: [], submoduleCfg: [],
userRemoteConfigs: [[credentialsId:
"${git_auth}"``, url:
"${git_address}"``]]``])``}``}
stage(``'代码编译'``){``steps {``sh
""``"``java -version``pwd``cd ${app_name}``pwd``gradle -v``gradle clean build -x test``""``"
}``}
stage(``'构建镜像'``){``steps {``withCredentials([usernamePassword(credentialsId:
"${docker_registry_auth}"``, passwordVariable:
'password'``, usernameVariable:
'username'``)]) {``sh
""``"``echo '``FROM ${registry}/library/java:11``MAINTAINER liang``RUN apk add -U tzdata && \``ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime``ADD ${jar_path}/${jar_name} /``EXPOSE ${jar_port}``CMD java -jar $JAVA_OPTS /${jar_name}``'> ${app_name}/Dockerfile``docker build -t ${image_name} ${app_name}``docker login -u ${username} -p ${password} ${registry}``docker push ${image_name}``""``"``}``}
}
stage(``'部署到K8S平台'``){``steps {``configFileProvider([configFile(fileId:
"${k8s_auth}"``, targetLocation:
'admin.kubeconfig'``)]) {``sh
""``"``pwd``sed -i
's#IMAGE_NAME#${image_name}#'
${app_name}/deploy.yaml``sed -i
's#SECRET_NAME#${secret_name}#'
${app_name}/deploy.yaml``sed -i
's#RSCOUNT#${ReplicaCount}#'
${app_name}/deploy.yaml``sed -i
's#NS#${Namespace}#'
${app_name}/deploy.yaml``kubectl apply -f ${app_name}/deploy.yaml -n ${Namespace} --kubeconfig=admin.kubeconfig``sleep 10``kubectl
get
pod -n ${Namespace} --kubeconfig=admin.kubeconfig``""``"``}``}``}``}``}
|
构建项目:可以选择启动的副本数、项目代码分支、k8s命名空间(dev、test、prod:代表开发、测试、生产环境)
查看构建日志:
浏览器访问eureka:
需要添加dns记录或者host文件(根据自己的实际情况添加)
http://eureka.test.com ![](https://img2022.cnblogs.com/blog/2347845/202204/2347845-20220419163344540-114518815.png)
5、构建其他应用程序部署到K8S
修改微服务网关gateway的配置文件application.yaml:
| 123456789101112131415 | server:``port: 8130``spring:
application:
name: gateway-service
eureka:``instance:``prefer-ip-address:
false``client:``region:
default``service-url:``defaultZone: http:``//eureka-0.eureka:8761/eureka/,http://eureka-1.eureka:8761/eureka/``register-with-eureka:
true``fetch-registry:
true
|
创建deploy资源 部署gateway,ingress做负载均衡
| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | apiVersion: v1``kind: Service``metadata:``namespace``: NS``labels:``app: gateway``name: gateway``spec:``selector:``app: gateway``ports:``- port: 8130``protocol: TCP``targetPort: 8130``status:``loadBalancer: {}``---``#创建Deployment``apiVersion: apps/v1``kind: Deployment``metadata:``name: gateway``namespace``: NS``spec:``selector:
matchLabels:``app: gateway``replicas: RSCOUNT``template:``metadata:``labels:``app: gateway``spec:``imagePullSecrets:``- name: SECRET_NAME``containers:``- name: gateway``image: IMAGE_NAME``ports:``- containerPort: 8130``---``#创建ingress``apiVersion: networking.k8s.io/v1``kind: Ingress``metadata:``name: gateway-ingress``annotations:``kubernetes.io/ingress.``class``:
"nginx"``spec:``rules:``- host: gateway.test.com``http:``paths:``- path: /``pathType: Prefix``backend:``service:``name: gateway``port:
number: 8130
|
jenkins中创建gateway项目,使用eureka的Jenkinsfile,只需要修改其中的变量就可以了,这里就不写了
…
应用程序构建完成后,查看是否注册到eureka:
再查看eureka日志,说明成功了
大概就是这样,部署微服务的其他应用程序也是一样。
需要注意的是:项目中application.yaml的参数要问开发人员(有些程序需要连数据库)