4 Kubernetes资源-Pod控制器(2)

4.3 DaemonSet

DaemonSet确保Pod在所有Node节点运行一个副本,当有Node节点添加时会自动在新的节点创建Pod。常用于每个Node上的日志收集、监控、集群存储管理等。

  1. 编写YAML文件,通过app: tomcat标签将DaemonSet与Pod资源关联:
[root@k8smaster43-11 CSDN]# cat daemonset.yaml
apiVersion: apps/v1              # API版本
kind: DaemonSet                  # 资源类型
metadata: name: tomcat-daemons           # DS资源名称
spec: selector:            matchLabels: app: tomcat                # 关联Pod标签template:metadata:  name: tomcat-pod           # Pod资源名称labels:  app: tomcat              # Pod资源标签  spec: containers: - name: demo-tomcat        # Pod容器名称image: tomcat:8.0        # Pod容器镜像imagePullPolicy: Never   # 容器下载模式
[root@k8smaster43-11 CSDN]#
  1. 创建DaemonSet资源:
[root@k8smaster43-11 CSDN]# kubectl create -f daemonset.yaml
daemonset.apps/tomcat-daemons created
[root@k8smaster43-11 CSDN]#
[root@k8smaster43-11 CSDN]# kubectl get ds,pod -o wide --show-labels
NAME                            DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE   CONTAINERS    IMAGES       SELECTOR     LABELS
daemonset.apps/tomcat-daemons   2         2         2       2            2           <none>          39s   demo-tomcat   tomcat:8.0   app=tomcat   <none>NAME                       READY   STATUS    RESTARTS   AGE   IP            NODE             NOMINATED NODE   READINESS GATES   LABELS
pod/tomcat-daemons-dqfn4   1/1     Running   0          39s   10.244.2.81   k8sworker43-22   <none>           <none>            app=tomcat,controller-revision-hash=7f5c98c9cc,pod-template-generation=1
pod/tomcat-daemons-tpz7z   1/1     Running   0          39s   10.244.1.98   k8sworker43-21   <none>           <none>            app=tomcat,controller-revision-hash=7f5c98c9cc,pod-template-generation=1
[root@k8smaster43-11 CSDN]#
  1. 将1台工作节点从Kubernetes集群中剔除,则DaemonSet的Pod会从该节点删除:
[root@k8smaster43-11 CSDN]# kubectl delete nodes/k8sworker43-21
node "k8sworker43-21" deleted
[root@k8smaster43-11 CSDN]# kubectl get nodes
NAME             STATUS   ROLES    AGE    VERSION
k8smaster43-11   Ready    master   107d   v1.19.4
k8sworker43-22   Ready    <none>   107d   v1.19.4
[root@k8smaster43-11 CSDN]#
[root@k8smaster43-11 CSDN]# kubectl get ds,pod -o wide --show-labels
NAME                            DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE     CONTAINERS    IMAGES       SELECTOR     LABELS
daemonset.apps/tomcat-daemons   1         1         1       1            1           <none>          8m19s   demo-tomcat   tomcat:8.0   app=tomcat   <none>NAME                       READY   STATUS    RESTARTS   AGE     IP            NODE             NOMINATED NODE   READINESS GATES   LABELS
pod/tomcat-daemons-dqfn4   1/1     Running   0          8m19s   10.244.2.81   k8sworker43-22   <none>           <none>            app=tomcat,controller-revision-hash=7f5c98c9cc,pod-template-generation=1
[root@k8smaster43-11 CSDN]#
  1. 将1台工作节点加入Kubernetes集群中,则DaemonSet会自动从该节点启动Pod:
# 在工作节点执行kubeadm join命令加入集群
[root@k8sworker43-21 ~]# kubeadm join 192.168.43.11:6443 --token d1ncs0.we7r79976ndaf3k4     --discovery-token-ca-cert-hash sha256:28d33e6003840de19700fbba569f32557c57841ff94516720eadc072e4b3a099
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
[root@k8sworker43-21 ~]# #在Master节点查看DaemonSet资源情况
[root@k8smaster43-11 CSDN]# kubectl get nodes
NAME             STATUS   ROLES    AGE    VERSION
k8smaster43-11   Ready    master   107d   v1.19.4
k8sworker43-21   Ready    <none>   12s    v1.19.4
k8sworker43-22   Ready    <none>   107d   v1.19.4
[root@k8smaster43-11 CSDN]#
[root@k8smaster43-11 CSDN]# kubectl get ds,pod -o wide --show-labels
NAME                            DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE   CONTAINERS    IMAGES       SELECTOR     LABELS
daemonset.apps/tomcat-daemons   2         2         2       2            2           <none>          20m   demo-tomcat   tomcat:8.0   app=tomcat   <none>NAME                       READY   STATUS    RESTARTS   AGE   IP            NODE             NOMINATED NODE   READINESS GATES   LABELS
pod/tomcat-daemons-cvxrb   1/1     Running   0          10s   10.244.1.2    k8sworker43-21   <none>           <none>            app=tomcat,controller-revision-hash=7f5c98c9cc,pod-template-generation=1
pod/tomcat-daemons-dqfn4   1/1     Running   0          20m   10.244.2.81   k8sworker43-22   <none>           <none>            app=tomcat,controller-revision-hash=7f5c98c9cc,pod-template-generation=1
[root@k8smaster43-11 CSDN]#
  1. 删除DaemonSet和对应Pod的资源:
[root@k8smaster43-11 CSDN]# kubectl delete -f daemonset.yaml
daemonset.apps "tomcat-daemons" deleted
[root@k8smaster43-11 CSDN]#

4.4 Job/CronJob

Job负责批处理任务,即仅执行一次的任务,它保证批处理的一个或多个Pod成功结束。

  1. 编写YAML文件,设置任务的执行次数 completions为4次、同时执行的任务数量parallelism为2个,因为任务是执行完就结束所以Pod的重启策略restartPolicy:为Never:
[root@k8smaster43-11 CSDN]# cat job.yaml
apiVersion: batch/v1           # API版本
kind: Job                      # 资源类型
metadata: name: perl-job               # Job资源名称
spec:completions: 4               # Job执行次数parallelism: 2               # Job并发数量template: metadata: name: perl-pod           # Pod资源标签spec: containers: - name: perl             # Pod容器名称image: perl            # Pod容器镜像command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]restartPolicy: Never     # Pod重启策略
[root@k8smaster43-11 CSDN]#
  1. 创建Job资源并查看任务执行状态,Pod为Running表示正在执行、Completed表示执行结束:
[root@k8smaster43-11 CSDN]# kubectl create -f job.yaml
job.batch/perl-job created
[root@k8smaster43-11 CSDN]# kubectl get job,pod -o wide
NAME                 COMPLETIONS   DURATION   AGE   CONTAINERS   IMAGES   SELECTOR
job.batch/perl-job   0/4           19s        19s   perl         perl     controller-uid=517a4293-107a-4c05-8480-611b63dc8de5NAME                 READY   STATUS    RESTARTS   AGE   IP            NODE             NOMINATED NODE   READINESS GATES
pod/perl-job-ggspc   1/1     Running   0          19s   10.244.2.86   k8sworker43-22   <none>           <none>
pod/perl-job-p796m   1/1     Running   0          19s   10.244.2.87   k8sworker43-22   <none>           <none># 有2个任务同时执行,任务执行结束Pod状态变为Completed
[root@k8smaster43-11 CSDN]# kubectl get job,pod -o wide
NAME                 COMPLETIONS   DURATION   AGE   CONTAINERS   IMAGES   SELECTOR
job.batch/perl-job   2/4           30s        30s   perl         perl     controller-uid=517a4293-107a-4c05-8480-611b63dc8de5NAME                 READY   STATUS              RESTARTS   AGE   IP            NODE             NOMINATED NODE   READINESS GATES
pod/perl-job-ggspc   0/1     Completed           0          30s   10.244.2.86   k8sworker43-22   <none>           <none>
pod/perl-job-gkrsf   1/1     Running             0          2s    10.244.2.89   k8sworker43-22   <none>           <none>
pod/perl-job-p796m   0/1     Completed           0          30s   10.244.2.87   k8sworker43-22   <none>           <none>
pod/perl-job-slr82   1/1     Running             0          4s    10.244.2.88   k8sworker43-22   <none>           <none>
  1. 删除Job和对应Pod的资源:
[root@k8smaster43-11 CSDN]# kubectl delete -f job.yaml
job.batch "perl-job" deleted
[root@k8smaster43-11 CSDN]#

CronJob负责在给定时间调度Job,或者按照周期运行Job。常用于定时任务脚本、数据库备份、定时邮件发送等。

  1. 编写YAML文件,通过schedule字段设置定时任务的时间间隔:
[root@k8smaster43-11 CSDN]# cat cronjob.yaml
apiVersion: batch/v1beta1           # API版本
kind: CronJob                       # 资源类型
metadata: name: busybox-cronjob             # CronJob资源名称
spec:schedule: "*/1 * * * *"           # 批处理时间间隔60sjobTemplate: spec: completions: 1                # Job执行次数parallelism: 1                # Job并发数量template: metadata: app: busybox              # Pod资源标签spec: containers: - name: busybox           # Pod容器名称image: busybox          # Pod容器镜像command: ["sh", "-c", "date; echo Hello from the kubernetes cluster"]restartPolicy: Never      # Pod重启策略
[root@k8smaster43-11 CSDN]#
  1. 创建CronJob资源并观察执行过程,通过successfulJobsHistoryLimit字段可以设置需要保留的成功完成任务的Job个数,超过该数值的Job会被删除:
[root@k8smaster43-11 CSDN]# kubectl get cronjob,job,pod -o wide
NAME                            SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE     CONTAINERS   IMAGES    SELECTOR
cronjob.batch/busybox-cronjob   */1 * * * *   False     0        31s             9m21s   busybox      busybox   <none>NAME                                   COMPLETIONS   DURATION   AGE     CONTAINERS   IMAGES    SELECTOR
job.batch/busybox-cronjob-1658563620   1/1           18s        2m30s   busybox      busybox   controller-uid=87d090c6-bbe4-48ca-8849-fc3a941d7bf4
job.batch/busybox-cronjob-1658563680   1/1           19s        90s     busybox      busybox   controller-uid=673942e5-18fc-445e-b203-a264d271d5cb
job.batch/busybox-cronjob-1658563740   1/1           17s        29s     busybox      busybox   controller-uid=c54ceea2-93e8-4b7e-83a3-b40e29113005NAME                                   READY   STATUS      RESTARTS   AGE     IP            NODE             NOMINATED NODE   READINESS GATES
pod/busybox-cronjob-1658563620-7d88g   0/1     Completed   0          2m30s   10.244.2.93   k8sworker43-22   <none>           <none>
pod/busybox-cronjob-1658563680-528dd   0/1     Completed   0          90s     10.244.1.10   k8sworker43-21   <none>           <none>
pod/busybox-cronjob-1658563740-h25ff   0/1     Completed   0          29s     10.244.2.94   k8sworker43-22   <none>           <none>
[root@k8smaster43-11 CSDN]#
  1. 删除CornJob和对应Job、Pod的资源:
[root@k8smaster43-11 CSDN]# kubectl delete -f cronjob.yaml
cronjob.batch "busybox-cronjob" deleted
[root@k8smaster43-11 CSDN]#

4.5 StatefulSet

StatefulSet负责有状态服务问题,为每个Pod提供唯一的标识{StatefulSetName}-{0-N},保证部署和扩容的有序性,而其他控制器生成的Pod标识符存在随机值。

应用场景(案例在后续Service和PV/PVC部分):

  • 稳定持久化存储,Pod重新调度后还能访问到相同的持久化数据,基于PVC实现的为每个Pod匹配一个PVC;
  • 稳定的网络标志,Pod重新调度后其PodName和HostName不变,基于Headless Service实现的可以在容器内部ping PodName.HeadlessServiceName,而其他类型的Service只能ping ServiceName;
  • 有序部署有序扩展,在部署和扩展的时候要依据定义的顺序依次运行,在下一个Pod运行之前所有前序Pod必须都是Running和Ready状态,基于init container实现;
  • 有序收缩有序删除。

4 Kubernetes资源-Pod控制器(2)相关推荐

  1. 4 Kubernetes资源-Pod控制器(1)

    4 Kubernetes资源-Pod控制器(1) Kubernetes中Pod分为自主式和控制器管理式: YAML指定类型为Pod的均为自主式,此类Pod退出后不会被创建: YMAL指定类型为Repl ...

  2. kubernetes之Pod控制器详解

    kubernetes之Pod控制器详解 文章目录 kubernetes之Pod控制器详解 Pod控制器介绍 ReplicaSet(RS) Deployment(Deploy) Pod控制器介绍 Pod ...

  3. Kubernetes(15):Pod控制器ReplicaSet和Deployment详解

    文章目录 前言 第一节 Pod控制器 第二节 ReplicaSet(RS) 1. 概念和资源清单 2. 创建ReplicaSet 3. 扩缩容 3.1 方法一:直接编辑rs 3.2方法二 :命令扩缩容 ...

  4. kubernetes之Pod控制器

    文章目录 一.ReplicaSet 1.创建 2.扩缩容 3.镜像升级 4.删除 二.Deployment 1.创建与扩容 2.镜像升级 3.版本回退 三.Horizontal Pod Autosca ...

  5. 学习笔记之-Kubernetes(K8S)介绍,集群环境搭建,Pod详解,Pod控制器详解,Service详解,数据存储,安全认证,DashBoard

    笔记来源于观看黑马程序员Kubernetes(K8S)教程 第一章 kubernetes介绍 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署 ...

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

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

  7. kubernetes资源控制器【一】- ReplicaSet控制器

    一.Pod控制器 Master的各组件中,API Server仅负责将资源存储于etcd中,并将其变动通知给各相关的客户端程序,如kubelet.kube-scheduler.kube-proxy和k ...

  8. 八、kubernetes Pod控制器

    Pod 控制器 文章目录 Pod 控制器 1. ReplicaSet(RS) 2. Deployment(Deploy) 3. Horizontal Pod Autoscaler(HPA) 4. Da ...

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

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

最新文章

  1. std::tuple类型
  2. 功率电感器基础讲座-第1章-2_转载自村田官网
  3. MySQL事务的回滚
  4. google设置在新标签页打开的方法
  5. python opencv旋转_Python opencv实现与rotatedrect类似的矩形旋转,pythonopencv,RotatedRect
  6. tomcat启动后命令行日志中文乱码
  7. python random用法_python random 的用法
  8. Holer实现外网访问本地MySQL数据库
  9. SQL数据库语言基础之SqlServer表数据的插入、更新与删除
  10. php中split的使用,php中常用字符串的用法总结 - split
  11. NLP之路-继续书本上的实验
  12. aix 文件升级-替换
  13. 在ubuntu下使用搜狗的教育网代理
  14. [LuoguP1360][USACP07MAR]黄金阵容均衡
  15. 黑客伦理(hacker ethic)--《黑客与画家》
  16. 注册和登录Github
  17. 仿百思不得其姐项目开发(粗略笔记,后期规范排版和更新)
  18. 标准柯西分布_柯西分布设独立随机变量X和Y都服从标准正态 – 手机爱问
  19. 传智播客与英特尔结成合作伙伴,共同推动软件技术进步
  20. 信息流推荐在凤凰新闻的业务实践

热门文章

  1. 使用网络调试助手通过MQTT协议接入到华为云物联网平台
  2. 科技战疫志愿精神如何延续?腾讯的答案是……
  3. 【乐通达】微信永不缺席!连发三大重磅更新,视频号终于成了视频号
  4. 我的世界服务器的自动门怎么做,我的世界自动门怎么做
  5. 【入门】倒序输出一个四位整数
  6. 点集排序(快速排序)
  7. Java基础 | 多态
  8. 基础选择器之id选择器
  9. 图文电视related
  10. Ubuntu 2004 鼠标可以移动但是点击无响应 排查流程