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

云计算-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)。适用于周期性操作如日志备份、数据同步或定时清理。
2. RBAC(基于角色的访问控制)
实现细粒度的权限管理,限制用户/服务账户对资源的读写范围。遵循最小权限原则,确保集群安全性。
3.HPA(Horizontal Pod Autoscaler,水平自动扩缩)
根据指标动态调整 Pod 副本数量,应对流量波动。支持 CPU/内存利用率、自定义指标或外部监控系统数据作为触发条件。当指标超过阈值时增加实例数,低于下限则缩减,维持性能与成本平衡。
4. 健康检查
确保容器持续正常运行并准备好接收流量
5. LimitRange(资源限额范围)
为命名空间内的容器设置硬性资源上下限约束,防止单个 Pod 过度占用集群资源。可分别限制最小/最大请求值和限制值。
6. DaemonSet(守护进程集)
确保每个符合条件的节点上都运行一份该应用的副本,用于集群级监控、日志采集等全局性任务。天然适合需要主机级访问的场景。节点新增时自动部署,删除节点时自动回收对应 Pod。
7. NodeSelector(节点选择器)
手动指定 Pod 调度到带有特定标签的节点上,实现初步的定位控制。属于强制绑定策略,优先级高于默认调度算法
8. 亲和性(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状态