目錄
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/v1beta1kind: CronJobmetadata:name: datenamespace: defaultspec:schedule: '*/1 * * * *'jobTemplate:metadata:spec:template:metadata:spec:containers:- image: busybox:latestname: hellorestartPolicy: 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/v1kind: ClusterRolemetadata:name: secret-reader ?rules: ?#保存此ClusterRole的所有策略規則- apiGroups: ?# "" 指定核心 API 組 ? - apiGroups: [""] 這樣寫也可以- ""resources: ?#可以操作的資源- secretsverbs: ?#操作權限- get- list- watch----------------apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: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/v1kind: HorizontalPodAutoscalermetadata:name: deployment-hpanamespace: defaultspec:maxReplicas: 10 ?minReplicas: 1 ?scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: deployment-hpatargetCPUUtilizationPercentage: 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: v1kind: Podmetadata:name: liveness-tcp ? namespace: default ? spec:containers:- image: nginx:latest ? imagePullPolicy: IfNotPresentlivenessProbe: ?#用于檢測節點是否處于存活(健康)狀態,如有異常會直接重啟podtcpSocket: ?port: 80 ?initialDelaySeconds: 30 ?#延時30秒開始運行檢測periodSeconds: 3 ?#每隔3秒執行一次liveness probename: 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: v1kind: LimitRangemetadata:name: mem-limit-rangenamespace: defaultspec:limits:- default: ?memory: 512Mi cpu: 2000MdefaultRequest: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/v1kind: DaemonSetmetadata:name: fluentd namespace: defaultspec:revisionHistoryLimit: 10 ?#保留回滾的舊歷史記錄數selector:matchLabels: ?#控制pod所需的標簽必須一致 ? ? ? ? ? ?app: fluentd ?template:metadata:labels:app: fluentd spec:containers:- image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2 ?imagePullPolicy: IfNotPresentname: fluentd-container01 ?nodeSelector:kubernetes.io/os: linuxrestartPolicy: AlwaysschedulerName: default-schedulertolerations: ? #指定污點節點集群中新增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=ssdkubectl get nodes node --show-labels | grep ssd 查詢標簽-----------------------------------------------------------------apiVersion: v1kind: Podmetadata: name: nginx-nodeselector namespace: defaultspec:containers:- image: nginx:latest name: nginx-nodeselectorimagePullPolicy: IfNotPresent nodeSelector: ? #選擇器,匹配節點標簽disktype: ssd ?Pod只會被調度到帶有
disktype=ssd
標簽的節點,若無可調度的節點則處于Pending狀態