您当前的位置:首页 > 网站建设 > 网站维护
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax | jQuery |

K8S中五种控制器的介绍以及使用

51自学网 2022-07-04 11:27:36
  网站维护

k8s的控制器类型

Kubernetes中内建了很多controller(控制器),这些相当于一个状态机,用来控制Pod的具体状态和行为

Deployment:适合无状态的服务部署

StatefullSet:适合有状态的服务部署

DaemonSet:一次部署,所有的node节点都会部署,例如一些典型的应用场景:

运行集群存储 daemon,例如在每个Node上运行 glusterd、ceph

在每个Node上运行日志收集 daemon,例如 fluentd、 logstash

在每个Node上运行监控 daemon,例如 Prometheus Node Exporter

Job:一次性的执行任务

Cronjob:周期性的执行任务

总体来说,K8S有五种控制器,分别对应处理无状态应用、有状态应用、守护型应用和批处理应用

pod与控制器之间的关系

controllers:在集群上管理和运行容器的对象通过label-selector相关联

Pod通过控制器实现应用的运维,如伸缩,升级等

Deployment(无状态化应用)

应用场景:web服务

Deployment中文意思为部署、调度,通过Deployment我们能操作RS(ReplicaSet),你可以简单的理解为它是一种通过yml文件的声明,在Deployment 文件里可以定义Pod数量、更新方式、使用的镜像,资源限制等。无状态应用都用Deployment来创建

通过Deployment对象,你可以轻松的做到以下事情:

  • 创建ReplicaSet和Pod
  • 滚动升级(不停止旧服务的状态下升级)和回滚应用(将应用回滚到之前的版本)
  • 平滑地扩容和缩容
  • 暂停和继续Deployment
Deployment创建[root@master shuai]# vim nginx-delpoy.yamlapiVersion: apps/v1kind: Deployment   '定义是Deployment'metadata:  name: nginx-deployment  labels:    app: nginxspec:  replicas: 3  '副本数量为3'  selector:    matchLabels:      app: nginx  template:    metadata:      labels:        app: nginx    spec:      containers:      - name: nginx        image: nginx:1.15.4        ports:        - containerPort: 80'创建资源'[root@master shuai]# kubectl apply -f nginx-delpoy.yaml deployment.apps/nginx-deployment created//Replicaset 是控制版本,副本数,回滚就是通过此来实现'//查看所有资源'[root@master shuai]# kubectl get allNAME                                  READY   STATUS    RESTARTS   AGEpod/nginx-deployment-d55b94fd-cndf2   1/1     Running   0          3m31spod/nginx-deployment-d55b94fd-ghlwk   1/1     Running   0          3m31spod/nginx-deployment-d55b94fd-tm4sw   1/1     Running   0          3m31spod/pod-example                       1/1     Running   0          10hNAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGEservice/kubernetes   ClusterIP   10.0.0.1     <none>        443/TCP   3d6hNAME                               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGEdeployment.apps/nginx-deployment   3         3         3            3           3m31sNAME                                        DESIRED   CURRENT   READY   AGEreplicaset.apps/nginx-deployment-d55b94fd   3         3         3       3m31s查看控制器信息kubectl deit deployment/nginx-deployment.....省略信息.....strategy:    rollingUpdate:         '版本更新为滚动更新机制'      maxSurge: 25%        '最大更新副本数是25%,最多扩容125%' '为了保持副本数量,增加的百分比同时要销毁多少'      maxUnavailable: 25%  '最大删除副本是25%,最多缩容到75%'    type: RollingUpdate...省略信息....'执行kubectl describe deploy nginx-deployment 也可以查看'....省略信息....RollingUpdateStrategy:  25% max unavailable, 25% max surge查看历史版本[root@master shuai]# kubectl rollout history deploy/nginx-deploymentdeployment.extensions/nginx-deployment REVISION  CHANGE-CAUSE1         <none>   '//这边只有一个,证明还没有滚动更新'

状态与无状态化对特点

无状态服务的特点:

1)deployment 认为所有的pod都是一样的

2)不用考虑顺序的要求

3)不用考虑在哪个node节点上运行

4)可以随意扩容和缩容

有状态服务的特点:

1)实例之间有差别,每个实例都有自己的独特性,元数据不同,例如etcd,zookeeper

2)实例之间不对等的关系,以及依靠外部存储的应用。

Deployment的更新

如果想要让 nginx pod 使用 nginx:1.9.1 的镜像来代替原来的 nginx的镜像,运行以下命令[root@master ~]# kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1deployment.apps/nginx-deployment image updated或者我们可以使用 edit 命令来编辑 Deployment,将image从nginx改写成 nginx:1.9.1kubectl edit deployment/nginx-deployment查看更新进度[root@master ~]# kubectl rollout status deployment/nginx-deploymentWaiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...Waiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...deployment "nginx-deployment" successfully rolled out

Deployment更新时会创建一个新的ReplicaSet,然后将新的ReplicaSet中的Pod慢慢扩容到指定的副本数,将旧的ReplicaSet慢慢缩容到0。因此,更新时总能够确保旧的服务不会停止,这就是滚动更新。

Deployment的回滚

当我们像上文一样更新了Deployment之后,我们发现nginx:1.9.1的镜像不是很稳定,因此想要修改回nginx:1.7.9的版本,此时我们不需要手动更改Deployment文件,而是利用Deployment的回滚功能。

使用rollout history命令查看Deployment的版本(revision):

[root@master ~]# kubectl rollout history deployment/nginx-deploymentdeployment.apps/nginx-deployment REVISION  CHANGE-CAUSE1         kubectl create --filename=deploy.yml --record=true2         kubectl create --filename=deploy.yml --record=true

因为我们创建 Deployment 的时候使用了
下载地址:
Linux系统配置(服务控制)详细介绍
Linux设备之网络驱动介绍

51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1