k8s之工作负载控制器的应用

  • 1.k8s工作负载控制器是什么
  • 2. Deployment介绍
    • 2.1 deployment的资源清单文件
    • 2.2 Deployment:滚动升级
    • 2.3 Deployment:水平扩容
  • 2.4 Deployment:回滚
    • 2.5 Deployment:删除
    • 2.6 Deployment:ReplicaSet
  • 3. DameonSet
  • 4. Job 和 CronJob

1.k8s工作负载控制器是什么

工作负载控制器(Workload Controllers)是K8s的一个抽象概念,用于更高级层次对象,部署和管理Pod。

  • 常用工作负载控制器:

    • Deployment :无状态应用部署
    • StatefulSet :有状态应用部署
    • DaemonSet :确保所有Node运行同一个Pod
    • Job :一次性任务
    • Cronjob :定时任务
  • 控制器的作用:

    • 管理Pod对象
    • 使用标签与Pod关联
    • 控制器实现了Pod的运维,例如滚动更新、伸缩、副本管理、维护Pod状态等。
  • 示例:

2. Deployment介绍

为了更好地解决服务编排的问题,k8s在V1.2版本开始,引入了deployment控制器,值得一提的是,这种控制器并不直接管理pod,

而是通过管理replicaset来间接管理pod,即:deployment管理replicaset,replicaset管理pod。所以deployment比replicaset的功能更强大。


deployment的主要功能有下面几个:

  • 支持replicaset的所有功能
  • 支持发布的停止、继续
  • 支持版本的滚动更新和版本回退

2.1 deployment的资源清单文件

// 示例:

apiVersion: apps/v1  #版本号
kind: Deployment  #类型
metadata:    #元数据name:    #rs名称namespace:   #所属命名空间labels:   #标签controller: deploy
spec:   #详情描述replicas:  #副本数量revisionHistoryLimit: #保留历史版本,默认是10paused: #暂停部署,默认是falseprogressDeadlineSeconds: #部署超时时间(s),默认是600strategy: #策略type: RollingUpdates  #滚动更新策略rollingUpdate:  #滚动更新maxSurge: #最大额外可以存在的副本数,可以为百分比,也可以为整数maxUnavaliable: #最大不可用状态的pod的最大值,可以为百分比,也可以为整数selector:  #选择器,通过它指定该控制器管理哪些podmatchLabels:   #Labels匹配规则app: nginx-podmatchExpressions:   #Expression匹配规则- {key: app, operator: In, values: [nginx-pod]}template:  #模板,当副本数量不足时,会根据下面的模板创建pod副本metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:1.17.1ports:- containerPort: 80
[root@master ~]# cat test.yaml
---
apiVersion: apps/v1   //api的版本信息
kind: Deployment  //类型
metadata:name: test  //容器名称namespace: default  //使用默认的名称空间
spec:  replicas: 3  //三个容器副本selector:matchLabels:app: busybox  //容器标签template:  metadata: labels:app: busyboxspec:containers:- name: b1image: busybox  //使用的镜像command: ["/bin/sh","-c","sleep 9000"][root@master ~]# kubectl apply -f test.yaml
deployment.apps/amu created[root@master ~]# kubectl get pod
NAME                   READY   STATUS              RESTARTS   AGE
test-864fd4fb54-4hz2h   1/1     Running             0          1ms
test-864fd4fb54-j9ht4   1/1     Running             0          1m
test-864fd4fb54-w485p   1/1     Running   0          1m

2.2 Deployment:滚动升级

  • kubectl apply -f xxx.yaml
  • kubectl set image deployment/web nginx=nignx:1.16
  • kubectl edit deployment/web

滚动升级:K8s对Pod升级的默认策略,通过使用新版本Pod逐步更新旧版本Pod,实现停机发布,用户无感知。

// 滚动更新策略
spec: replicas: 3revisionHistoryLimit: 10selector:matchLabels:app: webstrategy:rollingUpdate: maxSurge: 25%maxUnavaliable: 25%type: RollingUpdate
  • maxSurge:滚动更新过程中最大Pod副本数,确保在更新时启动的Pod数量比期望(replicsa)Pod数量最大多出25%

  • maxUnavailable:滚动更新过程中最大不可用Pod副本数,确保在更新时最大25%Pod数量不可用,即确保75%Pod数量是可用状态

实例:

// 创建四个httpd容器
[root@master ~]# cat test1.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata: name: webnamespace: default
spec: replicas: 4selector: matchLabels: app: httpdtemplate: metadata: labels: app: webspec: containers:- name: httpdimage: gaofan1225/httpd:v0.2imagePullPolicy: IfNotPresent[root@master ~]# kubectl apply -f test1.yaml
deployment.apps/web created[root@master ~]# kubectl get pods
web-5c688b9779-7gi6t  1/1     Running             0          50s
web-5c688b9779-9unfy   1/1     Running             0          50s
web-5c688b9779-ft69k   1/1     Running             0          50s
web-5c688b9779-vmlkg   1/1     Running             0          50s[root@master ~]# cat test1.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata: name: webnamespace: default
spec: replicas: 4strategy: rollingUpdate:  // 滚动更新maxSurge: 25%             // 最大可超出25%maxUnavailable: 25%     // 最多不能使用25%type: RollingUpdateselector: matchLabels: app: httpdtemplate: metadata: labels: app: httpdspec: containers:- name: httpdimage: dockerimages123/httpd:v0.2imagePullPolicy: IfNotPresent[root@master ~]# kubectl apply -f test1.yaml
deployment.apps/web configured// 暂未发生变化
[root@master ~]# kubectl get pods
NAME                   READY   STATUS      RESTARTS   AGE
web-5c697b9779-7gi6t   1/1     Running     0          8m
web-5c697b9779-9unfy   1/1     Running     0          8m
web-5c697b9779-ft69k   1/1     Running     0          8m
web-5c697b9779-vmlkg   1/1     Running     0          8m// 将镜像修改为httpd,image=httpd
// 再次应用
[root@master ~]# kubectl apply -f test1.yaml
deployment.apps/web configured// 我们发现删除三个,启动了两个新的和一个旧的web
[root@master ~]# kubectl get pods
NAME                   READY   STATUS                RESTARTS       AGE
web-5d688b9779-7gi6t   1/1     Terminating           0              18m
web-5d688b9779-9unfy   0/1     Running               0              20m
web-5d688b9779-ft69k   0/1     Terminating           0              20m
web-5d688b9779-vmlkg   0/1     Terminating           0              20m
web-f8bcfc88-vddfk     0/1     Running               0              80s
web-f8bcfc88-yur8y     0/1     Running               0              80s
web-f8bcfc88-t9ryx     1/1     ContainerCreating     0              55s
web-f8bcfc88-k07k     1/1     ContainerCreating      0              56s// 最后变为4个新
[root@master ~]# kubectl get pods
NAME                   READY   STATUS      RESTARTS   AGE
web-f8bcfc88vddfk     1/1     Running     0          80s
web-f8bcfc88-yur8y     1/1     Running     0          80s
web-f8bcfc88-t9ryx     1/1     Running     0          55s
web-f8bcfc88-k07k      1/1     Running     0          56s

2.3 Deployment:水平扩容

  • 修改yanl里replicas值,再apply
  • kubectl scale deployment web --replicas=10
[root@master ~]# kubectl get pods
NAME                   READY   STATUS      RESTARTS   AGE
web-f8bcfc88vddfk     1/1     Running     0          80s
web-f8bcfc88-yur8y     1/1     Running     0          80s
web-f8bcfc88-t9ryx     1/1     Running     0          55s
web-f8bcfc88-k07k      1/1     Running     0          56s// 创建10个容器
[root@master ~]# cat test1.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata: name: webnamespace: default
spec: replicas: 10strategy:rollingUpdate:maxSurge: 55%maxUnavailable: 50%type: RollingUpdate
selector: matchLabels: app: httpdtemplate: metadata: labels: app: httpdspec: containers:- name: httpdimage: dockerimages123/httpd:v0.2imagePullPolicy: IfNotPresent[root@master ~]# kubectl apply -f test1.yaml
deployment.apps/web created
[root@master ~]# kubectl get pods
NAME                   READY   STATUS      RESTARTS   AGE
web-5c688b9779-pb4x8   1/1     Running     0          50s
web-5c688b9779-kf8vq   1/1     Running     0          50s
web-5c688b9779-ki8s3   1/1     Running     0          50s
web-5c688b9779-o9gx6   1/1     Running     0           50s
web-5c688b9779-i8g4w   1/1     Running     0          50s
web-5c688b9779-olgxt   1/1     Running     0           50s
web-5c688b9779-khctw   1/1     Running     0           50s
web-5c688b9779-ki8d6   1/1     Running     0         50s
web-5c688b9779-i9g5s   1/1     Running     0          50s
web-5c688b9779-jsj8k   1/1     Running     0           50s// 修改replicas值,实现水平扩缩容
[root@master ~]# vim test1.yaml
replicas: 3[root@master ~]# kubectl get pods
NAME                   READY   STATUS      RESTARTS   AGE
web-5c688b9779-pb4x8   1/1     Running     0          50s
web-5c688b9779-kf8vq   1/1     Running     0          50s
web-5c688b9779-ki8s3   1/1     Running     0          50s
web-5c688b9779-o9gx6   1/1     Running     0           50s
web-5c688b9779-i8g4w   1/1     Running     0          50s
web-5c688b9779-olgxt   1/1     Running     0           50s
web-5c688b9779-khctw   1/1     Running     0           50s
web-5c688b9779-ki8d6   1/1     Running     0         50s
web-5c688b9779-i9g5s   1/1     Running     0          50s
web-5c688b9779-jsj8k   1/1     Running     0           50s
web-i9olh676-jdkrg     0/1     ContainerCreating              0          8s
web-i9olh676-opy5b     0/1     ContainerCreating              0          8s
web-i9olh676-k8st4     0/1     ContainerCreating              0          8s[root@master ~]# kubectl get pods
NAME                   READY   STATUS      RESTARTS   AGE
web-i9olh676-jdkrg     1/1     Running     0          2m19s
web-i9olh676-opy5b     1/1     Running     0          2m19s
web-i9olh676-k8st4    1/1     Running     0          2m19s

2.4 Deployment:回滚

kubectl rollout history deployment/web // 查看历史发布版本
kubectl rollout undo deployment/web // 回滚上一个版本
kubectl rollout undo deployment/web --to-revision=2 // 回滚历史指定版本

[root@master ~]# kubectl rollout history deploy/web
deployment.apps/web
REVISION  CHANGE-CAUSE
1         <none>
2         <none>// 如果你回滚的是当前版本,就会跳过
[root@master ~]# kubectl rollout undo deploy/web --to-revision 2
deployment.apps/web skipped rollback (current template already matches revision 2)// 回滚第一个版本
[root@master ~]# kubectl rollout undo deploy/web --to-revision 1
deployment.apps/web rolled back// 回滚成功
[root@master ~]# kubectl rollout history deploy/web
deployment.apps/web
REVISION  CHANGE-CAUSE
2         <none>
3         <none>

2.5 Deployment:删除

kubectl delete deploy/web
kubectl delete svc/web
kubectl delete pods/web

// 创建
[root@master ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created[root@master ~]# kubectl get deploy
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           35s
web     3/3     3            3           20m// 删除一个pod
[root@master ~]# kubectl delete deploy/nginx
deployment.apps "nginx" deleted[root@master ~]# kubectl get deploy
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
web    3/3     3            3           20m// 删除所有
[root@master ~]# kubectl delete deployment --all
deployment.apps "web" deleted[root@master ~]# kubectl get deployment
No resources found in default namespace.

2.6 Deployment:ReplicaSet

ReplicaSet控制器用途:

  • Pod副本数量管理,不断对比当前Pod数量与期望Pod数量
  • Deployment每次发布都会创建一个RS作为记录,用于实现回滚
[root@master ~]# kubectl get rs
NAME             DESIRED   CURRENT   READY   AGE
web-5d7hy50s8a   3         3         3       6m4s
web-f8bki8h5     0         0         0       6m25skubectl rollout history deployment web // 版本对应RS记录[root@master ~]# kubectl rollout history deployment web
deployment.apps/web
REVISION  CHANGE-CAUSE
2         <none>
3         <none>
[root@master ~]# kubectl get rs
NAME             DESIRED   CURRENT   READY   AGE
web-5d7hy50s8a   3         3         3       6m4s
web-f8bki8h5     0         0         0       6m25s// 将镜像换为httpd,其他变
[root@master ~]# kubectl apply -f test2.yaml  //再次应用
deployment.apps/web configured[root@master ~]# kubectl get pods
web-5d688b9745-dpmsd   1/1     Terminating         0          9m
web-5d688b9745-q6dls   1/1     Terminating         0          9m
web-i80gjk6t-ku6f4     0/1     ContainerCreating   0          5s
web-i80gjk6t-9j5tu     1/1     Running             0          5s
web-i80gjk6t-9ir4h     1/1     Running             0          5s[root@master ~]# kubectl get rs
NAME             DESIRED   CURRENT   READY   AGE
web-5d7hy50s8a   0         0         0       12m
web-f8bki8h5     3         3         3       12m

ReplicaSet:由Deployment里面的relicas的参数控制的

[root@node2 ~]# docker ps | grep web
4c938ouhc8j0   dabutse0c4fy                                        "httpd-foreground"       13 seconds ago   Up 12 seconds             k8s_httpd_web-f8bcfc88-4rkfx_default_562616cd-1552-4610-bf98-e470225e4c31_1
452713eeccad   registry.aliyuncs.com/google_containers/pause:3.6   "/pause"                 5 minutes ago    Up 5 minutes              k8s_POD_web-f8bcfc88-4rkfx_default_562616cd-1552-4610-bf98-e470225e4c31_0// 删除一个
[root@node2 ~]# docker kill 4c938ad0c01d
8htw4ad0cu8s[root@master ~]# kubectl get rs
NAME             DESIRED   CURRENT   READY   AGE
web-5d7hy50s8a   0         0         0       15m
web-f8bki8h5     3         3         3       15m[root@master ~]# kubectl get rs
NAME             DESIRED   CURRENT   READY   AGE
web-5d7hy50s8a   0         0         0       16m
web-f8bki8h5     3         3         3       18m[root@master ~]# kubectl get pods
NAME                   READY   STATUS      RESTARTS      AGE
web-o96gb3sm-9ht4c     1/1     Running     2 (80s ago)   6m32s
web-o96gb3sm-ki85s     1/1     Running     0             6m32s
web-o96gb3sm-ku5sg     1/1     Running     0             6m32s

3. DameonSet

DameonSet功能:

  • 在每一个Node上运行一个Pod
  • 新加入的Node也同样会自动运行一个Pod
// 删除资源,容器也会被删除
[root@master ~]# kubectl delete -f test1.yml
deployment.apps "web" deleted[root@master ~]# cat daemon.yml
---
apiVersion: apps/v1
kind: DaemonSet                 // 类型是DaemonSet
metadata:name: filebeatnamespace: kube-system
spec:selector:matchLabels:name: filebeattemplate:metadata:labels:name: filebeatspec:containers:             // 记录日志的镜像- name: logimage: elastic/filebeat:7.16.2imagePullPolicy: IfNotPresent[root@master ~]# kubectl get pods -n kube-system
NAME                             READY   STATUS              RESTARTS         AGE
coredns-6d8c4cb4d-9m5jg          1/1     Running             14 (4h36m ago)   6d4h
coredns-6d8c4cb4d-mp662          1/1     Running             14 (4h36m ago)   6d4h
etcd-master                      1/1     Running             13 (3h30m ago)   6d4h
kube-apiserver-master            1/1     Running             13 (3h30m ago)   6d4h
kube-controller-manager-master   1/1     Running             14 (3h30m ago)   6d4h
kube-flannel-ds-g9jsh            1/1     Running             9 (3h30m ago)   6d1h
kube-flannel-ds-qztxc            1/1     Running             9 (3h30m ago)   6d1h
kube-flannel-ds-t8lts            1/1     Running             13 (3h30m ago)   6d1h
kube-proxy-q2jmh                 1/1     Running             12 (3h30mago)   6d4h
kube-proxy-r28dn                 1/1     Running             13 (3h30m ago)   6d4h
kube-proxy-x4cns                 1/1     Running             13 (3h30m ago)   6d4h
kube-scheduler-master            1/1     Running             15 (3h30m ago)   6d4h[root@master ~]# kubectl apply -f daemon.yaml
deployment.apps/filebeat created[root@master ~]# kubectl get pods -n kube-system
NAME                             READY   STATUS              RESTARTS         AGE
coredns-6d8c4cb4d-9m5jg          1/1     Running             14 (4h36m ago)   6d4h
coredns-6d8c4cb4d-mp662          1/1     Running             14 (4h36m ago)   6d4h
etcd-master                      1/1     Running             13 (3h30m ago)   6d4h
kube-apiserver-master            1/1     Running             13 (3h30m ago)   6d4h
kube-controller-manager-master   1/1     Running             14 (3h30m ago)   6d4h
kube-flannel-ds-g9jsh            1/1     Running             9 (3h30m ago)   6d1h
kube-flannel-ds-qztxc            1/1     Running             9 (3h30m ago)   6d1h
kube-flannel-ds-t8lts            1/1     Running             13 (3h30m ago)   6d1h
kube-proxy-q2jmh                 1/1     Running             12 (3h30mago)   6d4h
kube-proxy-r28dn                 1/1     Running             13 (3h30m ago)   6d4h
kube-proxy-x4cns                 1/1     Running             13 (3h30m ago)   6d4h
kube-scheduler-master            1/1     Running             15 (3h30m ago)   6d4h
filebeat-oiugt                   1/1     Running             0                50s
filebeat-9jhgt                 1/1     Running               0                50s[root@master ~]# kubectl get pods -n kube-system -o wide
NAME                             READY   STATUS    RESTARTS         AGE    IP               NODE                NOMINATED NODE   READINESS GATES
filebeat-9ck6z                   1/1     Running   0                3m9s   10.242.2.215     node2.example.com   <none>           <none>
filebeat-d2psf                   1/1     Running   0                3m9s   10.242.1.161     node1.example.com   <none>           <none>

4. Job 和 CronJob

Job分为普通任务(Job)和定时任务(CronJob)

  • 一次性执行(Job)
  • 定时任务(CronJob)
    应用场景:离线数据处理,视频解码等业务(Job)
    应用场景:通知、备份(CronJob)
[root@master ~]# cat job.yaml
apiVersion: batch/v1
kind: Job
metadata:name: test
spec:template: spec: containers:- name: testimage: perlcommand: ["perl","-Mbignum=bpi","-wle","print bpi(2000)"]restartPolicy: NeverbackoffLimit: 4[root@master ~]# kubectl apply -f job.yaml
job.batch/test created[root@master ~]# kubectl get pods -o wide
NAME       READY   STATUS              RESTARTS   AGE     IP       NODE                NOMINATED NODE   READINESS GATES
test-27xrt   0/1     ContainerCreating   0          10m28s   <none>   node2.example.com   <none>           <none>[root@node2 ~]# docker ps | grep test
e55ac8842c89   registry.aliyuncs.com/google_containers/pause:3.6   "/pause"                 6 minutes ago   Up 6 minutes             k8s_POD_test-27xrt_default_698b4c91-ef54-4fe9-b62b-e0abcujhts5o90_9[root@master ~]# kubectl get pods
NAME       READY   STATUS              RESTARTS   AGE
test-27xrt   0/1     Completed           0          15m[root@node2 ~]#  docker images | grep perl
perl                                                 latest    f9596eddf06f   5 days ago     568MB[root@master ~]# kubectl describe job/test
Pods Statuses:    0 Active / 1 Succeeded / 0 Failed 
[root@master ~]# kubelet --version
Kubernetes v1.23.1[root@master ~]# cat cronjob.yaml
---
apiVersion: batch/v1
kind: CronJob
metadata:name: hello
spec:schedule: "*/1****"jobTemplate: spec: template: spec: containers:- name: helloimage: busyboxargs:- /bin/sh- -c- date;echo Hello worldrestartPolicy: OnFailure[root@master ~]# kubectl apply -f cronjob.yaml
Warning: batch/v1beta1 CronJob is deprecated in v1.21+, unavailable in v1.25+; use batch/v1 CronJob[root@master ~]# kubectl get pods
NAME                   READY   STATUS      RESTARTS   AGE
hello-kihtwoab-kox6w   0/1     Completed   0          5m42s
hello-kihtwoab-o96vw   0/1     Completed   0          90s
hello-kihtwoab-kus6n  0/1     Completed   0          76s[root@master ~]# kubectl get pods
NAME                   READY   STATUS      RESTARTS   AGE
hello-kihtwoab-kox6w   0/1     Completed   0             6m26s
hello-kihtwoab-o96vw   0/1     Completed   0             2m11s
hello-kihtwoab-kus6n  0/1     Completed   0               2m10s
hello-kuhdoehs-ki8gr   0/1     ContainerCreating   0          36s[root@master ~]# kubectl get pods
NAME                   READY   STATUS      RESTARTS   AGE
hello-kihtwoab-o96vw   0/1     Completed   0             2m11s
hello-kihtwoab-kus6n  0/1     Completed   0               2m10s
hello-kuhdoehs-ki8gr   0/1   Completed   0                45s[root@master ~]# kubectl describe cronjob/hello
Events:Type    Reason            Age                     From                Message----    ------            ----                    ----                -------Normal  SuccessfulCreate  5m36s (x133 over 135m)  cronjob-controller  (combined from similar events): Created job hello-kisgejxbw// batch/v1beta1 CronJob 在 v1.21+ 中被弃用,在 v1.25+ 中不可用; 使用批处理/v1 CronJob。

k8s之工作负载控制器的应用相关推荐

  1. K8S之Deployment控制器管理应用(十一)

    Deployment介绍 Deployment是最常用的K8s工作负载控制器(Workload Controllers), 是K8s的一个抽象概念,用于更高级层次对象,部署和管理Pod. Deploy ...

  2. 还不会用 K8s 集群控制器?那你会用冰箱吗?(多图详解)

    作者 | 阿里云售后技术专家 声东 导读:当我们尝试去理解 K8s 集群工作原理的时候,控制器(Controller)肯定是一个难点.这是因为控制器有很多,具体实现大相径庭:且控制器的实现用到了一些较 ...

  3. Kubernetes K8S之资源控制器Job和CronJob详解

    Kubernetes的资源控制器Job和CronJob详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...

  4. Kubernetes K8S之资源控制器Daemonset详解

    Kubernetes的资源控制器Daemonset详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C/ ...

  5. k8s核心技术-Controller控制器_Controller(Job和Cronjob)_一次任务和定时任务---K8S_Google工作笔记0035

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们来说一下这个k8s支持的这样一个功能,就是k8s支持,job,也就是任务,也就是说 我们有 ...

  6. 理论+实操:K8S搭建dns内部服务与控制器controlls五种模式

    文章目录 故障排查 一:控制器的类型 一: pod与控制器之间的关系 二:deployment 2.1 deployment概述 2.1 演示 2.1.1 编写yaml文件 2.1.2 创建pod 2 ...

  7. k8s控制器Deployment使用详解

    前言 在上一篇我们聊了k8s中各种控制器的使用,本篇将以控制器中比较常用的一种控制器Deployment 进行详细的说明. 一.Deployment 简介 为了更好解决服务编排的问题,kubernet ...

  8. 工作负载型控制器的应用

    工作负载型控制器的应用 工作负载控制器(Workload Controllers)时kubernetes的一个抽象概念,用于更高层次对象,部署和管理pod. 常用工作负载控制器: Deployment ...

  9. K8s 集群节点在线率达到 99.9% 以上,扩容效率提升 50%,我们做了这 3 个深度改造

    作者 | 张振(守辰)阿里云云原生应用平台高级技术专家 导读:2019 年阿里巴巴核心系统 100% 以云原生方式上云,完美地支撑了 双11 大促.这次上云的姿势很不一般,不仅是拥抱了 Kuberne ...

最新文章

  1. 从概念到技术,打通「中台」的任督二脉,别再说不知道中台是什么
  2. 转:MySQL性能优化的最佳20+条经验
  3. 计网 - 流和缓冲区:缓冲区的 flip 是怎么回事?
  4. QT学习:网络应用开发练习(文件下载)
  5. 聊聊高并发(二十四)解析java.util.concurrent各个组件(六) 深入理解AQS(四)
  6. R语言观察日志(part2)--preProcess函数
  7. 刷新:重新发现.NET与未来
  8. C/C++:Winsock网络编程—ping命令的简单实现
  9. 信息学奥赛一本通 1156:求π的值
  10. C++ Primer 第4章数组和指针
  11. Apicloud——关于索引列表
  12. DMAR(DMA remapping)与 IOMMU
  13. Simulink中Simscape—Fluids模块(原Simhydraulics)学习记录
  14. JAVA从文件中取出特定的_从Java中的文本文件读取特定的行
  15. 70道经典Android面试题加答案--重要知识点几乎都涉及到了
  16. 15款13英寸低配mbp的外接显示器选择
  17. 基于3DGIS+BIM的房屋出售管理系统
  18. QQ空间爬虫分享(2016年11月18日更新)
  19. Ubuntu下观看B站视频
  20. 保龄球积分c语言程序,C语言保龄球积分.doc

热门文章

  1. JVM工具之jstat
  2. 程序大佬用的电脑配置终于曝光了,难怪
  3. java matcher find,java - 无尽循环matcher.find()
  4. pytorch创建模型并训练(初探文本分类问题)
  5. 数据挖掘--决策树ID3算法(例题)
  6. 十五天学会Autodesk Inventor,看完这一系列就够了(终章),答疑
  7. 转:有一个笑话叫做:工作和生活平衡
  8. 关于如何挣钱的35条建议!万字长文
  9. 国产手机参与华为鸿蒙系统,华为鸿蒙OS系统再获力挺!又一国产手机巨头官宣:将联动华为?...
  10. 绝地服务器维护7月5日,绝地求生7月5日更新到几点 更新维护公告