2023年7月6日发(作者:)
K8S中五种控制器的介绍以及使⽤⽬录k8s的控制器类型pod与控制器之间的关系Deployment(⽆状态化应⽤)状态与⽆状态化对特点Deployment的更新Deployment的回滚CronJob控制器总结k8s的控制器类型Kubernetes中内建了很多controller(控制器),这些相当于⼀个状态机,⽤来控制Pod的具体状态和⾏为Deployment:适合⽆状态的服务部署StatefullSet:适合有状态的服务部署DaemonSet:⼀次部署,所有的node节点都会部署,例如⼀些典型的应⽤场景:运⾏集群存储 daemon,例如在每个Node上运⾏ glusterd、ceph在每个Node上运⾏⽇志收集 daemon,例如 fluentd、 logstash在每个Node上运⾏监控 daemon,例如 Prometheus Node ExporterJob:⼀次性的执⾏任务Cronjob:周期性的执⾏任务总体来说,K8S有五种控制器,分别对应处理⽆状态应⽤、有状态应⽤、守护型应⽤和批处理应⽤pod与控制器之间的关系controllers:在集群上管理和运⾏容器的对象通过label-selector相关联Pod通过控制器实现应⽤的运维,如伸缩,升级等Deployment(⽆状态化应⽤)应⽤场景:web服务Deployment中⽂意思为部署、调度,通过Deployment我们能操作RS(ReplicaSet),你可以简单的理解为它是⼀种通过yml⽂件的声明,在Deployment ⽂件⾥可以定义Pod数量、更新⽅式、使⽤的镜像,资源限制等。⽆状态应⽤都⽤Deployment来创建通过Deployment对象,你可以轻松的做到以下事情:创建ReplicaSet和Pod滚动升级(不停⽌旧服务的状态下升级)和回滚应⽤(将应⽤回滚到之前的版本)平滑地扩容和缩容暂停和继续DeploymentDeployment创建[root@master shuai]# vim iVersion: 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-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
REVISION CHANGE-CAUSE1
REVISION CHANGE-CAUSE1 kubectl create --filename= --record=true2 kubectl create --filename= --record=true因为我们创建 Deployment 的时候使⽤了 —recored 参数可以记录命令,我们可以很⽅便的查看每次 revison 的变化。查看单个 revision 的详细信息:[root@master ~]# kubectl rollout history deployment/nginx-deployment --revision=/nginx-deployment with revision #2Pod Template: Labels: app=nginx pod-template-hash=658d7f4b4b Annotations: /change-cause: kubectl create --filename= --record=true Containers: nginx: Image: nginx:1.9.1 Port: 80/TCP Host Port: 0/TCP Environment:
---apiVersion: batch/v1kind: Jobmetadata: name: myjobspec: template: spec: containers: - name: myjob image: busybox command: ["echo", "hello k8s job"] restartPolicy: Never[root@master ~]# kubectl apply -f
/myjob created[root@master ~]# kubectl get podsNAME READY STATUS RESTARTS AGEmyjob-gq27p 0/1 Completed 0 37s#查看这个 pod的任务[root@master ~]# kubectl get jobNAME COMPLETIONS DURATION AGEmyjob 1/1 19s 5m11s#查看这个 pod的⽇志[root@master ~]# kubectl logs myjob-gq27phello k8s jobCronJob控制器CronJob 可以⽤来执⾏基于时间计划的定时任务,类似于Linux/Unix系统中的 crontable (opens new window)。CronJob 执⾏周期性的重复任务时⾮常有⽤,例如备份数据、发送邮件等。CronJob 也可以⽤来指定将来某个时间点执⾏单个任务,例如将某项任务定时到系统负载⽐较低的时候执⾏。⼀个 CronJob 对象就像 crontab (cron table) ⽂件中的⼀⾏。 它⽤Cron格式进⾏编写, 并周期性地在给定的调度时间执⾏Job。注意:所有 CronJob 的 schedule: 时间都是基于kube-controller-manager. 的时区。如果你的控制平⾯在 Pod 或是裸容器中运⾏了 kube-controller-manager, 那么为该容器所设置的时区将会决定 CronJob 的控制器所使⽤的时区。为 CronJob 资源创建清单时,请确保所提供的名称是⼀个合法的DNS ⼦域名. 名称不能超过 52 个字符。 这是因为CronJob 控制器将⾃动在提供的 Job 名称后附加 11 个字符,并且存在⼀个限制, 即 Job 名称的最⼤长度不能超过 63个字符。CronJob ⽤于执⾏周期性的动作,例如备份、报告⽣成等。 这些任务中的每⼀个都应该配置为周期性重复的(例如:每天/每周/每⽉⼀次); 你可以定义任务开始执⾏的时间间隔。下⾯的 CronJob ⽰例清单会在每分钟打印出当前时间和问候消息:[root@master kubenetres]# vi ---apiVersion: batch/v1beta1kind: CronJobmetadata: name: hellospec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name: hello image: busybox imagePullPolicy: IfNotPresent command: - /bin/sh - -c - date; echo Hello nihao restartPolicy: OnFailure创建pod查看[root@master ~]# kubectl apply -f
Warning: batch/v1beta1 CronJob is deprecated in v1.21+, unavailable in v1.25+; use batch/v1 /hello created#等⼀分钟查看[root@master ~]# kubectl get podsNAME READY STATUS RESTARTS AGEhello-27339330-kkfxv 0/1 Completed 0 2s#查看⽇志[root@master ~]# kubectl logs hello-27339330-kkfxvFri Dec 24 15:30:00 UTC 2021Hello nihao总结到此这篇关于K8S中五种控制器及使⽤的⽂章就介绍到这了,更多相关K8S控制器使⽤内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
发布者:admin,转转请注明出处:http://www.yc00.com/news/1688591892a153107.html
评论列表(0条)