k8s--控制器

Pod 的分类:

主式 Pod:

Pod 退出后不会被创建
控制器管理的
Pod:在控制器的生命周期里,始终要维持 Pod 的副本数目

类型:

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

eplication Controller和ReplicaSet

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

Deployment
Deployment 为 Pod 和 ReplicaSet 提供了一个申明式的定义方法。

典型的应用场景:
用来创建Pod和ReplicaSet
滚动更新和回滚
扩容和缩容
暂停与恢复

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

在每个节点上运行集群存储 DaemonSet,例如 glusterd、ceph。

'每个节点上运行日志收集 DaemonSet,例如 fluentd、logstash。

在每个节点上运行监控 DaemonSet,例如 Prometheus Node Exporter、 zabbix agent等

一个简单的用法是在所有的节点上都启动一个 DaemonSet,将被作为每种 类型的 daemon 使用。

一个稍微复杂的用法是单独对每种 daemon 类型使用多个 DaemonSet,但 具有不同的标志, 并且对不同硬件类型具有不同的内存、CPU 要求。

StatefulSet
StatefulSet 是用来管理有状态应用的工作负载 API 对象。实例之间有不对等 关系,以及实例对外部数据有依赖关系的应用,称为“有状态应用”
• StatefulSet 用来管理 Deployment 和扩展一组 Pod,并且能为这些 Pod 提 供序号和唯一性保证
• StatefulSets 对于需要满足以下一个或多个需求的应用程序很有价值:
• 稳定的、唯一的网络标识符。
• 稳定的、持久的存储。
• 有序的、优雅的部署和缩放。
• 有序的、自动的滚动更新。

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

CronJob
Cron Job 创建基于时间调度的 Jobs。
一个 CronJob 对象就像 crontab (cron table) 文件中的一行,它用 Cron 格式 进行编写,并周期性地在给定的调度时间执行 Job。

HPA
根据资源利用率自动调整service中Pod数量,实现Pod水平自动缩放。

ReplicaSet控制器示例:

$ vim replicaset-example.yaml


piVersion: apps/v1 
kind: ReplicaSet 
metadata:    
  name: replicaset-example 
spec:   
  replicas: 3  
selector:    match
  Labels:      
    app: nginx  
template:    
  metadata:      
    labels:        
      app: nginx    
  spec:      
    containers:      
    - name: nginx 
    image: nginx

控制器示例:
$ vim job-example.yaml

 apiVersion: batch/v1 
 kind: Job 
 metadata:  
   name: pi 
 spec:  
   template:    
     spec:      
       containers:      
       - name: pi        
         image: perl        
         command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]      
       restartPolicy: Never  
   backoffLimit: 4 

• $ kubectl apply -f job-example.yaml
• $ kubectl get pod

NAME       READY   STATUS      RESTARTS   AGE 
pi-6phk8   0/1     Completed   0          2m22s 

• $ kubectl logs pi-6phk8
• $ kubectl delete job pi

DaemonSet控制器示例:

• $ vim cronjob-example.yaml

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

$ kubectl apply -f cronjob-example.yaml
kubectl get cronjob

  NAME      SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE 
cronjob-example   * * * * *   False     0        38s             8m22s 

kubectl get job -w

NAME                         COMPLETIONS   DURATION   AGE 
cronjob-example-1581873180   1/1           1s         3m cronjob-example-1581873240   1/1           1s         2m 

$ kubectl get pod

NAME                               READY   STATUS      RESTARTS   AGE 
cronjob-example-1581873240-r644w   0/1     Completed   0          2m51s cronjob-example-1581873300-p89rc   0/1     Completed   0          111s 

kubectl logs cronjob-example-1581873240-r644w

Sun Feb 16 17:14:06 UTC 2020 Hello from k8s cluster

kubectl delete cronjob cronjob-example

 cronjob.batch "cronjob-example" deleted
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章