K8S学习笔记之最小控制单元Pod (二)

[Kubernetes]2. k8s集群中部署基于nodejs golang的项目以及Pod、Deployment详解 k8s集群中部署基于nodejs golang的项目以及Pod、Deployment详解 阅读详情

污点和容忍度

给了节点选则的主动权,我们给节点打一个污点,不容忍的pod就调度不上来,污点就是定义在节点上的键值属性数据,可以定决定拒绝那些pod;

污点是节点的属性;亲和度是pod的属性。

taints是键值数据,用在node上,定义污点;
tolerations是键值数据,用在pod上,定义容忍度,能容忍哪些污点

# 查看节点属性详细信息
kubectl describe nodes master1
# kubectl explain node.spec.taints
effect	    <string> -required-  定义对pod对象的排斥等级(效果)
key	        <string> -required-
timeAdded	<string>
value	    <string>

# NoSchedule:
仅影响pod调度过程,当pod能容忍这个节点污点,就可以调度到当前节点。后来这个节点的污点改了,加了一个新的污点,对现存的pod对象不产生影响,新的不容忍的pod不会进来。

# NoExecute:
既影响调度过程,又影响现存的pod对象,如果现存的pod不能容忍节点后来加的污点,这个pod就会被驱逐

# PreferNoSchedule:
"最好不,也可以"是NoSchedule的柔性版本
# 在pod对象定义容忍度的时候支持两种操作:
1.等值密钥:key和value上完全匹配
2.存在性判断:key和effect必须同时匹配,value可以是空
在pod上定义的容忍度可能不止一个,在节点上定义的污点可能多个,需要琢个检查容忍度和污点能否匹配,每一个污点都能被容忍,才能完成调度,如果不能容忍怎么办,那就需要看pod的容忍度了。
## 【0】为什么kube-api-server可以调度到master节点上
# 其定义了Tolerations  :NoExecute
kubectl describe pods kube-apiserver-master1 -n kube-system
# master 节点定义了污点
# Traints  node-role.kubernetes.io/master:NoExecute
kubectl describe nodes master1
## 【1】给node2定义污点并且测试pod容忍度
kubectl taint –help
kubectl taint node node2 node-type=pro:NoSchedule
# 创建pod
vim pod-test-taint.yaml
kubectl apply -f pod-test-taint.yaml
kubectl get pods -o wide
# 可以看到都被调度到node1上了,因为node2这个节点打了污点,而我们在创建pod的时候没有容忍度,所以node2上不会有pod调度上去的
apiVersion: v1
kind: Pod
metadata:
  name: taint-pod
  namespace: default
  labels:
    tomcat: tomcat-pod
spec:
  containers:
  - name:  taint-pod
    ports:
    - containerPort: 8080
    image: tomcat:8.5-jre8-alpine
    imagePullPolicy: IfNotPresent 
## 【2】给node1打上污点,测试驱逐pod的现象
kubectl taint node node1 node-type=dev:NoExecute
kubectl get pods -o wide
# 看到node1上已经存在的pod节点都被驱逐了
## 【3】定义pod容忍度,使其调度到node2上
vim pod-test-toleration.yaml
kubectl apply -f pod-test-toleration.yaml
kubectl get pods -o wide
apiVersion: v1
kind: Pod
metadata:
  name: myapp-deploy
  namespace: default
  labels:
    app: myapp
    release: canary
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    ports:
    - name: http
      containerPort: 80
  tolerations:
  - key: "node-type"
    operator: "Equal"
    value: "pro"
    effect: "NoSchedule"
## 【4】修改“等值匹配”为“存在性匹配”
# 只要有一个node-type的键,不管值是什么,不管是什么效果,都能容忍
tolerations:
- key: "node-type"
  operator: "Exists"
  value: ""
  effect: "NoSchedule"
  tolerationSeconds: 3600
## 【5】删除污点,避免影响后续测试
kubectl taint nodes node1 node-type:NoExecute-
kubectl taint nodes node2 node-type-

生命周期和状态

pod状态

## 挂起(Pending)
我们在请求创建pod时,条件不满足,调度没有完成,没有任何一个节点能满足调度条件,已经创建了pod但是没有适合它运行的节点叫做挂起,调度没有完成,处于pending的状态会持续一段时间:包括调度Pod的时间和通过网络下载镜像的时间。 
## 运行中(Running)
Pod已经绑定到了一个节点上,Pod 中所有的容器都已被创建。至少有一个容器正在运行,或者正处于启动或重启状态。
## 成功(Succeeded)
Pod 中的所有容器都被成功终止,并且不会再重启。
## 失败(Failed)
Pod 中的所有容器都已终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非0状态退出或者被系统终止。
## 未知(Unknown)
未知状态,所谓pod是什么状态是apiserver和运行在pod节点的kubelet进行通信获取状态信息的,如果节点之上的kubelet本身出故障,那么apiserver就连不上kubelet,得不到信息了,就会看Unknown
## Evicted状态
出现这种情况,多见于系统内存或硬盘资源不足,可df-h查看docker存储所在目录的资源使用情况,如果百分比大于85%,就要及时清理下资源,尤其是一些大文件、docker镜像。
## CrashLoopBackOff状态
容器曾经启动了,但可能又异常退出了
## Error状态
Pod 启动过程中发生了错误

pod重启策略

Pod的重启策略(RestartPolicy)应用于Pod内的所有容器,并且仅在Pod所处的Node上由kubelet进行判断和重启操作。当某个容器异常退出或者健康检查失败时,kubelet将根据 RestartPolicy 的设置来进行相应的操作。

Always:当容器失败时,由kubelet自动重启该容器。(默认)
OnFailure:当容器终止运行且退出码不为0时,由kubelet自动重启该容器。
Never:不论容器运行状态如何,kubelet都不会重启该容器。

pod生命周期

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BsoU47sU-1657098393971)(./pic/pod生命周期.jpg)]

Init容器

1.初始化工作需要的容器,有一个或者多个,按照定义的顺序执行(串行)。
2.只有所有的初始化容器执行完毕后主容器才能执行(先与主容器运行,为主容器启动提供支持)。
3.初始化容器执行完毕后就退出了。
4.与主容器存储卷共享,数据共享。

5.可以利用初始化容器,做一些程序设计:进行一些预检查参数、初始化数据库、初始化缓存或挂载卷等操作
Init容器与普通的容器区别是:
1、Init 容器不支持 Readiness,因为它们必须在Pod就绪之前运行完成
2、每个Init容器必须运行成功,下一个才能够运行
3、如果 Pod 的 Init 容器失败,Kubernetes 会不断地重启该 Pod,直到 Init 容器成功为止,然而,如果Pod对应的restartPolicy值为 Never,它不会重新启动。

主容器

# 初始化容器启动之后,开始启动主容器,包含了用户定义的程序镜像等
# pod在整个生命周期中有非常多的用户行为:
1、初始化容器完成初始化
2、主容器启动后可以做启动后钩子
3、主容器结束前可以做结束前钩子
4、在主容器运行中可以做一些健康检测,如liveness probe,readness probe

创建过程

apiserver作为交互门户,提供有各种API,以及与etcd存储插件交互,统筹协调各个组件,来创建和存储一个资源。
schedule作为调度中心,可以根据pod资源信息,将pod调度到不同工作节点上
kubelet负责将调度到具体节点上的资源清单,进行创建
期间,apiserver会统筹交互,并将各个插件的操作结果和资源信息存储到etcd中

两个钩子函数(pre和post)

postStart:容器创建成功后,运行前的任务,用于资源部署、环境准备等。
preStop:在容器被终止前的任务,用于优雅关闭应用程序、通知其他系统等。
# postStart:容器启动后钩子
该钩子在容器被创建后立刻触发,通知容器它已经被创建。如果该钩子对应的hook handler执行失败,则该容器会被杀死,并根据该容器的重启策略决定是否要重启该容器,这个钩子不需要传递任何参数。

# preStop:容器结束前钩子
该钩子在容器被删除前触发,其所对应的hook handler必须在删除该容器的请求发送给Docker daemon之前完成。在该钩子对应的hook handler完成后不论执行的结果如何,Docker daemon会发送一个SGTERN信号量给Docker daemon来删除该容器,这个钩子不需要传递任何参数。
# 示例:
# 启动后,将web.xml文件copy到/root/目录下;销毁前,请求到http://monitor.com:8080/waring发送警告
# 支持exec、httpGet、tcpSocket三种方式
containers: 
  - name: tomcat-test
    image: tomcat:8.5-jre8-alpine
    imagePullPolicy: IfNotPresent
    lifecycle:
      postStart: 
        exec:
          command:
            - "cp"
            - "/usr/local/tomcat/conf/web.xml"
            - "/root/web.xml"
      preStop:
        httpGet:
          host: monitor.com
          path: /waring
          port: 8080
          scheme: HTTP
# 利用生命周期函数优雅删除资源对象
lifecycle:
  preStop:
    exec:
    # nginx -s quit gracefully terminate while SIGTERM triggers a quick exit
      command: ["/usr/local/nginx/sbin/nginx","-s","quit"]

存活性探测和就绪性探测(探针)

## livenessProbe:存活性探测
许多应用程序经过长时间运行,最终过渡到无法运行的状态,除了重启,无法恢复。通常情况下,K8S会发现应用程序已经终止,然后重启应用程序pod。有时应用程序可能因为某些原因(后端服务故障等)导致暂时无法对外提供服务,但应用软件没有终止,导致K8S无法隔离有故障的pod,调用者可能会访问到有故障的pod,导致业务不稳定。K8S提供livenessProbe来检测容器是否正常运行,并且对相应状况进行相应的补救措施。
## readinessProbe:就绪性探测
在没有配置readinessProbe的资源对象中,pod中的容器启动完成后,就认为pod中的应用程序可以对外提供服务,该pod就会加入相对应的service,对外提供服务。但有时一些应用程序启动后,需要较长时间的加载才能对外服务,如果这时对外提供服务,执行结果必然无法达到预期效果,影响用户体验。比如使用tomcat的应用程序来说,并不是简单地说tomcat启动成功就可以对外提供服务的,还需要等待spring容器初始化,数据库连接上等等。
# 三种探测方式
ExecAction
在容器中执行指定的命令,如果执行成功,退出码为 0 则探测成功。
TCPSocketAction
通过容器的 IP 地址和端口号执行 TCP 检 查,如果能够建立 TCP 连接,则表明容器健康。
HTTPGetAction
通过容器的IP地址、端口号及路径调用 HTTP Get方法,如果响应的状态码大于等于200且小于400,则认为容器健康

# 探针属性
initialDelaySeconds: Pod启动后首次进行检查的等待时间,单位“秒”。
periodSeconds: 检查的间隔时间,默认为10s,单位“秒”。
timeoutSeconds: 探针执行检测请求后,等待响应的超时时间,默认为1s,单位“秒”。
successThreshold:连续探测几次成功,才认为探测成功,默认为 1,在 Liveness 探针中必须为1,最小值为1。
failureThreshold: 探测失败的重试次数,重试一定次数后将认为失败,在 readiness 探针中,Pod会被标记为未就绪,默认为 3,最小值为 1

# 探针区别
readinessProbe 当检测失败后,将 Pod 的 IP:Port 从对应的 EndPoint 列表中删除。
livenessProbe 当检测失败后,将杀死容器并根据 Pod 的重启策略来决定作出对应的措施。
# 示例【1】存活探测
# vim pod-test-liveness.yaml
# 容器在初始化后,首先创建一个 /tmp/healthy 文件,存活30秒
# 存活探针检检测方式为执行 shell 命令,有/tmp/healthy则为存活;反之,不存活则按照重启策略重启pod
apiVersion: v1
kind: Pod
metadata:
  name: liveness-exec
  labels:
    app: liveness
spec:
  containers:
  - name: liveness
    image: busybox
    args:                       #创建测试探针探测的文件
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
    livenessProbe:
      initialDelaySeconds: 10   #延迟检测时间
      periodSeconds: 5          #检测时间间隔
      exec:
        command:
        - cat
        - /tmp/healthy
# 示例【2】就绪性探测
# vim pod-test-readiness.yaml
# 利用springboot的actuator插件,请求API接口:/actuator/health查看应用状态
# 如果探测成功则代表内部程序以及启动,就开放对外提供接口访问;否则内部应用没有成功启动,暂不对外提供访问,直到就绪探针探测成功。
## 首先需要只做一个springboot项目的镜像(具体查看附录:将MVN项目打包成镜像)
## pod启动成功后访问:http://10.11.2.58:31180/sayHello 也能成功
apiVersion: v1
kind: Service
metadata:
  name: springboot
  labels:
    app: springboot
spec:
  type: NodePort
  ports:
  - name: server
    port: 8080
    targetPort: 8080
    nodePort: 31180
  selector:
    app: springboot
---
apiVersion: v1
kind: Pod
metadata:
  name: springboot
  labels:
    app: springboot
spec:
  containers:
  - name: springboot
    image: docker-demo:1.0-SNAPSHOT
    ports:
    - name: server
      containerPort: 8080
    readinessProbe: 
      initialDelaySeconds: 20   
      periodSeconds: 5          
      timeoutSeconds: 10   
      httpGet:
        scheme: HTTP
        port: 8080
        path: /actuator/health
# 示例【3】两者结合使用
# 【就绪】性探测成功后,应用才可对外提供服务
# 【存活】性探测在指定时间段检测应用健康状态,让应用提供稳定持续的服务
## 需要根据自己应用特性自行设计使用
... ...

启动探测(探针)

## startupProbe: 启动探测
探测容器中的应用是否已经启动。如果提供了启动探测(startup probe),则禁用所有其他探测,直到它成功为止。如果启动探测失败,kubelet 将杀死容器,容器服从其重启策略进行重启。如果容器没有提供启动探测,则默认状态为成功 Success。
可以自定义在 pod 启动时是否执行这些检测,如果不设置,则检测结果均默认为通过,如果设置,则顺序为 startupProbe>readinessProbe>livenessProbe。
## 使用场景
正常情况下,我们会在 pod template 中配置 livenessProbe 来探测容器是否正常运行,如果异常则会触发restartPolicy 重启容器。但是存在特殊情况:
1.服务启动时间是60秒,如果配置的探针启动后10秒检查一次,异常次数为一次,那么这个容器就会陷入重启的死循环
2.如果将检查周期设置为60秒,那么下次服务启动时间增加为70秒,又要重新修改资源文件
3.提高异常次数的阈值,那么将会降低我们发现异常服务的周期时间,对于线上问题不能及时的排查
所以,就需要使用startProbe和livenessProbe配合使用,先确保程序已经启动成功,再进行存活性检测。避免了存活性检测因为程序启动慢等因素导致死循环等。
## 关于livenessProbe和readinessProbe的执行顺序问题
LivenessProbe 会导致 pod 重启,ReadinessProbe 只是不提供服务,他俩没有必然的先后顺序!
(详见官方:https://github.com/kubernetes/kubernetes/issues/60647 )

1.kubelet 使用存活探测器来知道什么时候要重启容器。例如,存活探测器可以捕捉到死锁(应用程序在运行,但是无法继续执行后面的步骤)。这样的情况下重启容器有助于让应用程序在有问题的情况下可用。

2.kubelet 使用就绪探测器可以知道容器什么时候准备好了并可以开始接受请求流量,当一个 Pod 内的所有容器都准备好了,才能把这个Pod看作就绪了。这种信号的一个用途就是控制哪个 Pod 作为 Service 的后端。在Pod还没有准备好的时候,会从 Service 的负载均衡器中被剔除的。

3.kubelet 使用启动探测器(startupProbe)可以知道应用程序容器什么时候启动了。如果配置了这类探测器,就可以控制容器在启动成功后再进行存活性和就绪检查,确保这些存活、就绪探测器不会影响应用程序的启动。这可以用于对慢启动容器进行存活性检测,避免它们在启动运行之前就被杀掉。

k8s入门教程详解(一) 文章目录Kubernetes 入门教程详解(一)一、 Kubernetes 概述1. K8S 发展历史由来2.K8S官网2.K8S 是什么3. K8s 优势及特点3.1 K8S优势3.2 K8S 特点4. K8s 集群架构与组件4.1 K8s 集群架构4.2 K8s 核心组件详细说明5. K8s 核心概念5.1 Master 集群控制节点5.2 Node 工作负载节点5.3 Pod kubernetes的最小控制单元5.4 Controller 控制器Pod5.4.1 复制控制器(Replication 阅读详情

相关推荐

Kubernetes(K8S) 入门进阶实战完整教程

Kubernetes详细教程 1. Kubernetes介绍 1.1 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容易产生影响 虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的一个环境 优点:程序环境不会相互产生影响,提供了一定程度的安全性 缺点:增加了操作系统,浪费了部分资源 容器化部署:

JustinMars的博客 4441

K8S最小调度单位Pod详解

k8s里面非常重要的一个概念pod,首先简单的介绍是pod是k8s最小的调度单位,一个pod里面可以包含一个或者多个container,一个pod共享一个namespace,它们之前可以通过localhost来进行通信。 docker:Namespace 做隔离,Cgroups 做限制,rootfs做文件系统。 容器本质是进程,而k8s是操作系统。 pod就是类似于进程组。 部署的一些应...

lixinkuan的博客 6447

使用JAVA 的 POI 库 将DOC文件转为DOCX文件

java使用POI库,将doc文件转为docx文件

qq_45808266的博客 5702

Linux:kubernetes(k8s)prestop事件的使用(11)

他的作用是在结束pod容器之后进行的操作将这yaml文件运行起来开始的时候写入一段 pre stop 结束的时候先休眠50秒 再写入一个 sleep ……可以看到已经写入了,

鲍海超 1243

【机器人】转动的指数坐标表示心得理解

转动的指数坐标表示心得理解1.前言2.指数坐标表示旋转矩阵3.原理推导4.矩阵对数、矩阵指数 1.前言 最近因为项目需求,又学习了一点机器人学的东西,参考书籍为《现代机器人学》,该书采用指数坐标、旋量的方式来对机器人进行描述和运动学、动力学建模,让我对机器人有了更深的理解,也是弥补DH参数建模复杂的缺陷,虽然DH法只用4个参数,而旋量需要更多,但是它骚啊! 本文是我学习了转动的指数坐标表示的一个心得体会,如有问题请多多包涵。 2.指数坐标表示旋转矩阵 指数坐标可以用来表示求解旋转矩阵,其原理非常简单巧妙,需

要恰饭得嘛 2327

告别第三方插件:官方Fused Library如何重塑Android库的合并与发布流程

本文详细介绍了Android官方推出的Fused Library如何替代第三方fat-aar插件,优化Android库的合并与发布流程。通过原生支持、智能依赖管理等优势,Fused Library解决了版本兼容性、依赖传递等核心痛点,提供了更稳定高效的开发体验。文章还提供了迁移实操指南和工程实践建议,帮助开发者顺利过渡到官方方案。

weixin_42561040的博客 252

k8s集群Node节点管理:节点信息查看及节点label标签管理

如果是kubeadm安装,在node节点上管理时会报如下错误。就可以让node节点也可以实现kubectl命令管理。也可以加其它的多维度标签,用于不同的需要区分的场景。标签为华南区,A机房,测试环境,游戏业务。3, 在worker node节点验证。1, 在node节点的用户家目录创建。使用key加一个减号的写法来取消标签。2, 在master节点做如下操作。只要把master上的管理文件。拷贝到node节点的。

学亮编程手记 6347

用Matlab系统辨识工具箱搞定温控系统建模:从阶跃响应到传递函数(附完整代码)

本文详细介绍了如何使用Matlab系统辨识工具箱进行温控系统建模,从阶跃响应数据采集到传递函数参数辨识的全过程。通过实际案例和完整代码,帮助工程师快速掌握PID控制参数整定技巧,提升温控系统设计效率。特别适合单片机开发者和自动化控制工程师参考。

weixin_30736301的博客 309

K8S学习笔记之最小控制单元Pod (一)

K8S学习笔记之最小控制单元Pod (一)

AlgebraFly的博客 363

NTC热敏电阻选型快速指南

NTC(Negative Temperature Coefficient Thermistor)负温度系数热敏电阻器,是由锰Mn,镍Ni,铜Cu,一氧化碳Co等烧结而成的氧化物。其电阻值随温度的升高而减小,即具有复温度系数,故被称为负温度系数热敏电阻。本文对热敏电阻的应用场景,结构特点和选型参数进行总结。

fydar的博客 1293

高通平台 Android T 蓝牙技术全解析:A2DP 与 AVRCP 核心代码路径与交互流程

A2DP 接收端 - 连接流程(AVDTP 打开)

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 288

k8s 学习

1、 基本概念 k8s 概念 容器化集群管理系统,google开源 特性 自动装箱 自我修复(自愈能力),里面有一个机制是只有当容器全部启动后,才会对外提供服务 水平扩展,动态口扩容缩容 服务发现:做到节点调度和辅助均衡 滚动更新:当检测服务没有问题时,才提供服务 版本回滚 配置和秘钥管理:支持热部署 存储编排:支持网络、本地、公有云存储 批处理:提供一次任务,定时任务。满足批量数据锄禾和分析场景 k8s 架构 master(主控节点) api server:集群统一入口, restful

babata01的专栏 434

卷积层 (Convolutional Layer) 原理与代码实例讲解

卷积层 (Convolutional Layer) 原理与代码实例讲解 关键词:卷积层,卷积操作,滤波器,特征提取,神经网络 1. 背景介绍 卷积神经网络 (Convolutional N

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 769

K8s 学习笔记(一)——pod 详解

文章目录第一章 k8s 介绍应用部署方式的演变K8s 简介k8s 组件k8s 中的一些概念k8s 安装k8s 集群介绍k8s 安装方式k8s 部署应用k8s 资源管理资源管理介绍资源管理方式 第一章 k8s 介绍 应用部署方式的演变 传统部署: app 直接在操作系统之上进行部署。 虚拟化部署: 一台物理机上虚拟化多个虚拟机。 每个虚拟机都是独立的环境。 容器化部署: 与虚拟化相似,但共享了操作系统。 虚拟化部署,与容器化部署程序直接相互隔离,但是虚拟化每个隔离之间都需要操作系统,比较消耗系统的资源。

weixin_39802680的博客 6648

C#串口通信从入门到精通(5)——打开、关闭串口

本文详细介绍如何打开串口

qq_34059233的博客 6780

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

自动化运维之k8s——Kubernetes集群部署、pod、service微服务、kubernetes网络通信

在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年Borg系统运行管理着成千上万的容器应用。Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。自我修复。

hyy2795227684的博客 1517

visio安装包

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

k8s-pod控制器Deployment

在kubernetes中,Pod是最小的控制单元,但是kubernetes很少直接控制Pod,一般都是通过Pod控制 器来完成的。Pod控制器用于pod的管理,确保pod资源符合预期的状态,当pod的资源出现故障时,会 尝试进行重启或重建pod 一、名称空间 主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离 kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际...

heiwa110的博客 661

深度学习工具包 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")

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Kubernetes二 Kubernetes之实战以及pod详解

Kubernetes之pod详解 Kubernetes值pod生命周期 Kubernetes之pod调度的配置

东风麦芽糖 934

Kubernetes/k8s学习笔记(更新中...)

学习内容来自B站k8s教学视频,笔记仅作为自己学习过程记录,监督自己一天天变好 !

hidingin 1287

云原生 黑马Kubernetes教程(K8S教程)笔记——第一章 kubernetes介绍——Master集群控制节点、Node工作负载节点、Pod控制单元

kubernetes,是一个全新的基于容器技术的分布式架构领先方案,是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本,于2014年9月发布第一个版本,2015年7月发布第一个正式版本。

Dontla的博客 2623

【K8S】Kubernetes入门与安装配置

Kubernetes 是一个跨主机集群的开源的容器调度平台,它可以自动化应用容器的部署、扩展和操作 , 提供以容器为中心的基础架构。谷歌旗下开源软件,江湖人称K8S。

梦想做运维工程师的小青年 1095

理论+实战了解kubernetes及pod管理

在kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理kubernetes。kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务所谓的部署服务,其实就是在kubernetes集群中运行一个个的容器,并将指定的程序跑在容器中。kubernetes的最小管理单元是pod而不是容器,只能将容器放在Pod中,kubernetes一般也不会直接管理Pod,而是通过Pod控制器来管理Pod的。Pod中服务服务的访问是由kubernetes提供的Service。

strongjcl的博客 912

Windows11下安装k8s

Windows安装k8s

今天又是充满希望的一天 1万+

k8s详细教程

传统部署:互联网早期,会直接将应用程序部署在物理机上优点:简单,不需要其它技术的参与缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容易产生影响虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的一个环境优点:程序环境不会相互产生影响,提供了一定程度的安全性缺点:增加了操作系统,浪费了部分资源容器化部署:与虚拟化类似,但是共享了操作系统优点:可以保证每个容器拥有自己的文件系统、CPU、内存、进程空间等。

CECT151的博客 1万+

K8S学习笔记

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、k8s框架1.master组件2.node组件2.其他重要组件二、k8s框架的基本概念二、k8s集群环境规划和搭建总结 一、k8s框架 一个k8s集群主要是由控制节点(master)和工作节点(node)构成,每个节点上都会安装不同的组件。 1.master组件 master是集群的控制平面,负责集群的管理。 Api server:资源操作的唯一入口,接受用户输入的命令、提供认证、授权、API注册和发现等机制。 Con.

weixin_43820948的博客 877

kubernetes(k8s)

kubernetes集群主要是由控制节点(master)、工作节点(node)构成,每个节点上都会安装不同的组件。ApiServer:资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制Scheduler:负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上(算决策到哪个工作节点上)ControllerManager:负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等(安排)Etcd :负责存储集群中各种资源对象的信息。

qq_52951384的博客 858
上一篇: K8S学习笔记之最小控制单元Pod (一)
下一篇: K8S学习笔记之控制器-Replicaset
AlgebraFly
博客等级 码龄9年 260粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlgebraFly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值