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 复制代码
相关推荐
追风林6 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
城南vision8 小时前
Docker学习—Docker核心概念总结
java·学习·docker
wclass-zhengge8 小时前
Docker篇(Docker Compose)
运维·docker·容器
梦魇梦狸º11 小时前
腾讯轻量云服务器docker拉取不到镜像的问题:拉取超时
docker·容器·github
鬼才血脉12 小时前
docker+mysql配置
mysql·adb·docker
詹姆斯爱研究Java12 小时前
Docker 的基本概念和优势
docker
南猿北者14 小时前
docker镜像仓库常用命令
运维·docker·容器
杨浦老苏14 小时前
Docker可视化管理面板DPanel的安装
运维·docker·群晖
航月16 小时前
FTP、ISCSI、CHRONY、DNS、NFS、DOCKER、MARIADB、NGINX、PHP、CA各服务开启方法
nginx·docker·mariadb
微刻时光16 小时前
Docker镜像分成
java·运维·开发语言·docker·容器·镜像