Kubesphere与Jenkins的集成解析

kubesphere jenkins 构建java项目报错Could not parse metadata 阅读详情

layout: post
title: Kubesphere与Jenkins的集成解析
catalog: true
tag: [云原生, Devops, K8s]

1. kubesphere的devops模块介绍

  • kubesphere 使用可插拔的 devops 模块实现devops功能
  • devops驱动jenkins实现具体的操作,例如流水线等

devops与kubesphere的关系如下图, 详细的组件介绍

Architecture

2. 集成的亮点

devops与jenkins集成紧密且优雅,从构建、部署到使用维护纯云原生方式实现

  • 一键部署
  • 一个参数启用devops功能
  • 一个k8s集群内即可完成从jenkins、流水线的全生命周期

3. 具体集成说明

用户使用kuberspere平台的devops功能时,调用devops-api发送请求,devops收到请求后,部分请求直接调用jenkins进行操作,部分请求通过更新devops-controller监听的资源,通过devops-controller来操作jenkins。
运行流水线阶段,jenkins配置了kubernetes动态slave

  • jenkins pod信息(镜像、卷等)发送给k8s
  • k8s启动jenkins slave pod并通过远程协议与jenkins master建立连接
  • 运行流水线
  • 运行完毕之后根据设置删除/保留创建的pod

在这里插入图片描述

3.1. jenkins镜像构建

jenkins本身是一个Java应用,当前也没有提供官方的云原生方案,kubesphere通过下面几个项目定制了自己的镜像

  • custom-war-packager 定制自己的jenkins并生成docker镜像或者war镜像
  • formulas 通过formula.yaml定制自己的jenkins,针对中国区优化
  • ks-jenkins 定制了kubesphere自己的jenkins镜像 使用了jcli 集成了cwp

ks-devops项目中的formulas安装了所有需要的jenkins插件主要有

3.2. jenkins与devops的部署

  • ks-install(ansible) 生成环境变量,主要有
    • 要不要使用 ksauth
    • 生成 ksauth使用的密码
    • 主要环境变量在 https://github.com/kubesphere/ks-installer/blob/master/roles/ks-devops/templates/ks-devops-values.yaml.j2
  • helm部署 devops 和 jenkins helm项目

3.2.1. ks-devops-helm-chart

这个项目里面主要有三个chart

3.2.1.1. devops

部署 devops-api 和 devops-controller

注意⚠️ 这里有一个cronjob 作用为清理执行过的流水线记录,定期执行 ks pip gc

主要部署的资源有

  • deployment
    • devops-apiserver
    • devops-controller
  • cronjob
    • devops
  • configmap
    • devops-config
    • jenkins-agent-config
3.2.1.2. jenkins
3.2.1.2.1. jenkins配置
  • maven配置 charts/ks-devops/charts/jenkins/templates/jenkins-agent-config.yaml
  • 配置jenkins dynamic slave charts/ks-devops/charts/jenkins/templates/jenkins-casc-config.yml
    • 自动化配置jenkins Configure Clouds
    • 配置k8s认证
    • 配置pod volume image lable等
    • 会将上面的maven配置挂在到maven容器中
  • 将maven配置和casc配置以configmap的方式挂在到jenkins容器的 /var/jenkins_home/casc_configs, 从helm的value获取
  • value.yaml charts/ks-devops/charts/jenkins/values.yaml中定义了:
    • 环境变量 从value读出配置到容器中,设置了登陆用的用户名密码
    • 初始化脚本 – 在helm渲染jenkins deploy时挂载到configmap中
      • mariler插件 – 绑定邮箱
      • kubernetes插件 – 创建k8s credential
      • RBAC配置
3.2.1.3. jenkins pod初始化
  • kubernetes插件配置 charts/ks-devops/charts/jenkins/templates/config.yaml

    • config.xml
      • 创建 role kubesphere-user 所有资源只读 并绑定到authenticated用户
      • ladp配置,对接kubesphere ladp
      • cloud配置
        • pod template container配置、挂载等等,包括maven配置、docker sock等
    • apply_config.sh jenkins工作目录初始化
      • slave-to-master-security-kill-switch 禁用agent 访问控制机制
      • 拷贝config.xml 到容器 /var/jenkins_home
      • 将用于初始化的groovy文件拷贝到 /var/jenkins_home/init.groovy.d
        • 初始化用于cloud的 credential Kubernetes service account
        • Mailer模块初始化
        • RBAC初始化: 创建admin和kubesphere-user对应的role 做绑定
        • Sonarqube初始化
        • 用户初始化,创建admin用户并设置密码
  • deployment charts/ks-devops/charts/jenkins/templates/jenkins-master-deployment.yaml

    • 设置环境变量
      • jvm参数
      • admin用户名密码
      • 超时配置
      • 邮箱配置
    • limit 注意: 默认memory为2g,一般是不够用的,跑多个任务就会引起pod crash,所以至少设置成4g
    • initContainer 运行/var/jenkins_config/apply_config.sh 初始化jenkins配置,如安装插件、配置cloud、rbac等等

到这里 jenkins pod就创建出来了,我们可以直接开始使用jenkins运行流水线了

3.2.1.4. s2i

source to image 这个组件没怎么用

3.3. jenkins kubernets动态slave

3.3.1. kubesphere内置jenkins

3.3.1.1. 配置

kubesphere通过ks-install和helm都配置好了,无需单独配置

3.3.1.2. 使用

以流水线为例,groovy中添加以下字段会按照 'base' 去匹配pod的lable,匹配到了会使用这个label的pod模板启动pod运行流水线,下面有两个pipeline 脚本,第一个是选定了pod的模板的会启动一个pod来执行,第二个any, 如果设置了master节点为 Only build jobs with label expressions matching this node 将会启动base pod来运行,如果选择 Use this node as much as possible 则会在jenkins自身的容器/服务器上运行, 如果是普通job的话 勾选Restrict where this project can be run 且填写 Label Expression 选择要运行的label,和pipeline类似

pipeline {
    agent {
        node {
            label 'base'
        }
    }
    stages {
        stage('Run shell') {
            steps {
                sh 'echo hello world'
            }
        }
    }
}
pipeline {
    agent any
    stages {
        stage('Run shell') {
            steps {
                sh 'echo hello world'
            }
        }
    }
}

3.3.2. 独立部署的jenkins

3.3.2.1. cloud配置kubernetes

Manage Node ——> Configure Clouds

  • kubernetes
  • Kubernetes URL: kubernetes apiserver地址, 与kubesphere自带的jenkins不同的是使用了集群内部链接
  • Kubernetes Namespace: slave pod运行的namespace
  • Credentials: 使用secret file,上传 kubeconfig 与kubesphere自带的jenkins不同的是使用了kubernetes service account
  • 使用websocket通信 – 使用jenkins tunnel通信
  • Jenkins URL: jenkins api地址
  • 其他: 其他的pod配置按需配置即可,这里和kubesphere的一样

4. Q&A

4.1. 使用maven构建时,maven仓库如何配置

pod所使用的maven配置是挂载进去的,可以通过Jenkins->Configuration->Maven Project Configuration 配置

4.2. kubesphere->jenkins->kubernetes,认证是如何实现的

4.2.1. kubesphere与jenkin的认证

  • jenkins插件 kubesphere-token-auth-plugin 集成kubesphere的认证体系,在kubesphere调用jenkins时,都需要经过ks-apiserver进行token的review, 通过之后再调用jenkins执行实际动作

在这里插入图片描述

4.2.2. jenkins使用驱动kubernetes实现动态slave

  • jenkins的deployment中声明了 serviceAccountName devops-jenkins
  • 启动的pod会讲 对应serviceAccount的token写入pod文件系统中 /var/run/secrets/kubernetes.io/serviceaccount/token
  • jenkins kubernetes插件会去读pod文件系统的token,这样就可以通过 token 来调度k8s资源实现 slave pod的创建删除

如果是外置jenkins则无法通过读取token来连接kubernetes,需要手动创建serviceAccount、clusterRole、clusterRoleBinding, 然后将token以Secret text或者将ca证书以Secret file形式或将kubconfig以Secret file形式写入credentials

5. 部署使用问题

5.1. 误删 apiserivice

kubectl delete --all apiservice

5.1.1. 解决方式

参照 https://github.com/kubernetes/kubernetes/issues/75704

  • 将kube-apiserver.yaml移到其他文件夹,这时kube-apiserver的pod会down掉
mv /etc/kubernetes/manifests/kube-apiserver.yaml /etc/kubernetes/
  • 在其他api正常的节点删除这个pod,再将配置文件移回去,即可恢复

5.2. kubesphere api服务无法启动

kubesphere v3.3.0

5.2.1. 错误描述

install failed, ks-controller CrashLoopBackOff

E1116 00:55:15.113761 1 notification_controller.go:113] get /, Kind= informer error, no matches for kind "Config" in version "notification.kubesphere.io/v2beta1"
F1116 00:55:15.113806 1 server.go:340] unable to register controllers to the manager: no matches for kind "Config" in version "notification.kubesphere.io/v2beta1"

5.2.2. 解决方式

参照 kubectl apply -f https://raw.githubusercontent.com/kubesphere/notification-manager/master/config/bundle.yaml

kubectl apply -f https://raw.githubusercontent.com/kubesphere/notification-manager/master/config/bundle.yaml

5.3. jnlp 容器无法启动

jnlp是jenkin的远程调用协议

JNLP(JAVA NETWORK LAUNCH PROTOCOL) is used to Connect to/launch your java application( here Jenkins) from a remote location

[root@k8s-1 ~]# kubectl logs -f  -n kubesphere-devops-worker base-w9dpq jnlp
Warning: SECRET is defined twice in command-line arguments and the environment variable
Warning: AGENT_NAME is defined twice in command-line arguments and the environment variable
Sep 14, 2022 11:29:43 AM hudson.remoting.jnlp.Main createEngine
INFO: Setting up agent: base-w9dpq
Sep 14, 2022 11:29:44 AM hudson.remoting.jnlp.Main$CuiListener <init>
INFO: Jenkins agent is running in headless mode.
Sep 14, 2022 11:29:44 AM hudson.remoting.Engine startEngine
INFO: Using Remoting version: 4.10
Sep 14, 2022 11:29:44 AM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
INFO: Using /home/jenkins/agent/remoting as a remoting work directory
Sep 14, 2022 11:29:44 AM org.jenkinsci.remoting.engine.WorkDirManager setupLogging
INFO: Both error and output logs will be printed to /home/jenkins/agent/remoting
Sep 14, 2022 11:29:44 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Locating server among [http://172.16.80.38:8080/]
Sep 14, 2022 11:29:44 AM hudson.remoting.jnlp.Main$CuiListener error
SEVERE: http://172.16.80.38:8080/tcpSlaveAgentListener/ is invalid: 404 Not Found
java.io.IOException: http://172.16.80.38:8080/tcpSlaveAgentListener/ is invalid: 404 Not Found
	at org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver.resolve(JnlpAgentEndpointResolver.java:219)
	at hudson.remoting.Engine.innerRun(Engine.java:724)
	at hudson.remoting.Engine.run(Engine.java:540)
Sep 14, 2022 11:33:41 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Locating server among [http://devops-jenkins.kubesphere-devops-system:80/]
Sep 14, 2022 11:33:42 AM org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver resolve
INFO: Remoting server accepts the following protocols: [JNLP4-connect, Ping]
Sep 14, 2022 11:33:42 AM org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver resolve
INFO: Remoting TCP connection tunneling is enabled. Skipping the TCP Agent Listener Port availability check
Sep 14, 2022 11:33:42 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Agent discovery successful
  Agent address: devops-jenkins-agent.kubesphere-devops-system
  Agent port:    50000
  Identity:      13:ea:2b:ab:b5:16:70:70:89:58:d1:66:2b:62:b1:16
Sep 14, 2022 11:33:42 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Handshaking
Sep 14, 2022 11:33:42 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Connecting to devops-jenkins-agent.kubesphere-devops-system:50000
Sep 14, 2022 11:33:42 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Trying protocol: JNLP4-connect
Sep 14, 2022 11:33:42 AM org.jenkinsci.remoting.protocol.impl.BIONetworkLayer$Reader run
INFO: Waiting for ProtocolStack to start.
Sep 14, 2022 11:33:46 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Remote identity confirmed: 13:ea:2b:ab:b5:16:70:70:89:58:d1:66:2b:62:b1:16
Sep 14, 2022 11:33:46 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Connected
Sep 14, 2022 11:33:58 AM org.csanchez.jenkins.plugins.kubernetes.KubernetesSlave$SlaveDisconnector call
INFO: Disabled agent engine reconnects.

6. 附录

6.1. 附录1: 认证备忘

  • ks-installer/roles/ks-core/init-token/tasks/main.yaml 生成一个随机值secret
  • 部署kubersphere的时候初始化通过 ks-installer/roles/ks-core/init-token/files/jwt-script/jwt.sh 生成了一个jwt token 入参为 上面生成的字符串和’{“email”: “admin@kubesphere.io”,“username”: “admin”,“token_type”: “static_token”}’
  • 通过生成的token和secret创建secret名为 kubesphere-secret
  • 部署devops的时候将填入authentication.jwtSecret devops.password 通过helm部署devops
  • 部署jenkin的密码为写死的"P@ssw0rd"
  • admin password生成了一个随机的22位字符串写入jenkins pod环境变了并通过读取configmap devops-jenkins启动jenkins

7. 参考

jcli
jcli使用手册
custom-war-packager
jenkins kubernetes插件
KubeSphere DevOps 3.0 流水线开发指南
Jenkins 基于Kubernetes动态创建pod
Can I use Jenkins kubernetes plugin when Jenkins server is outside of a kubernetes cluster?
kubernetes-jenkins-integration

K8S - 基于KubeSphere的DevOps构建依赖Jenkinsfile的流水线 Jenkinsfile 是一个文本文件,它包含 Jenkins 流水线的定义,并被检入源代码控制仓库。Jenkinsfile 将整个工作流存储为代码,因此它是代码审查和流水线迭代过程的基础。有关更多信息,请参见Jenkins 官方文档。 KubeSphere 中可以创建两种类型的流水线:一种是本教程中介绍的基于 SCM 中 Jenkinsfile 创建的流水线,另一种是通过图形编辑面板创建的流水线。Jenkinsfile in SCM 需要源代码管理 (SCM) 中有内置 Jenkinsfil... 阅读详情

相关推荐

在KubeSphere 容器中快速部署使用 GitLab 并构建 DevOps 项目

GitLab的初始密码被作为Secret保存,我们可以回到项目首页,在「配置」下的「保密字典」中搜索initial可以找到gitlab-initial-root-password的条目。通过「确定」按钮保存凭证后回到「选择代码面板」,在「凭证」下拉框中选择刚刚创建的gitlab-root,然后在「项目组/所有者」文本库中填入我们的账号root,点击「代码仓库」下拉框可看到root账号下所有的代码仓库,这里我们可以看到并选择之前创建的示例项目root/rak-test-express。答案是肯定的:可以!

petaexpress的博客 1749

基于Jenkins与Argo CD的多集群持续交付实践

持续交付是现代DevOps实践中的核心概念,通过自动化构建、测试和部署流程,显著提升软件交付效率。在云原生架构中,Kubernetes多集群管理成为企业级应用的常见需求。Jenkins作为老牌CI工具提供灵活的流水线定制能力,而Argo CD则基于GitOps理念实现声明式的Kubernetes应用部署。两者结合形成的解决方案,既能处理复杂的构建逻辑,又能确保多集群环境下的部署一致性。该方案特别适合需要同时管理开发、测试和生产环境的场景,通过ApplicationSet等特性实现配置模板化和自动化同步。在金

wjxbj的博客 394

【云原生之kubernetes实战】kubernetes搭建jenkins

kubernetes搭建jenkins

jks212454的博客 499

基于kubesphere创建jenkins服务

完成之后删除创建的无状态服务的jenkins(存储不要删除)存储类直接复用第二步创建的即可,这里无需重复操作。部署好NFS-server和开启NFS存储类。按照提示,初始化密码&安装插件即可。

完颜振江 953

Flink on k8s 环境搭建(一)

Flink on Yarn的环境搭建过程中,需要进行配置较多,且需要搭建zookeeper Hadoop Yarn 等相关组件,安装流程比较复杂,集群出现问题重新安装的流程也比较复杂,且Yarn的3个节点中 只能起了 3个resourceManager和1个NodeManager,Flink 作业申请资源时只能 向NodeManager的节点申请资源,整体有资源瓶颈的隐患(后继flink作业会越来越多),现在尝试进行Flink on k8s 的环境搭建。

wangqiaowq的博客 3413

英飞凌ADS开发环境搭建全流程:从安装到第一个程序烧录

本文详细介绍了英飞凌ADS开发环境搭建的全流程,包括环境准备、ADS安装与配置、MemTools烧录技巧等关键步骤。针对嵌入式开发者,特别提供了从安装到第一个程序烧录的实战指南,涵盖常见问题解决方案和优化建议,帮助开发者快速上手英飞凌AURIX系列微控制器的开发工作。

qsc901234的博客 334

6.云原生之kubesphere中Jenkin CICD实战

云原生之DevOps和CICD

野心与梦 1万+

成功解决 OllamaError: status code 400, message: model ‘llama3.2:latest‘ not found 报错

本文针对Ollama更新后出现的OllamaError: status code 400, message: model 'llama3.2:latest' not found报错,分析了其根本原因——2026年1月Ollama将Llama 3.2模型命名从llama3.2:latest改为meta-llama/Llama-3.2:7b-instruct等新格式。解决方案包括:1)使用新模型名称;2)升级Ollama SDK;3)查询确认本地可用模型;4)批量更新旧项目脚本。通过正确适配新命名规则,

博客 1398

KubeSphere 中的 Jenkins API Client for Go:基于 gojenkins 二次开发的 Jenkins 客户端实战指南

本文围绕 KubeSphere 仓库中的 [Jenkins 客户端模块说明文档](https://link.gitcode.com/i/25a4bf1522d757664102fb9b2eb41cd6),系统讲解这套 Go 语言编写的 Jenkins REST API 客户端的能力全貌:它脱胎于开源项目 gojenkins,并在 KubeSphere 中围绕 DevOps 场景扩展了凭证管理(Cr

gitblog_00809的博客 1046

YOLOv11-seg 改进系列 | 引入原创 RSCD 重参数共享卷积分割头,增强 Head 表达力并压低计算量

本文提出一种改进的YOLOv11-seg分割头Segment_RSCD,通过重参数共享卷积增强表达能力。该模块在LSCD共享检测头基础上引入DiverseBranchBlock重参数卷积,保留三尺度预测与Proto掩码原型接口不变。相比原始Segment头,Segment_RSCD参数增加4%但计算量降低1.3%,在共享卷积结构中通过多分支补偿表达能力损失,同时利用Scale层保持尺度差异校准。该方法不改动Backbone/Neck结构,仅重构检测/分割头,实现训练期多路径聚合与部署期等效单分支的平衡。

qq_44224801的博客 184

【WorkBuddy专栏14】专家不是「换皮」——角色切换、训练机制与自我进化深度拆解

WorkBuddy专栏14】专家不是「换皮」——角色切换、训练机制与自我进化深度拆解

AI人人懂 593

KubeSphere 与 Go 生态中的 etree 实战指南:用元素树轻松读写、查询与生成 XML

etree 是一个轻量级、纯 Go 实现的 XML 处理库,它将 XML 文档建模为一棵"元素树"(Element Tree),设计灵感来自 Python 标准库中的 ElementTree 模块。本篇指南以本仓库 vendor 目录下的 [etree 官方 README](https://link.gitcode.com/i/2d7199c5ba3fa2c17af6ed3d6a7be154) 为

gitblog_00428的博客 506

在ros中进行多传感器融合定位

ROS 中的 robots_localization 包是一个非常有用的包,可以使用各种卡尔曼滤波器融合任意数量的传感器!我们将使用它将全局姿势数据(x、y、z 和orientation)与机器人上的现有传感器融合,以实现更强大的定位!

如果想成为中心,那么就到中心去吧。 3003

如何使用KubeSphere实现DevOps全流程自动化:从代码提交到应用部署的完整指南

KubeSphere是一个开源的企业级容器平台,构建于Kubernetes之上,提供全栈化容器管理能力,其中DevOps模块为开发团队提供了从代码管理、持续集成到持续部署的完整解决方案。本文将详细介绍如何利用KubeSphere实现DevOps全流程自动化,帮助团队高效交付应用。 ## 什么是KubeSphere DevOps? KubeSphere DevOps平台深度集成了Jenkins,

gitblog_01401的博客 896

Python爬虫实战:使用最新技术抓取采购网招标公告信息

本文将详细介绍如何使用Python最新爬虫技术构建一个高效的采购网招标公告信息抓取系统。我们将从爬虫基础概念讲起,逐步深入到高级技巧,包括异步处理、反爬虫对策、数据解析与存储等,并提供完整的代码实现。本文旨在为读者提供一套完整的网络数据采集解决方案,适用于各类政府采购平台和商业招标网站。网络爬虫(Web Crawler)是一种自动抓取互联网信息的程序或脚本,它们按照一定的规则,自动地浏览万维网并提取所需数据。在现代商业环境中,爬虫技术广泛应用于价格监控、竞争情报收集、市场研究等领域。

2201_76125261的博客 1623

YOLOv11知识蒸馏,实现无损涨点,包含逻辑蒸馏和特征蒸馏中的不同蒸馏方法,适用专栏内的所有模型

知识蒸馏(Knowledge Distillation)是由 Hinton 等人在 2015 年提出来的,主要是用一个复杂的教师模型去指导一个简单的学生模型训练,这样能让学生模型在保持高精度的同时,还能减少计算量。本文便是讲解如何针对的原始模型以及改进后的模型进行知识蒸馏,轻松实现无损涨点。知识蒸馏的核心在于利用已训练好的复杂模型(教师模型)去指导一个更简单的模型(学生模型)进行训练,以此让学生模型在保留较高精度的同时,降低计算成本。特征蒸馏(Feature Distillation)是知识蒸馏的一种形式,

Limiiiing的博客 4961

KubeSphere 依赖解析:Go 语言 XML 元素树库 etree v1.1.0 新特性与路径查询实战

etree(`github.com/beevik/etree`)是一个轻量级、纯 Go 实现的 XML 元素树(element tree)库,其设计灵感来自 Python 的 ElementTree 模块,用于将 XML 表达为易于遍历和操作的元素树。在 KubeSphere 仓库中,etree 被用于 Jenkins DevOps 流水线配置 XML 的生成与解析。本文以该仓库内 vendore

gitblog_00606的博客 441

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

KubeSphere v3.4.1 版本全解析:四大模块 Bug 修复与稳定性增强实战指南

本文基于 KubeSphere 开源仓库中的官方版本说明 [CHANGELOG-3.4.1.md](https://link.gitcode.com/i/99f81a6ca6bd356ad755c0fb126f39c7),系统梳理 v3.4.1 这一补丁版本在 App Store(应用商店)、Console(控制台)、多集群、可观测性、认证授权、DevOps、用户体验与监控八大模块的全部修复与优化

gitblog_01156的博客 879

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

KubeSphere企业级容器平台架构解析:为云原生转型提供完整解决方案

KubeSphere作为构建在Kubernetes之上的企业级容器平台,为技术决策者和运维团队提供了从容器编排到全栈云原生管理的完整解决方案。该平台通过统一控制平面整合了DevOps、微服务治理、监控告警、日志查询等核心功能,旨在降低企业云原生转型的技术门槛,提升运维效率。本文将从架构设计、性能考量、部署策略和技术演进四个维度,深入分析KubeSphere的技术实现和最佳实践。 ## 架构设计原

gitblog_01038的博客 307

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

KubeSphere 3.4 容器平台深度解析:云原生应用管理、特性架构与部署实战指南

KubeSphere 是一个以 Kubernetes 为内核的开源企业级容器平台,提供多租户容器管理、DevOps 流水线、服务网格、可观测性、应用商店与边缘计算等全栈能力。本文以 KubeSphere 官方仓库的 [README.md](https://link.gitcode.com/i/84a1f64fc0a7aa9bce5826f7749923b0) 为骨架,结合仓库源码(如 [ks-ap

gitblog_00654的博客 762

KubeSphere 中的 JWT 实战指南:基于 golang-jwt/jwt v4 的 Token 签发、解析与安全校验

JWT(JSON Web Token)是现代云原生平台实现无状态认证的事实标准,KubeSphere 的访问令牌、刷新令牌与 OIDC ID Token 正是基于 [vendor/github.com/golang-jwt/jwt/v4](https://link.gitcode.com/i/ad72e435ef1813d1556e624deb785a44)(即 jwt-go)这一 Go 实现构建

gitblog_00834的博客 494

KubeSphere终极指南:如何快速掌握企业级容器平台部署与管理

KubeSphere是一个开源的企业级容器平台,构建于Kubernetes之上,为企业提供全栈化的容器管理能力。无论你是刚刚接触容器技术的新手,还是正在寻找更高效容器管理方案的专业人士,KubeSphere都能帮助你简化复杂的云原生应用部署流程,实现数字化转型的快速落地。 ## 🌟 为什么选择KubeSphere容器平台? 在当今云原生技术快速发展的时代,企业面临着容器化应用管理的多重挑战。

gitblog_00875的博客 418

KubeSphere DevOps启用全记录:从YAML修改到日志监控的完整流程

本文详细记录了在KubeSphere平台上启用DevOps功能的完整流程,从理解架构与资源需求、精准修改ClusterConfiguration YAML文件,到安装过程监控、深度排错及安装后验证与调优。针对资源紧张环境,提供了关键的JVM与Kubernetes资源配置参数解析与优化建议,帮助运维工程师成功部署并稳定运行KubeSphere DevOps,实现高效的云原生CI/CD。

i8j9k0l1的博客 440

KubeSphere v3.3.1 版本全解析:DevOps 流水线、权限模型与监控指标的关键修复

KubeSphere v3.3.1 是 v3.3 系列的重要维护版本,聚焦于流水线 CI/CD 体验、网络与存储稳定性、权限模型重构以及监控与告警指标的准确性,覆盖 [CHANGELOG/CHANGELOG-3.3.1.md](https://link.gitcode.com/i/f9b8c26829bbcd3bd0c4cd8cbbf7814d) 中列出的 DevOps、Network、App S

gitblog_01047的博客 410

KubeSphere+DevOps高可用环境搭建实战指南

容器编排技术Kubernetes已成为云原生应用部署的事实标准,而KubeSphere作为其企业级发行版,通过整合DevOps能力大幅提升了持续交付效率。高可用架构设计是生产环境的核心需求,涉及多节点部署、负载均衡和容错机制等关键技术。在CI/CD场景中,Jenkins高可用配置和分布式存储方案能够确保构建过程的稳定性,而Harbor镜像仓库则提供了企业级制品管理能力。本文以KubeSphere 3.4.1和Kubernetes 1.28.8为例,详细解析如何通过KubeKey工具快速部署高可用集群,并实现

weixin_34072296的博客 324
上一篇: Octavia访问频繁引起SYN洪泛的分析与解决
下一篇: Java应用云原生构建优化
gfengwong
博客等级 码龄12年 103粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值