一、Pod 的分类:
• 自主式 Pod:Pod 退出后不会被创建
• 控制器管理的 Pod:在控制器的生命周期里,始终要维持 Pod 的副本数目
• 控制器类型:

• Replication Controller和ReplicaSet
• Deployment
• DaemonSet
• StatefulSet
• Job
• CronJob
• HPA全称Horizontal Pod Autoscaler

1.2Replication Controller和ReplicaSet
• ReplicaSet 是下一代的 Replication Controller,官方推荐使用ReplicaSet。
• ReplicaSet 和 Replication Controller 的唯一区别是选择器的支持,ReplicaSet
支持新的基于集合的选择器需求。
• ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行。
• 虽然 ReplicaSets 可以独立使用,但今天它主要被Deployments 用作协调 Pod 创
建、删除和更新的机制。
• Deployment
• Deployment 为 Pod 和 ReplicaSet 提供了一个申明式的定义方法。
• 典型的应用场景:

• 用来创建Pod和ReplicaSet
• 滚动更新和回滚
• 扩容和缩容
• 暂停与恢复

1.3DaemonSet
• DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。当有节
点加入集群时, 也会为他们新增一个 Pod 。当有节点从集群移除时,这些
Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。
• DaemonSet 的典型用法:

• 在每个节点上运行集群存储 DaemonSet,例如 glusterd、ceph。
• 在每个节点上运行日志收集 DaemonSet,例如 fluentd、logstash。
• 在每个节点上运行监控 DaemonSet,例如 Prometheus Node 、Exporter、zabbix agent等

• 一个简单的用法是在所有的节点上都启动一个 DaemonSet,将被作为每种
类型的 daemon 使用。
• 一个稍微复杂的用法是单独对每种 daemon 类型使用多个 DaemonSet,
但具有不同的标志, 并且对不同硬件类型具有不同的内存、CPU 要求。
1.4StatefulSet
• StatefulSet 是用来管理有状态应用的工作负载 API 对象。实例之间有不对
等关系,以及实例对外部数据有依赖关系的应用,称为“有状态应用”
• StatefulSet 用来管理 Deployment 和扩展一组 Pod,并且能为这些 Pod
提供序号和唯一性保证

• StatefulSets 对于需要满足以下一个或多个需求的应用程序很有价值:
• 稳定的、唯一的网络标识符。
• 稳定的、持久的存储。
• 有序的、优雅的部署和缩放。
• 有序的、自动的滚动更新。
1.5Job
• 执行批处理任务,仅执行一次任务,保证任务的一个或多个Pod成功结束。
• CronJob
• Cron Job 创建基于时间调度的 Jobs。
• 一个 CronJob 对象就像 crontab (cron table) 文件中的一行,它用 Cron
格式进行编写,并周期性地在给定的调度时间执行 Job。
• HPA
• 根据资源利用率自动调整service中Pod数量,实现Pod水平自动缩放。
二、deployment控制器演示

清除前面的实验内容
[root@server2 manifest]# kubectl delete -f pod2.yml 
deployment.apps "deployment-example" deleted
[root@server2 manifest]# kubectl delete -f init.yml 
pod "myapp-pod" deleted
[root@server2 manifest]# kubectl delete pod demo 
pod "demo" deleted
[root@server2 manifest]# kubectl get pod
No resources found in default namespace.
vim deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1

在这里插入图片描述

[root@server2 manifest]# kubectl get rs  查看rs
NAME                          DESIRED   CURRENT   READY   AGE
deployment-myapp-7449b5b68f   3         3         3       2m53s

更换镜像

vim deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v2

在这里插入图片描述
在这里插入图片描述
回滚rs
更改配置文件myapp的镜像为v1
在这里插入图片描述
当发现容器内的pod有问题或故障,可以直接删除刷新,会自动重新拉起一个新的pod(自主式pod除外)
在这里插入图片描述

 kubectl delete -f deployment.yml   彻底删除

书写多个deployment控制器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三、DaemonSet控制器演示
删除之前的实验

[root@server2 manifest]# vim daemonset.yml
[root@server2 manifest]# cat daemonset.yml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-example
  labels:
    k8s-app: nginx
spec:
  selector:
    matchLabels:
      name: nginx
  template:
    metadata:
      labels:
        name: nginx
    spec:
      containers:
        - name: nginx
          image: nginx
                     

在这里插入图片描述
新的节点加入也会自动拉取pod,DaemonSet控制器会自动在所有节点上拉取pod
四、job控制器演示

 vim job.yml

apiVersion: batch/v1
kind: Job
metadata:
  name: example-job
spec:
  template:
    metadata:
      - name: example-job
    spec:
      containers:
        - name: pi
          image: perl
          command: ["perl"]
          args: ["-Mbignum=bpi", "-wle", "print bpi(2000)"]
        restartPolicy: Never
[root@server2 manifest]# kubectl apply -f job.yml 

五、创建 CronJob 控制器

[root@server2 manifest]# vim cronjob.yml

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cronjob-example
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: cronjob
              image: busybox
              args:
              - /bin/sh
              - -c
              - date; echo Hello from k8s cluster  终端输出内容
          restartPolicy: OnFailure  一旦失败会重新拉取

在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐