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 复制代码
相关推荐
FreeBuf_8 分钟前
新型恶意软件采用独特混淆技术劫持Docker镜像
运维·docker·容器
洞窝技术1 小时前
增量代码自动Review工具:洞窝在AI上的探索和实践
jenkins·ai编程·测试
李菠菜3 小时前
CentOS系统指定版本Docker与Docker-Compose在线安装教程
docker·容器·centos
包达叔3 小时前
dockercompose文件仓库
docker
李菠菜7 小时前
Kubernetes上通过Helm部署高可用Redis集群
docker·容器·kubernetes
李菠菜7 小时前
修改KubeSphere外网访问端口
docker·容器·kubernetes
福大大架构师每日一题7 小时前
docker v28.1.1 正式发布!修复关键Bug,网络与安全性再升级
网络·docker·bug
一个小坑货8 小时前
Docker 部署 PostgreSQL 数据库
数据库·docker·postgresql
残轩8 小时前
Win10 家庭版 Docker 环境搭建详解(基于 WSL2)
前端·后端·docker
David爱编程9 小时前
90%工程师都踩过的坑:K8s三种探针最佳组合方案全解析
docker·云原生·kubernetes