Jenkins-zookeeper-docker-xxljob-rancher

文章目录

Jenkins

实战

1 新建任务需要的配置pipeline

该代码是Jenkinsfile,用于定义一个持续集成/持续交付(CI/CD)的流水线;

javascript 复制代码
pipeline {
    agent any
    // 表示该流水线可以在任何可用的Jenkins节点上执行;
    
    // 定义变量
    // JOB_NAME  任务名称,对应容器服务名,例如:market_ods/mms_api
    // RegistryUrl 在全局环境变量中配置
    // ImageVer 容器版本,格式yyyyMMddHHmm,插件 Timestamp
    // 
    // 创建访问Git全局凭据, credentialsId: 'gitpw-3789060f-ecb5-468e-c161-32076710d930'
    // 创建访问私有镜像仓库全局凭据, credentialsId: 'imagepw-8a88451c-0565-6f0d-694c-fa20344a3179'

    environment { // 定义环境变量
        PLAT="as"    // 定义平台
        PROJECT="jenkins_xxx"    // 定义项目程序
        PROJECT_GIT="project_xxx"    // 定义项目程序
        GIT_URL="http://gitlab地址/${PROJECT_GIT}.git" // git仓库链接
        JAVA_HOME="/usr/local/jdk1.8.0_361"
        MAVEN_HOME="/usr/local/maven3.6"
                PATH="$MAVEN_HOME/bin:$PATH"
    }
    options{ 
        // 插件:Build Timestamp 
        timestamps() // 用于在构建日志中添加时间戳;
    }
    parameters {
        // 插件:Git Parameter  http://www.manongjc.com/detail/63-ncmakycccpkqxsr.html
        gitParameter (name: 'Git_Branch', defaultValue: 'master', type: 'PT_BRANCH', useRepository: env.GIT_URL, description: '请选择项目GIT分支', branchFilter: 'origin/(.*)', branch:'', quickFilterEnabled: true, selectedValue: 'TOP', sortMode: 'NONE', tagFilter: '*')
        // 构建Git_Rranch,用户可以在构建时选择不同的Git分支。
    } 
    stages { // 定义流水线的各个阶段;
        stage('脚本执行环境'){
            steps {
                sh """
                    echo "$JAVA_HOME"
                    java --version
                    mvn --version
                    git version
                    docker -v
                """
                script {
                    buildName "#${BUILD_NUMBER} ${RegistryUrl}/${PLAT}/${PROJECT}:${ImageVer}"
                }
            }
        }
        // 删除当前目录(${WORKSPACE})下内容,通常用在构建完毕之后清空工作空间
        stage('Delete Workspace') { 
            steps {
                echo "清理工作目录: ${WORKSPACE}"
                deleteDir()
            }
        }
        // 拉取代码 http://www.manongjc.com/detail/63-ncmakycccpkqxsr.html
        stage('Checkout') {      
            steps {
                checkout([$class: 'GitSCM', 
                    branches: [[name: "${params.Git_Branch}"]],
                    userRemoteConfigs: [[credentialsId: 'gitpw-3789060f-ecb5-468e-c161-32076710d930', url: env.GIT_URL]],
                    submoduleCfg: [], 
                    doGenerateSubmoduleConfigurations: false, 
                    extensions: [[$class: 'CloneOption', depth: 1, noTags: false, reference: '', shallow: true]]
                ])
            }
        }
        // mvn打包
        stage('Packaging project') {        
            steps {
                script {
                    sh 'mvn clean install'
                }
            }
        }
        //构建并推送镜像
        stage('Build & Push Image to nexus') {
            steps {
                script {
                     // 第一个参数是私有仓库地址,注意要带http(s),第二个参数是账号密码登录凭证,需要提前创建
                    docker.withRegistry("https://${RegistryUrl}", 'imagepw-8a88451c-0565-6f0d-694c-fa20344a3179') {
                        def image = docker.build("${RegistryUrl}/${PLAT}/${PROJECT}:${ImageVer}", "${WORKSPACE}")
                        image.push()
                    }
                }
            }
        }
        stage('Deploy to the Target server') {
            steps {
                echo '部署到目标服务器'
                withCredentials([file(credentialsId: 'k8s_config', variable: 'KUBECONFIG')]) {
                    sh 'kubectl set image deployment/${PROJECT} ${PROJECT}=${RegistryUrl}/${PLAT}/${PROJECT}:${ImageVer} -ndev'

                }
            }
        }
    }
}

Zookeeper

基础

是什么?

java 复制代码
Leaf分布式ID生成系统在Spring Boot或类似的微服务架构中的集成配置。Leaf是由滴滴出行开源的一套分布式ID生成解决方案,旨在为分布式系统提供高效、高可用的ID生成服务。

配置内容?

java 复制代码
  leaf:
  // Leaf ID生成系统的顶级配置
    snowflake:
    // Leaf提供了两种ID生成模式,一种是基于Twitter Snowflake算法的snowflake模式,另一种是基于数据库的segment模式。这里的配置是针对Snowflake模式的。
      enabled: true
      // 启用Snowflake模式的ID生成器
      name: associated_api
      // Snowflake worker的名称,用于标识不同的业务或者服务。在多服务共用一套Leaf集群的情况下,通过名称区分不同来源的ID请求,确保ID的唯一性和可追踪性。
      zkAddress: 127.0.0.1:2181
      // 配置了Zookeeper的地址。Leaf的Snowflake模式依赖于Zookeeper作为服务发现和分布式协调工具,用来管理worker的分配与状态同步。

Docker

基础

实操

windows11 docker mysql

java 复制代码
参考博客1:https://blog.csdn.net/nmajsjpy/article/details/130183104
参考博客2:https://blog.csdn.net/joeyoj/article/details/136427362

Dockerhouse

Dockerhub

xxl-Job

基础

java 复制代码
@XxlJob 以声明的形式定义和管理任务,无需编写复杂的调度逻辑,简化了定时任务和分布式任务的开发过程;

参考:https://www.xuxueli.com/xxl-job/#3.3 GLUE模式

实战

使用1:

java 复制代码
@XxlJob(value = "shardFetchKeysIntoCache") 
// 理解:
注解@XxlJob,用于标识一个任务处理方法;
value属性,给这个任务命名;

使用2:

java 复制代码
int shardIndex = XxlJobHelper.getShardIndex();
int shardTotal = XxlJobHelper.getShardTotal(); 
// 理解:
XxlJobHelper.getShardIndex() --》当前执行任务的分片索引;  
XxlJobHelper.getShardTotal() --》当前总的分片数量;

XxlJob是一个开源的分布式任务调度平台,常用于Java应用中实现定时任务的调度和管理。
XxlJobHelper类,应该是任务调度框架中的辅助类,用于处理任务分片。

Rancher

基础

思考

  1. Rancher与Kubernetes之间关系?
java 复制代码
Rancher和Kubernetes都是容器编排和管理的强大工具,但它们在设计理念和实际应用上有一些区别。
Rancher着重于用户体验,而Kubernetes则更多被视为一个可扩展的平台。

实战

1 Rancher的某个namespace的scale为0

在Rancher中,scale通常指的是Deployment、ReplicaSet或者StatefulSet,这类工作负载资源的副本数量;

某个namespace的scale=0,表示这个namespace下的某类工作负载的副本数量被设置为0;

这将产生如下情况:

java 复制代码
资源不运行任何副本:没有Pod实例正在运行,不会对外提供服务;
节省资源:没有运行Pod,集群的计算和内存资源可以被释放或用于其他任务;
停止服务:任何试图想访问该服务的请求都将无法得到响应;
更新和维护:scale=0 可以进行应用更新或维护的一种策略,以确保在更改过程中没有活跃流量;

名词概念解释:

java 复制代码
相关推荐
牛奔27 分钟前
Docker Compose 两种安装与使用方式详解(适用于 Docker 19.03 版本)
运维·docker·云原生·容器·eureka
青州从事5216 小时前
20260108【mac】【brew】【docker】安装
macos·docker·eureka
菜鸟思维7 小时前
优化NextJs 项目的Docker 镜像 从3.62G 优化到 296.85M
docker
怣疯knight8 小时前
Docker Desktop 4.55.0版本安装成功教程
windows·docker
东方佑8 小时前
使用Docker Compose一键部署OnlyOffice:完整指南与配置解析
运维·docker·容器
赵文宇(温玉)9 小时前
Docker的价值、特点、创新与关键技术
运维·docker·容器
`林中水滴`9 小时前
ZooKeeper 系列:ZooKeeper 集群环境搭建
zookeeper
小马爱打代码9 小时前
ZooKeeper:五种经典应用场景
分布式·zookeeper·云原生
记得开心一点嘛10 小时前
Elasticsearch
运维·jenkins
Coder码匠10 小时前
Docker Compose 部署 Spring Boot 应用完全指南
spring boot·docker·容器