溫馨提示×

centos k8s最佳實踐案例

小樊
34
2025-10-11 09:33:55
欄目: 智能運維

CentOS環境下Kubernetes(K8s)最佳實踐案例

一、基礎環境準備:系統加固

在CentOS上部署K8s前,需完成系統級別的安全與性能優化,確保集群穩定性:

  • 關閉不必要的服務:停止并禁用firewalldsystemctl stop firewalld && systemctl disable firewalld),避免端口沖突;禁用SELinux(sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0),防止權限限制導致組件無法正常運行;關閉Swap分區(swapoff -a并注釋/etc/fstab中的swap行),提升K8s性能。
  • 配置主機名與hosts文件:為每個節點設置唯一主機名(如master、node1,使用hostnamectl set-hostname命令),并在所有節點的/etc/hosts文件中添加集群內部IP與主機名映射(如192.168.1.10 master),確保節點間通過主機名通信。
  • 時間同步:安裝并配置chrony服務(yum install chrony -y && systemctl enable chrony && systemctl start chrony),同步所有節點時間,避免因時間不一致導致的組件異常(如etcd數據不一致)。

二、K8s集群部署:高可用架構設計

為實現K8s集群的高可用,需重點配置多Master節點負載均衡

  • 多Master節點部署:至少部署3個Master節點(如master1、master2、master3),每個節點執行kubeadm init初始化命令(指定--apiserver-advertise-address為當前節點IP、--pod-network-cidr為Pod網段,如10.244.0.0/16),生成集群配置。
  • 負載均衡配置:使用HAProxy+Keepalived搭建Master節點的高可用負載均衡:
    • 安裝HAProxy(yum install haproxy -y),編輯/etc/haproxy/haproxy.cfg,添加前端監聽端口(如16443)和后端Master節點列表(如server master1 192.168.1.10:6443 check、server master2 192.168.1.11:6443 check),實現流量分發。
    • 安裝Keepalived(yum install keepalived -y),配置虛擬IP(VIP,如192.168.1.200),通過VRRP協議實現Master節點故障時的VIP漂移,確保API Server的高可用。

三、網絡配置:CNI插件與網絡策略

K8s集群的網絡通信依賴CNI插件,同時需通過網絡策略限制Pod間流量:

  • CNI插件部署:選擇支持高可用的CNI插件(如Calico),執行kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml命令部署,實現Pod間、Pod與節點間的網絡互通。
  • 網絡策略定義:使用NetworkPolicy資源限制Pod間通信(如僅允許同一Namespace下的frontend Pod訪問backend Pod),提升集群安全性。示例策略:
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: frontend-to-backend
      namespace: default
    spec:
      podSelector:
        matchLabels:
          app: backend
      ingress:
      - from:
        - podSelector:
            matchLabels:
              app: frontend
    

四、安全加固:從系統到應用的全鏈路防護

K8s集群的安全需覆蓋系統層、集群層、應用層三個維度:

  • 系統層安全
    • 定期更新CentOS內核與K8s組件(使用yum update更新系統,kubeadm upgrade更新K8s),修復已知漏洞。
    • 配置kubelet參數(修改/var/lib/kubelet/config.yaml),啟用readOnlyRootFilesystem(容器根目錄只讀)、allowPrivilegeEscalation: false(禁止提權),限制容器權限。
  • 集群層安全
    • 認證與授權:啟用TLS雙向認證(kubeadm init時自動配置),使用RBAC(基于角色的訪問控制)限制用戶權限(如開發人員僅能訪問dev Namespace,管理員擁有集群管理權限)。
    • etcd安全:啟用etcd靜態加密(修改/etc/kubernetes/manifests/etcd.yaml,添加--encryption-provider-config=/etc/kubernetes/encryption-config.yaml參數),保護Secret數據。
  • 應用層安全
    • 鏡像安全:使用可信鏡像倉庫(如Harbor),部署前通過Trivy掃描鏡像漏洞(如trivy image centos:7),阻斷高風險鏡像入集群;鏡像內避免存儲敏感信息(如密碼、密鑰),使用ConfigMapSecret管理配置。
    • Secret管理:使用Kubernetes Secret存儲敏感信息(如數據庫密碼),并通過Vault CSI驅動實現動態密鑰注入(避免Secret硬編碼在Pod中)。

五、監控與運維:保障集群穩定性

有效的監控與運維是K8s集群長期穩定運行的關鍵:

  • 監控與告警:使用Prometheus+Grafana搭建集群監控體系(Prometheus采集節點、Pod、etcd等指標,Grafana可視化展示),配置告警規則(如節點宕機、Pod重啟次數超過閾值),及時發現異常。
  • 日志收集與分析:使用EFK(Elasticsearch+Fluentd+Kibana)堆棧收集集群日志(Fluentd采集節點日志,Elasticsearch存儲,Kibana可視化),方便排查應用故障(如容器崩潰日志、訪問日志)。
  • 備份與恢復:定期備份etcd數據(使用etcdctl snapshot save命令,如etcdctl snapshot save /backup/etcd-snapshot.db),并測試恢復流程(使用etcdctl snapshot restore恢復數據),確保數據安全。

六、應用部署:最佳實踐案例

應用部署時需遵循標準化高可用原則:

  • Deployment配置:使用Deployment資源管理應用(而非直接創建Pod),設置replicas(副本數≥2,確保高可用)、resources.requests/limits(CPU/內存請求與限制,避免資源爭搶)、livenessProbe(存活探針,檢測應用是否健康,如curl -f http://localhost:8080/health)、readinessProbe(就緒探針,檢測應用是否可接收流量,如curl -f http://localhost:8080/ready)。
  • ConfigMap與Secret:將應用配置(如數據庫連接串)存儲在ConfigMap中(kubectl create configmap my-config --from-file=config.properties),通過volumeMount掛載到Pod;敏感信息(如數據庫密碼)存儲在Secret中(kubectl create secret generic db-password --from-literal=password=123456),通過環境變量或volumeMount注入。
  • 多副本與親和性:部署無狀態應用時,設置replicas≥2,并通過affinity規則(如podAntiAffinity)將Pod分散到不同節點(避免單節點故障導致多個Pod不可用),提升應用可用性。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女