DaemonSet 的应用场景:
1、在每个节点上运行集群守护进程;
2、在每个节点上运行日志收集守护进程;
3、在每个节点上运行监控守护进程 。
来个栗子
cat <<EOF >./nginx-daemonset.yamlapiVersion: apps/v1kind: DaemonSetmetadata:name: nginx-daemonsetlabels:app: nginx-daemonsetspec:selector:matchLabels:app: nginx-daemonsettemplate:metadata:labels:app: nginx-daemonsetspec:containers:- name: nginx-daemonsetimage: nginx:alpineresources:limits:cpu: 250mmemory: 512Mirequests:cpu: 250mmemory: 512MiimagePullSecrets:- name: default-secretEOF
这样就能在每个节点中部署一个 Pod 了,不过 DaemonSet 也支持通过 label 来选择部署的目标节点
cat <<EOF >./nginx-daemonset.yamlapiVersion: apps/v1kind: DaemonSetmetadata:name: nginx-daemonsetlabels:app: nginx-daemonsetspec:selector:matchLabels:app: nginx-daemonsettemplate:metadata:labels:app: nginx-daemonsetspec:nodeSelector: # 节点选择,当节点拥有nodeName=node7时才在节点上创建PodnodeName: node7containers:- name: nginx-daemonsetimage: nginx:alpineresources:limits:cpu: 250mmemory: 512Mirequests:cpu: 250mmemory: 512MiimagePullSecrets:- name: default-secretEOF
Job 和 CronJobJob 和 CronJob 是负责处理定时任务的 。
两者的区别主要在于:
Job 负责处理一次性的定时任务,即仅需执行一次的任务;
CronJob 是基于时间的 Job,就类似于 Linux 系统的 crontab 文件中的一行,在指定的时间周期运行指定的 Job 。
首先来创建一个 Job
cat <<EOF >./job-demo.yamlapiVersion: batch/v1kind: Jobmetadata:name: job-demospec:template:metadata:name: job-demospec:restartPolicy: Nevercontainers:- name: counterimage: busyboxcommand:- "bin/sh"- "-c"- "echo hello"EOF
运行
$ kubectl apply -f job-demo.yaml$ kubectl get podsNAMEREADYSTATUSRESTARTSAGEjob-demo-8qrd90/1Completed040s$ study-k8s kubectl get jobNAMECOMPLETIONSDURATIONAGEjob-demo1/136s45s$ kubectl logs -f job-demo-8qrd9hello
再来看下 CronJob
cat <<EOF >./cronJob-demo.yamlapiVersion: batch/v1beta1kind: CronJobmetadata:name: hellospec:schedule: "* * * * *"jobTemplate:spec:template:spec:containers:- name: helloimage: busybox:1.28imagePullPolicy: IfNotPresentcommand:- /bin/sh- -c- date; echo HellorestartPolicy: OnFailureEOF
通过 kubectl get jobs --watch
就能查看 CronJob 的调度
$ kubectl get jobs --watchNAMECOMPLETIONSDURATIONAGEhello-16644498601/12s4shello-16644499200/10shello-16644499200/10s0shello-16644499201/12s2s
总结关于 pod 中的几个控制器最常用的就是 Deployment 和 ReplicaSet;
使用 Deployment 来管理 RS,来实现服务的部署,更新和滚动升级;
StatefulSet 主要用来管理无状态应用;
DaemonSet:主要是用来保证集群中的每个节点只运行一个 Pod , 且保证只有一个 Pod,这非常适合一些系统层面的应用,例如日志收集、资源监控等,这类应用需要每个节点都运行 , 且不需要太多实例,一个比较好的例子就是 Kubernetes 的 kube-proxy;
Job 和 CronJob 是负责处理定时任务的;
Job 负责处理一次性的定时任务,即仅需执行一次的任务;
CronJob 是基于时间的 Job,就类似于 Linux 系统的 crontab 文件中的一行,在指定的时间周期运行指定的 Job 。
参考【Deployments】https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/【Kubernetes 部署策略详解】https://www.qikqiak.com/post/k8s-deployment-strategies/【StatefulSet 和 Deployment 区别及选择方式】https://blog.csdn.net/nickDaDa/article/details/90401635【K8S: 有状态 vs 无状态服务】https://zhuanlan.zhihu.com/p/390440336【StatefulSet】https://support.huaweicloud.com/basics-cce/kubernetes_0015.html【k8s 中 Pod 的控制器】https://boilingfrog.github.io/2022/09/30/k8s中Pod控制器/
推荐阅读
- 世界银行的两条贫困线 世界贫困线标准
- 内增高鞋十大品牌是哪些呢。 中国鞋垫十大排名
- mapboxgl加载tiff
- 是否还能在我怀中叫我一声老公 叫我一声老公
- 中国移动大众卡最新收费标准 中国移动资费一览表
- 高铁行驶途中李易峰广告被紧急撤换的简单介绍
- 上 git-secret:在 Git 存储库中加密和存储密钥
- 在王者荣耀游戏中,怎么破解上官婉儿的连招
- 目前世界上肥胖人口是多少 中国肥胖人口数据
- 中国阶层等级划分 中国收入阶层划分图