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