玛卡巴卡的k8s知识点问答题(六)

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 的声明式更新、回滚和扩缩容。

工作原理:
  1. 声明期望状态:用户通过 YAML 文件定义 Deployment 的期望状态(如副本数、Pod 模板、更新策略等)。

  2. 创建 ReplicaSet:Deployment 创建一个 ReplicaSet,并由 ReplicaSet 创建和管理 Pod。

  3. 滚动更新

    • 当 Pod 模板(如镜像版本)更新时,Deployment 会创建一个新的 ReplicaSet,并逐步将 Pod 从旧 ReplicaSet 迁移到新 ReplicaSet。

    • 支持多种更新策略(如 RollingUpdateRecreate)。

  4. 回滚 :如果更新后出现问题,可以回滚到之前的版本(通过 kubectl rollout undo)。

常见用途:
  1. 部署微服务:例如部署一个 Web 服务,指定镜像和副本数:

    复制代码
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.14.2
  2. 滚动更新:更新镜像版本时,Deployment 会逐步替换旧 Pod。

  3. 蓝绿部署或金丝雀发布:结合多个 Deployment 和 Service 实现。


23. 解释 DaemonSet,列举其使用场景

DaemonSet 是 Kubernetes 中确保所有(或部分)节点上运行一个 Pod 副本的控制器。适用于需要在每个节点上运行一个实例的守护进程。

特点:
  • 每个节点自动运行一个 Pod。

  • 新节点加入集群时,DaemonSet 会自动在新节点上创建 Pod。

  • 节点被移除时,对应的 Pod 会被回收。

使用场景:
  1. 集群日志收集:如 Fluentd 或 Filebeat,在每个节点上收集日志并发送到中央存储。

  2. 监控代理:如 Prometheus 的 Node Exporter,在每个节点上收集监控数据。

  3. 网络插件:如 Calico 或 Flannel,在每个节点上运行网络代理。

  4. 存储守护进程:如 Ceph 或 GlusterFS 的客户端。

示例:
复制代码
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd
spec:
  selector:
    matchLabels:
      name: fluentd
  template:
    metadata:
      labels:
        name: fluentd
    spec:
      containers:
      - name: fluentd
        image: fluentd:latest

24. 什么是 StatefulSet,其主要作用是什么?

StatefulSet 是 Kubernetes 中用于管理有状态应用的控制器,为 Pod 提供稳定的标识符(如持久化存储、网络标识和有序部署/扩展)。

主要作用:
  1. 稳定的网络标识

    • 每个 Pod 有固定的主机名(如 <statefulset-name>-<ordinal-index>)和 DNS 记录。

    • 通过 Headless Service 提供唯一的 DNS 解析。

  2. 持久化存储

    • 每个 Pod 可以绑定一个或多个 PersistentVolume,即使 Pod 被重新调度,存储也会保留。

    • 使用 volumeClaimTemplates 动态创建 PVC。

  3. 有序部署和扩展

    • Pod 按顺序创建/删除(从 0 到 N-1),适合主从架构的应用(如 MySQL 主从)。

    • 缩容时按逆序终止(从 N-1 到 0)。

适用场景:
  1. 数据库集群:如 MySQL、PostgreSQL 或 MongoDB 的主从复制。

  2. 消息队列:如 Kafka 或 RabbitMQ,需要持久化存储和稳定网络标识。

  3. 分布式存储系统:如 Elasticsearch 或 Zookeeper。

示例:
复制代码
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  serviceName: mysql
  replicas: 3
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        volumeMounts:
        - name: data
          mountPath: /var/lib/mysql
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 10Gi
与 Deployment 的区别:
  • StatefulSet 适用于有状态应用,Deployment 适用于无状态应用。

  • StatefulSet 提供稳定的存储和网络标识,Deployment 不保证。

相关推荐
阿里云云原生8 小时前
LLM 不断提升智能下限,MCP 不断提升创意上限
云原生
阿里云云原生8 小时前
GraalVM 24 正式发布阿里巴巴贡献重要特性 —— 支持 Java Agent 插桩
云原生
云上艺旅11 小时前
K8S学习之基础七十四:部署在线书店bookinfo
学习·云原生·容器·kubernetes
c无序11 小时前
【Docker-7】Docker是什么+Docker版本+Docker架构+Docker生态
docker·容器·架构
FixBug_Nick11 小时前
使用Docker安装及使用最新版本的Jenkins
docker·容器·jenkins
ghostwritten13 小时前
Run Milvus in Kubernetes with Milvus Operator
容器·kubernetes·milvus
Zero_to_zero123413 小时前
解决docker的ubuntu系统中文乱码问题
ubuntu·docker·容器
@郭小茶13 小时前
docker-compose方式部署docker项目
运维·docker·容器
duration~15 小时前
K8S自定义CRD
容器·贪心算法·kubernetes
ghostwritten16 小时前
Docker Registry Clean
运维·docker·容器