21. 什么是 ReplicaSet,說明它的主要用途。
ReplicaSet是k8s中的一個控制器,他用于保證任何時候,都有指定數量的Pod副本在運行,他是RC的升級版,支持更靈活的Pod選擇器(基于集合的標簽選擇)
主要用途:
1.確保Pod的高可用性:通過維護一組穩定的Pod副本,即使某些Pod失敗或被刪除,RS也會自動創建新的Pod來維持期望的副本數。
2.水平拓展:可以通過臺哦正replicas字段來手動擴展或伸縮Pod的數量。
3.與Deployment配合使用:RS通常不直接使用,而是作為Deployment的底層機制,由Deploymen管理RS以實現滾動更新和回滾功能。(每個版本都是不同的一個RS,通過控制不同版本的RS的POD的數量實現滾動更新)
22. Deployment 控制器是如何工作的,舉例說明其常見用途。
Deployment 是 Kubernetes 中用于管理無狀態應用的控制器,它通過管理 ReplicaSet 來實現 Pod 的聲明式更新、回滾和擴縮容。
工作原理:
-
聲明期望狀態:用戶通過 YAML 文件定義 Deployment 的期望狀態(如副本數、Pod 模板、更新策略等)。
-
創建 ReplicaSet:Deployment 創建一個 ReplicaSet,并由 ReplicaSet 創建和管理 Pod。
-
滾動更新:
-
當 Pod 模板(如鏡像版本)更新時,Deployment 會創建一個新的 ReplicaSet,并逐步將 Pod 從舊 ReplicaSet 遷移到新 ReplicaSet。
-
支持多種更新策略(如
RollingUpdate
或Recreate
)。
-
-
回滾:如果更新后出現問題,可以回滾到之前的版本(通過
kubectl rollout undo
)。
常見用途:
-
部署微服務:例如部署一個 Web 服務,指定鏡像和副本數:
apiVersion: apps/v1 kind: Deployment metadata:name: nginx-deployment spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2
-
滾動更新:更新鏡像版本時,Deployment 會逐步替換舊 Pod。
-
藍綠部署或金絲雀發布:結合多個 Deployment 和 Service 實現。
23. 解釋 DaemonSet,列舉其使用場景
DaemonSet 是 Kubernetes 中確保所有(或部分)節點上運行一個 Pod 副本的控制器。適用于需要在每個節點上運行一個實例的守護進程。
特點:
-
每個節點自動運行一個 Pod。
-
新節點加入集群時,DaemonSet 會自動在新節點上創建 Pod。
-
節點被移除時,對應的 Pod 會被回收。
使用場景:
-
集群日志收集:如 Fluentd 或 Filebeat,在每個節點上收集日志并發送到中央存儲。
-
監控代理:如 Prometheus 的 Node Exporter,在每個節點上收集監控數據。
-
網絡插件:如 Calico 或 Flannel,在每個節點上運行網絡代理。
-
存儲守護進程:如 Ceph 或 GlusterFS 的客戶端。
示例:
apiVersion: apps/v1
kind: DaemonSet
metadata:name: fluentd
spec:selector:matchLabels:name: fluentdtemplate:metadata:labels:name: fluentdspec:containers:- name: fluentdimage: fluentd:latest
24. 什么是 StatefulSet,其主要作用是什么?
StatefulSet 是 Kubernetes 中用于管理有狀態應用的控制器,為 Pod 提供穩定的標識符(如持久化存儲、網絡標識和有序部署/擴展)。
主要作用:
-
穩定的網絡標識:
-
每個 Pod 有固定的主機名(如
<statefulset-name>-<ordinal-index>
)和 DNS 記錄。 -
通過 Headless Service 提供唯一的 DNS 解析。
-
-
持久化存儲:
-
每個 Pod 可以綁定一個或多個 PersistentVolume,即使 Pod 被重新調度,存儲也會保留。
-
使用
volumeClaimTemplates
動態創建 PVC。
-
-
有序部署和擴展:
-
Pod 按順序創建/刪除(從 0 到 N-1),適合主從架構的應用(如 MySQL 主從)。
-
縮容時按逆序終止(從 N-1 到 0)。
-
適用場景:
-
數據庫集群:如 MySQL、PostgreSQL 或 MongoDB 的主從復制。
-
消息隊列:如 Kafka 或 RabbitMQ,需要持久化存儲和穩定網絡標識。
-
分布式存儲系統:如 Elasticsearch 或 Zookeeper。
示例:
apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql
spec:serviceName: mysqlreplicas: 3selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: mysql:5.7volumeMounts:- name: datamountPath: /var/lib/mysqlvolumeClaimTemplates:- metadata:name: dataspec:accessModes: ["ReadWriteOnce"]resources:requests:storage: 10Gi
與 Deployment 的區別:
-
StatefulSet 適用于有狀態應用,Deployment 適用于無狀態應用。
-
StatefulSet 提供穩定的存儲和網絡標識,Deployment 不保證。