一、认识Deployment控制器
  Deployment控制器为Pod和Replica Set控制器提供声明式的更新;你只需要在Deployment中描述你想要的目标状态是什么,Deployment Controller就会帮你将Pod和Relica Set控制器的实际状态改变到你的目标状态。你也可以定义一个新的Deployment,也可以创建一个新的替换旧的Deployment控制器。
  当我们在使用Deployment控制器做滚动更新时,Deployment控制器首先会创建出一个新的ReplicaSet控制器,在新的ReplicaSet控制器上创建出新的Pod;并且通过一定的频率,将老的ReplicaSet控制器上的Pod发送退出信号;但是无论如何更新,老的ReplicaSet控制器上的Pod副本数和新的ReplicaSet副本数必须要满足Deployment控制器所规定的数量;当老的ReplicaSet控制器中的Pod被用户访问完毕时,便会退出;新的用户访问会被调度到新的ReplicaSet控制器下的Pod上。

二、Deployment典型的应用场景如下

  • 使用Deployment控制器来创建ReplicaSet,ReplicationSet在后台创建Pod;检查启动状态,看它是成功还是失败。
  • 通过更新Deployment控制器中的PodTemplateSpec字段来声明Pod的新状态。这会创建一个新的ReplicationSet,Deployment控制器会按照自己所控制的速率将Pod从旧的ReplicaSet中移动到新的ReplicaSet中。
  • 如果当前状态不稳定,回滚到之前的Deployment revision,每次回滚都会更新Deployment的revision。
  • 支持动态扩缩容,扩容Deployment控制器以满足更高的负载。
  • 暂停Deployment控制器来应用PodTemplateSpec的多个修复,然后恢复上线。
  • 根据Deployment控制器的状态来判断上线是否失败了。
  • 定时清理不必要的ReplicaSet

三、Deployment使用操作

1)创建Deployment资源

]# cat deploy-demo.yaml
apiVersion: apps/v1
kind: Deployment
metadata: name: myapp-deploynamespace: default
spec: replicas: 3selector:matchLabels:app: myapprelease: canarytemplate:metadata:labels:app: myapprelease: canaryspec:containers:- name: myappimage: ikubernetes/myapp:v1imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80]# kubectl apply -f deploy-demo.yaml
deployment.apps/myapp-deploy created

2)查看Deployment资源

]# kubectl get deploy -o wide
NAME           READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES                 SELECTOR
myapp-deploy   3/3     3            3           2m35s   myapp        ikubernetes/myapp:v1   app=myapp,release=canary]# kubectl get rs -o wide
NAME                      DESIRED   CURRENT   READY   AGE     CONTAINERS   IMAGES                 SELECTOR
myapp-deploy-65fb6c8459   3         3         3       2m43s   myapp        ikubernetes/myapp:v1   app=myapp,pod-template-hash=65fb6c8459,release=canary]# kubectl get pods -o wide
NAME                            READY   STATUS    RESTARTS   AGE     IP            NODE    NOMINATED NODE   READINESS GATES
myapp-deploy-65fb6c8459-bkcbj   1/1     Running   0          3m49s   10.244.1.28   node1   <none>           <none>
myapp-deploy-65fb6c8459-c44fs   1/1     Running   0          3m49s   10.244.1.27   node1   <none>           <none>
myapp-deploy-65fb6c8459-fbbl7   1/1     Running   0          3m49s   10.244.2.10   node2   <none>           <none>

3)访问pod资源

]# curl 10.244.1.28
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>]# curl 10.244.1.27
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>]# curl 10.244.2.10
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

4)查看Deoloyment和ReplicaSet的详细信息

]# kubectl describe deployment myapp-deploy
Name:                   myapp-deploy
Namespace:              default
CreationTimestamp:      Sun, 26 Jul 2020 13:50:09 +0800
Labels:                 <none>
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=myapp,release=canary
Replicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:Labels:  app=myapprelease=canaryContainers:myapp:Image:        ikubernetes/myapp:v1Port:         80/TCPHost Port:    0/TCPEnvironment:  <none>Mounts:       <none>Volumes:        <none>
Conditions:Type           Status  Reason----           ------  ------Progressing    True    NewReplicaSetAvailableAvailable      True    MinimumReplicasAvailable
OldReplicaSets:  <none>
NewReplicaSet:   myapp-deploy-65fb6c8459 (3/3 replicas created)
Events:Type    Reason             Age    From                   Message----    ------             ----   ----                   -------Normal  ScalingReplicaSet  6m21s  deployment-controller  Scaled up replica set myapp-deploy-65fb6c8459 to 3]# kubectl describe rs myapp-deploy-65fb6c8459
Name:           myapp-deploy-65fb6c8459
Namespace:      default
Selector:       app=myapp,pod-template-hash=65fb6c8459,release=canary
Labels:         app=myapppod-template-hash=65fb6c8459release=canary
Annotations:    deployment.kubernetes.io/desired-replicas: 3deployment.kubernetes.io/max-replicas: 4deployment.kubernetes.io/revision: 1
Controlled By:  Deployment/myapp-deploy
Replicas:       3 current / 3 desired
Pods Status:    3 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:Labels:  app=myapppod-template-hash=65fb6c8459release=canaryContainers:myapp:Image:        ikubernetes/myapp:v1Port:         80/TCPHost Port:    0/TCPEnvironment:  <none>Mounts:       <none>Volumes:        <none>
Events:Type    Reason            Age   From                   Message----    ------            ----  ----                   -------Normal  SuccessfulCreate  8m8s  replicaset-controller  Created pod: myapp-deploy-65fb6c8459-c44fsNormal  SuccessfulCreate  8m8s  replicaset-controller  Created pod: myapp-deploy-65fb6c8459-bkcbjNormal  SuccessfulCreate  8m8s  replicaset-controller  Created pod: myapp-deploy-65fb6c8459-fbbl7

5)动态扩容Pod副本集

]# kubectl patch deployment myapp-deploy -p '{"spec":{"replicas":5}}'
deployment.apps/myapp-deploy patched]# kubectl get pods -w
NAME                            READY   STATUS    RESTARTS   AGE
myapp-deploy-65fb6c8459-bkcbj   1/1     Running   0          9m21s
myapp-deploy-65fb6c8459-c44fs   1/1     Running   0          9m21s
myapp-deploy-65fb6c8459-fbbl7   1/1     Running   0          9m21smyapp-deploy-65fb6c8459-2wkfq   0/1     Pending   0          0s
myapp-deploy-65fb6c8459-vtrzk   0/1     Pending   0          0s
myapp-deploy-65fb6c8459-2wkfq   0/1     Pending   0          0s
myapp-deploy-65fb6c8459-vtrzk   0/1     Pending   0          0s
myapp-deploy-65fb6c8459-2wkfq   0/1     ContainerCreating   0          0s
myapp-deploy-65fb6c8459-vtrzk   0/1     ContainerCreating   0          0s
myapp-deploy-65fb6c8459-vtrzk   1/1     Running             0          2s
myapp-deploy-65fb6c8459-2wkfq   1/1     Running             0          2s

Deployment控制器中的Pod资源副本集已经被动态的创建出来,并且不影响原有的Pod资源

6)动态缩容Pod副本集

]# kubectl patch deployment myapp-deploy -p '{"spec":{"replicas":2}}'
deployment.apps/myapp-deploy patched[root@master label]# kubectl get pods -w
NAME                            READY   STATUS    RESTARTS   AGE
myapp-deploy-65fb6c8459-2wkfq   1/1     Running   0          112s
myapp-deploy-65fb6c8459-bkcbj   1/1     Running   0          12m
myapp-deploy-65fb6c8459-c44fs   1/1     Running   0          12m
myapp-deploy-65fb6c8459-fbbl7   1/1     Running   0          12m
myapp-deploy-65fb6c8459-vtrzk   1/1     Running   0          112smyapp-deploy-65fb6c8459-c44fs   1/1     Terminating   0          13m
myapp-deploy-65fb6c8459-2wkfq   1/1     Terminating   0          3m16s
myapp-deploy-65fb6c8459-vtrzk   1/1     Terminating   0          3m16s
myapp-deploy-65fb6c8459-vtrzk   0/1     Terminating   0          3m19s
myapp-deploy-65fb6c8459-2wkfq   0/1     Terminating   0          3m19s
myapp-deploy-65fb6c8459-c44fs   0/1     Terminating   0          13m
myapp-deploy-65fb6c8459-2wkfq   0/1     Terminating   0          3m20s
myapp-deploy-65fb6c8459-2wkfq   0/1     Terminating   0          3m20s
myapp-deploy-65fb6c8459-c44fs   0/1     Terminating   0          13m
myapp-deploy-65fb6c8459-c44fs   0/1     Terminating   0          13m
myapp-deploy-65fb6c8459-vtrzk   0/1     Terminating   0          3m20s
myapp-deploy-65fb6c8459-vtrzk   0/1     Terminating   0          3m20s

Deployment控制器已经平滑退出了三个副本集,来满足用户所定义的Pod副本数量

7)滚动更新Pod镜像

]# kubectl set image deployment myapp-deploy myapp=ikubernetes/myapp:v2
deployment.apps/myapp-deploy image updated]# kubectl get rs -w
NAME                      DESIRED   CURRENT   READY   AGE
myapp-deploy-65fb6c8459   2         2         2       18mmyapp-deploy-559ff5c66    1         0         0       0s
myapp-deploy-559ff5c66    1         0         0       0s
myapp-deploy-559ff5c66    1         1         0       0s
myapp-deploy-559ff5c66    1         1         1       3s
myapp-deploy-65fb6c8459   1         2         2       18m
myapp-deploy-559ff5c66    2         1         1       3s
myapp-deploy-65fb6c8459   1         2         2       18m
myapp-deploy-559ff5c66    2         1         1       3s
myapp-deploy-559ff5c66    2         2         1       3s
myapp-deploy-65fb6c8459   1         1         1       18m
myapp-deploy-559ff5c66    2         2         2       4s
myapp-deploy-65fb6c8459   0         1         1       18m
myapp-deploy-65fb6c8459   0         1         1       18m
myapp-deploy-65fb6c8459   0         0         0       18m]# kubectl get pods -w
NAME                            READY   STATUS    RESTARTS   AGE
myapp-deploy-65fb6c8459-bkcbj   1/1     Running   0          15m
myapp-deploy-65fb6c8459-fbbl7   1/1     Running   0          15mmyapp-deploy-559ff5c66-gmgfn    0/1     Pending   0          0s
myapp-deploy-559ff5c66-gmgfn    0/1     Pending   0          0s
myapp-deploy-559ff5c66-gmgfn    0/1     ContainerCreating   0          0s
myapp-deploy-559ff5c66-gmgfn    1/1     Running             0          3s
myapp-deploy-65fb6c8459-bkcbj   1/1     Terminating         0          18m
myapp-deploy-559ff5c66-2sqtc    0/1     Pending             0          0s
myapp-deploy-559ff5c66-2sqtc    0/1     Pending             0          0s
myapp-deploy-559ff5c66-2sqtc    0/1     ContainerCreating   0          0s
myapp-deploy-65fb6c8459-bkcbj   0/1     Terminating         0          18m
myapp-deploy-559ff5c66-2sqtc    1/1     Running             0          1s
myapp-deploy-65fb6c8459-fbbl7   1/1     Terminating         0          18m
myapp-deploy-65fb6c8459-fbbl7   0/1     Terminating         0          18m
myapp-deploy-65fb6c8459-bkcbj   0/1     Terminating         0          18m
myapp-deploy-65fb6c8459-bkcbj   0/1     Terminating         0          18m
myapp-deploy-65fb6c8459-fbbl7   0/1     Terminating         0          18m
myapp-deploy-65fb6c8459-fbbl7   0/1     Terminating         0          18m]# kubectl get rs -o wide
NAME                      DESIRED   CURRENT   READY   AGE     CONTAINERS   IMAGES                 SELECTOR
myapp-deploy-559ff5c66    2         2         2       5m22s   myapp        ikubernetes/myapp:v2   app=myapp,pod-template-hash=559ff5c66,release=canary
myapp-deploy-65fb6c8459   0         0         0       24m     myapp        ikubernetes/myapp:v1   app=myapp,pod-template-hash=65fb6c8459,release=canary

通过监视ReplicaSet控制器和Pod资源,可以看见整个Deployment控制器更新的操作;首先Depliyment控制器会创建一个新的ReplicaSet控制器,并在此控制器上创建新的Pod资源对象,然后平滑退出旧的ReplicaSet控制器上的Pod资源;虽然Pod资源被创建调度到了新的ReplicaSet控制器上,但是老的ReplicaSet控制器并不会退出,因为用户可能会做回滚操作,Deployment通过此来做回滚历史版本。

8)访问新的Pod资源对象

]# kubectl get pods -o wide
NAME                           READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
myapp-deploy-559ff5c66-5zv6t   1/1     Running   0          23s   10.244.1.35   node1   <none>           <none>
myapp-deploy-559ff5c66-v9qdf   1/1     Running   0          24s   10.244.1.34   node1   <none>           <none>]# curl 10.244.1.35
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>]# curl 10.244.1.34
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>

9)查看滚动更新历史

]# kubectl rollout history deployment
deployment.apps/myapp-deploy
REVISION  CHANGE-CAUSE
1         <none>
2         <none>

10)回滚Pod镜像版本

]# kubectl rollout undo deployment/myapp-deploy --to-revision=1
deployment.apps/myapp-deploy rolled back]# kubectl get rs -w -o wide
NAME                      DESIRED   CURRENT   READY   AGE     CONTAINERS   IMAGES                 SELECTOR
myapp-deploy-559ff5c66    2         2         2       8m16s   myapp        ikubernetes/myapp:v2   app=myapp,pod-template-hash=559ff5c66,release=canary
myapp-deploy-65fb6c8459   0         0         0       27m     myapp        ikubernetes/myapp:v1   app=myapp,pod-template-hash=65fb6c8459,release=canarymyapp-deploy-65fb6c8459   0         0         0       29m     myapp        ikubernetes/myapp:v1   app=myapp,pod-template-hash=65fb6c8459,release=canary
myapp-deploy-65fb6c8459   1         0         0       29m     myapp        ikubernetes/myapp:v1   app=myapp,pod-template-hash=65fb6c8459,release=canary
myapp-deploy-65fb6c8459   1         0         0       29m     myapp        ikubernetes/myapp:v1   app=myapp,pod-template-hash=65fb6c8459,release=canary
myapp-deploy-65fb6c8459   1         1         0       29m     myapp        ikubernetes/myapp:v1   app=myapp,pod-template-hash=65fb6c8459,release=canary
myapp-deploy-65fb6c8459   1         1         1       29m     myapp        ikubernetes/myapp:v1   app=myapp,pod-template-hash=65fb6c8459,release=canary
myapp-deploy-559ff5c66    1         2         2       10m     myapp        ikubernetes/myapp:v2   app=myapp,pod-template-hash=559ff5c66,release=canary
myapp-deploy-65fb6c8459   2         1         1       29m     myapp        ikubernetes/myapp:v1   app=myapp,pod-template-hash=65fb6c8459,release=canary
myapp-deploy-559ff5c66    1         2         2       10m     myapp        ikubernetes/myapp:v2   app=myapp,pod-template-hash=559ff5c66,release=canary
myapp-deploy-65fb6c8459   2         1         1       29m     myapp        ikubernetes/myapp:v1   app=myapp,pod-template-hash=65fb6c8459,release=canary
myapp-deploy-65fb6c8459   2         2         1       29m     myapp        ikubernetes/myapp:v1   app=myapp,pod-template-hash=65fb6c8459,release=canary
myapp-deploy-559ff5c66    1         1         1       10m     myapp        ikubernetes/myapp:v2   app=myapp,pod-template-hash=559ff5c66,release=canary
myapp-deploy-65fb6c8459   2         2         2       29m     myapp        ikubernetes/myapp:v1   app=myapp,pod-template-hash=65fb6c8459,release=canary
myapp-deploy-559ff5c66    0         1         1       10m     myapp        ikubernetes/myapp:v2   app=myapp,pod-template-hash=559ff5c66,release=canary
myapp-deploy-559ff5c66    0         1         1       10m     myapp        ikubernetes/myapp:v2   app=myapp,pod-template-hash=559ff5c66,release=canary
myapp-deploy-559ff5c66    0         0         0       10m     myapp        ikubernetes/myapp:v2   app=myapp,pod-template-hash=559ff5c66,release=canary]# kubectl get pods -w
NAME                           READY   STATUS    RESTARTS   AGE
myapp-deploy-559ff5c66-2sqtc   1/1     Running   0          7m54s
myapp-deploy-559ff5c66-gmgfn   1/1     Running   0          7m57smyapp-deploy-65fb6c8459-ds9fg   0/1     Pending   0          0s
myapp-deploy-65fb6c8459-ds9fg   0/1     Pending   0          0s
myapp-deploy-65fb6c8459-ds9fg   0/1     ContainerCreating   0          0s
myapp-deploy-65fb6c8459-ds9fg   1/1     Running             0          1s
myapp-deploy-559ff5c66-2sqtc    1/1     Terminating         0          10m
myapp-deploy-65fb6c8459-q6kn9   0/1     Pending             0          0s
myapp-deploy-65fb6c8459-q6kn9   0/1     Pending             0          0s
myapp-deploy-65fb6c8459-q6kn9   0/1     ContainerCreating   0          0s
myapp-deploy-559ff5c66-2sqtc    0/1     Terminating         0          10m
myapp-deploy-65fb6c8459-q6kn9   1/1     Running             0          2s
myapp-deploy-559ff5c66-gmgfn    1/1     Terminating         0          10m
myapp-deploy-559ff5c66-gmgfn    0/1     Terminating         0          10m
myapp-deploy-559ff5c66-gmgfn    0/1     Terminating         0          10m
myapp-deploy-559ff5c66-gmgfn    0/1     Terminating         0          10m
myapp-deploy-559ff5c66-2sqtc    0/1     Terminating         0          10m
myapp-deploy-559ff5c66-2sqtc    0/1     Terminating         0          10m

11)查看滚动后状态与历史

]# kubectl rollout status deployment/myapp-deploy
deployment "myapp-deploy" successfully rolled out]# kubectl rollout history deployment
deployment.apps/myapp-deploy
REVISION  CHANGE-CAUSE
2         <none>
3         <none>]# kubectl get rs -o wide
NAME                      DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES                 SELECTOR
myapp-deploy-559ff5c66    0         0         0       14m   myapp        ikubernetes/myapp:v2   app=myapp,pod-template-hash=559ff5c66,release=canary
myapp-deploy-65fb6c8459   2         2         2       32m   myapp        ikubernetes/myapp:v1   app=myapp,pod-template-hash=65fb6c8459,release=canary

12)访问回滚后的Pod资源

]# kubectl get pods -o wide
NAME                            READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
myapp-deploy-65fb6c8459-djg6k   1/1     Running   0          54s   10.244.2.12   node2   <none>           <none>
myapp-deploy-65fb6c8459-jp7hc   1/1     Running   0          53s   10.244.1.36   node1   <none>           <none>]# curl 10.244.2.12
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>]# curl 10.244.1.36
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

13)暂停与恢复Deployment的回滚

]# kubectl rollout undo deployment/myapp-deploy --to-revision=4
deployment.apps/myapp-deploy rolled back]# kubectl rollout pause deployment/myapp-deploy
deployment.apps/myapp-deploy paused]# kubectl rollout resume deployment/myapp-deploy
deployment.apps/myapp-deploy resumed

Deployment的清理策略:
  可以通过设置.spec.revisonHistoryLimit项来指定Deployment控制器最多保留多少revision历史记录,默认Deployment控制器会保留所有的revision版本;如果该项设置为0,则Deployment控制器就不允许做回滚操作了。

Kubernetes学习之Deployment控制器相关推荐

  1. Kubernetes学习(六)—— Pod控制器

    本章节主要介绍常用的Pod控制器. 1. Pod控制器介绍 在kubernetes中,按照pod的创建安方式可以将其分为两类: 自主式pod:kubernetes直接创建出来的pod,这种pod删除后 ...

  2. Kubernetes学习笔记(二):Pod控制器详解:资源元信息、ReplicaSet、Deployment、DaemonSet、Job、CronJob

    1.资源元信息 Kubernetes的资源对象组成:主要包括了Spec.Status两部分.其中Spec部分用来描述期望的状态,Status部分用来描述观测到的状态 Kubernetes的元数据部分. ...

  3. Kubernetes Deployment控制器(二十)

    前面我们学习了 ReplicaSet 控制器,了解到该控制器是用来维护集群中运行的 Pod 数量的,但是往往在实际操作的时候,我们反而不会去直接使用 RS,而是会使用更上层的控制器,比如我们今天要学习 ...

  4. Kubernetes 学习总结(19)—— Kubernetes 集群管理平台如何选择?Rancher vs KubeSphere

    前言 Kubernetes(K8s)集群管理平台都是基于 Kubernetes 提供功能,可以说他们是在 K8s 的基础上封装了一层更为友好的操作方式.他们都是为了降低 k8s 集群运维复杂度,降低运 ...

  5. Kubernetes学习总结(12)—— 学习 kubernetes 的10个技巧或建议

    一.学 GO 语言 Kubernetes是基于 GO 编写的,所有的组件都是基于 GO 编写的,kubernetes甚至使用GO编写了一个客户端.学习使用 GO 语言编写的 Kubernetes 客户 ...

  6. Kubernetes学习之路目录

    Kubernetes基础篇 环境说明 版本说明 系统环境 Centos 7.2 Kubernetes版本 v1.11.2 Docker版本 v18.09 Kubernetes学习之路(一)之概念和架构 ...

  7. Kubernetes学习二:资源管理及入门实战

    此部分上接kubernetes学习一:https://blog.csdn.net/weixin_43155804/article/details/125831675?spm=1001.2014.300 ...

  8. Kubernetes学习笔记-未整理

    Kubernetes学习笔记 标签:Kubernetes 学习笔记 原文:https://github.com/wtysos11/NoteBook/blob/master/微服务/Kubernetes ...

  9. kubernetes 学习记录

    Kubernetes 学习记录 一.`kubernetes` 入门学习 1.1 部署第一个 `Deployment` 1.2 查看资源的命令 1.3 发布应用程序 1.3.1 暴漏服务的三种模式 1. ...

最新文章

  1. PHP下载/采集远程图片到本地
  2. [置顶]       安全-用户身份验证
  3. python爬虫框架怎么安装_celery如何在python爬虫中安装?
  4. 点云赋值 PointCloudT::Ptr 运行时崩溃
  5. Oracle 12c应用连接VIP轮训负载均衡?
  6. 升级浏览器_升级Unity 8,优化系统组件,添加键盘手势,升级浏览器,UbuntuTouch最大的一次更新
  7. 腾讯钟翔平:以数字技术驱动,做智慧交通共建者
  8. 【C#】通过正则表达式对TextBox进行校验
  9. 值传递和引用传递_C++ 中的值传递和引用传递
  10. 新手学c还是java_80x86汇编小站,新手学c还是java
  11. 【AIQ合集】人工智能技术学习资料年度整理大合集电子书 PDF下载
  12. 什么是区块链,可能是史上最简单易懂的讲解
  13. 如何查询iPhone手机的序列号?苹果序列号查询方法
  14. python getsize函数,Python getsize函数
  15. Redis 9种数据结构
  16. 什么是vue-resource?
  17. office2010 打开报错 无法访问您试图使用的功能所在的网络位置,安装包ProPlusrWW.msi
  18. 投影仪服务器注册商标属于哪类,投影仪商标注册第几类?附:好听的投影仪商标名字...
  19. OVS:网络环路 广播风暴解决方案
  20. arduino uno + tb6600 + 42步进电机 自制自动绕线机

热门文章

  1. c++中的ignore和tie
  2. 基于php校园失物招领,基于全景图的校园失物招领系统
  3. 半导体中的电子状态与能带
  4. Compuware Softice的烦恼
  5. 第八届中国高等院校设计作品大赛启动
  6. L1-6 喝嘤料 (15 分)
  7. svnsync报错Failed to get lock on destination repos解决办法
  8. Firefly的Gevent重要迭代版本alpha0.1.2推出!
  9. 波段选择方法综述:Hyperspectral Band Selection A review
  10. ip地址+斜杠数字含义