云计算-K8s 核心组件之CronJob、RBAC、HPA ,LimitRange、DaemonSet、nodeSelector如何作战?

目录

1.CronJob管理

2.RBAC管理

3.HPA管理

4.健康检查

5.LimitRange管理

6.DaemonSet管理

7.nodeSelector管理


简介

  1. CronJob(定时任务控制器)

按固定时间间隔(类似 Linux cron)自动触发一次性任务(Job)。适用于周期性操作如日志备份、数据同步或定时清理。

  1. RBAC(基于角色的访问控制)

实现细粒度的权限管理,限制用户/服务账户对资源的读写范围。遵循最小权限原则,确保集群安全性。

3.HPA(Horizontal Pod Autoscaler,水平自动扩缩)

根据指标动态调整 Pod 副本数量,应对流量波动。支持 CPU/内存利用率、自定义指标或外部监控系统数据作为触发条件。当指标超过阈值时增加实例数,低于下限则缩减,维持性能与成本平衡。

  1. 健康检查

确保容器持续正常运行并准备好接收流量

  1. LimitRange(资源限额范围)

为命名空间内的容器设置硬性资源上下限约束,防止单个 Pod 过度占用集群资源。可分别限制最小/最大请求值和限制值。

  1. DaemonSet(守护进程集)

确保每个符合条件的节点上都运行一份该应用的副本,用于集群级监控、日志采集等全局性任务。天然适合需要主机级访问的场景。节点新增时自动部署,删除节点时自动回收对应 Pod。

  1. NodeSelector(节点选择器)

手动指定 Pod 调度到带有特定标签的节点上,实现初步的定位控制。属于强制绑定策略,优先级高于默认调度算法

  1. 亲和性(Affinity)

提供更灵活的调度策略,分为两类:

NodeAffinity(节点亲和性): 根据节点标签进行软性优先选择或硬性要求

PodAntiAffinity(互斥反亲和性): 使同一应用的不同实例尽量分散在不同节点上提高可用性

汇总表

模块 核心功能 典型应用场景 配置层级
CronJob 定时触发一次性任务 日志备份、报表生成 Workload
RBAC 权限管控 多租户隔离、安全审计 Security
HPA 自适应调整副本数 A/B测试流量突增、秒杀活动 Autoscaling
健康检查 保障服务可靠性 API网关存活监测、数据库连接池维护 PodSpec
LimitRange 资源配额兜底保护 防止NoisyNeighbor干扰其他业务 NamedSpaceLevel
DaemonSet 全集群覆盖部署 Daemon、Agent类组件 Workload
NodeSelector 强制节点过滤 GPU加速任务绑定特定机型 PodSpec
Affinity 智能调度优化 跨机房灾备、故障域隔离 PodSpec
1.CronJob管理

在master节点/root目录下编写yaml文件date.yaml,具体要求如下:

(1)CronJob名称:date;

(2)命名空间:default;

(3)基于时间的调度规则:每分钟启动一次;

(4)容器名称:hello;镜像:busybox。 restartPolicy: OnFailure

复制代码
 ​apiVersion: batch/v1beta1
 kind: CronJob
 metadata:
   name: date
   namespace: default
 spec:
   schedule: '*/1 * * * *'
   jobTemplate:
     metadata:
     spec:
       template:
         metadata:
         spec:
           containers:
           - image: busybox:latest
             name: hello
           restartPolicy: OnFailure

按定义的时间规则(如每分钟)自动创建Job,执行后生成一次性任务Pod并退出
2.RBAC管理

在master节点/root目录下编写yaml文件clusterrolebinding.yaml,具体要求如下:

(1)ClusterRoleBinding名称:read-secrets-global;

(2)绑定集群角色secret-reader,允许"manager"组中的任何用户读取任意命名空间中secrets。

复制代码
 
 apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRole
 metadata:
   name: secret-reader  
 rules:  #保存此ClusterRole的所有策略规则
 - apiGroups:  # "" 指定核心 API 组    - apiGroups: [""] 这样写也可以
   - ""
   resources:  #可以操作的资源
   - secrets
   verbs:  #操作权限
   - get
   - list
   - watch
   ----------------
 apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRoleBinding
 metadata:
   name: read-secrets-global 
 roleRef:
   apiGroup: rbac.authorization.k8s.io  #apigroup是被引用资源的组
   kind: ClusterRole  ##正在引用的资源类型(role或clusterrole)
   name: secret-reader  
 subjects:
 - apiGroup: rbac.authorization.k8s.io   
   kind: Group  
   name: manager  #用于绑定的集群中的用户名

用户/服务账户尝试操作资源时,API Server会校验其权限,拒绝越权操作(如非manager组访问Secret)

3.HPA管理

在master节点/root目录下编写yaml文件deployment-hpa.yaml,具体要求如下:

(1)HPA名称:deployment-hpa;

(2)命名空间:default;

(3)基于deployment进行伸缩,副本数伸缩范围:1--10;

(4)期望每个Pod的CPU和内存使用率为50%。

复制代码
 apiVersion: autoscaling/v1
 kind: HorizontalPodAutoscaler
 metadata:
   name: deployment-hpa
   namespace: default
 spec:
   maxReplicas: 10  
   minReplicas: 1  
   scaleTargetRef:
     apiVersion: apps/v1
     kind: Deployment
     name: deployment-hpa
   targetCPUUtilizationPercentage: 50   #CPU

持续监控Pod指标(CPU/内存),当利用率超过50%时自动扩容,低于阈值时缩容

4.健康检查

在master节点/root目录下编写yaml文件liveness_tcp.yaml,具体要求如下:

(1)Pod名称:liveness-tcp;

(2)命名空间:default;

(3)镜像:nginx;端口:80;

(4)使用liveness-tcp方式向Pod IP的80/tcp端口发起连接请求;

(6)启动后延时30秒开始运行检测;

(7)每隔3秒执行一次liveness probe。

复制代码
 apiVersion: v1
 kind: Pod
 metadata:
   name: liveness-tcp   
   namespace: default   
 spec:
   containers:
   - image: nginx:latest   
     imagePullPolicy: IfNotPresent
     livenessProbe:  #用于检测节点是否处于存活(健康)状态,如有异常会直接重启pod
       tcpSocket:  
         port: 80  
       initialDelaySeconds: 30  #延时30秒开始运行检测
       periodSeconds: 3  #每隔3秒执行一次liveness probe
     name: nginx     
     ports:   
     - containerPort: 80   

每3秒检测80端口,若连续失败则重启Pod,确保服务可用性(30秒初始延迟避免误判)

5.LimitRange管理

在master节点/root目录下编写yaml文件mem-limit-range.yaml,具体要求如下:

(1)LimitRange名称:mem-limit-range;

(2)命名空间:default;

(3)默认容器能使用资源的最大值为512Mi内存、2000m CPU;

(4)默认容器的资源请求为256Mi内存、500m CPU;

(5)请求上限为800Mi内存、3000m CPU;

(6)请求下限为100Mi内存,300m CPU;

(7)内存和CPU超售的比率均为2。

复制代码
 apiVersion: v1
 kind: LimitRange
 metadata:
   name: mem-limit-range
   namespace: default
 spec:
   limits:
   - default:  
       memory: 512Mi 
       cpu: 2000M
     defaultRequest:
       memory: 256Mi   
       cpu: 500M 
     max:
       memory: 800Mi  
       cpu: 3000M  
     min:
       memory: 100Mi 
       cpu: 300M  
     maxLimitRequestRatio:    
       memory: 2 
       cpu: 2 
     type: Container   #应用此限制的资源类型

创建Pod时强制校验资源请求值,拒绝不符合范围的请求(如内存申请>800Mi会直接失败)

6.DaemonSet管理

在master节点/root目录下编写yaml文件daemonset.yaml,具体要求如下:

(1)DaemonSet名称:fluentd;

(2)命名空间:default;

(3)镜像:quay.io/fluentd_elasticsearch/fluentd:v2.5.2;

(4)容器名称:fluentd-container01;

(5)将Pod调度到非污点的节点上。

复制代码
 apiVersion: apps/v1
 kind: DaemonSet
 metadata:
   name: fluentd 
   namespace: default
 spec:
   revisionHistoryLimit: 10  #保留回滚的旧历史记录数
   selector:
     matchLabels:  #控制pod所需的标签必须一致            
       app: fluentd  
   template:
     metadata:
       labels:
         app: fluentd 
     spec:
       containers:
       - image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2  
         imagePullPolicy: IfNotPresent
         name: fluentd-container01  
       nodeSelector:
         kubernetes.io/os: linux
       restartPolicy: Always
       schedulerName: default-scheduler
      tolerations:   #指定污点节点

集群中新增Node时自动部署Fluentd Pod,节点删除时同步清理,保证每个节点有且只有一个副本
  
7.nodeSelector管理

为node节点打上标签"disktype=ssd",然后在master节点/root目录下编写yaml文件nodeselector.yaml,具体要求如下:

(1)Pod名称:nginx-nodeselector;

(2)命名空间:default;

(3)镜像:nginx;

(4)调度该Pod到标签为"disktype=ssd"的节点上。

复制代码
  #给node节点打上标签
 [root@master k8s]# kubectl label nodes node disktype=ssd
 kubectl get nodes node --show-labels | grep ssd 查询标签
 -----------------------------------------------------------------
 apiVersion: v1
 kind: Pod
 metadata: 
   name: nginx-nodeselector 
   namespace: default
 spec:
   containers:
   - image: nginx:latest 
     name: nginx-nodeselector
     imagePullPolicy: IfNotPresent 
   nodeSelector:   #选择器,匹配节点标签
     disktype: ssd  

Pod只会被调度到带有disktype=ssd标签的节点,若无可调度的节点则处于Pending状态