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

目录

[9. Calico 网络插件在 K8s 集群的作用。](#9. Calico 网络插件在 K8s 集群的作用。)

[1. 提供容器网络连接](#1. 提供容器网络连接)

[2. 实现网络策略(Network Policy)](#2. 实现网络策略(Network Policy))

[3. 提供网络安全功能](#3. 提供网络安全功能)

[4. 高性能和可扩展性](#4. 高性能和可扩展性)

[5. 多平台支持](#5. 多平台支持)

[6. 灵活的部署选项](#6. 灵活的部署选项)

[7. 可视化和监控](#7. 可视化和监控)

总结

[10. kube-apiserver, etcd, kube-controller-manager, kube-scheduler 的作用。](#10. kube-apiserver, etcd, kube-controller-manager, kube-scheduler 的作用。)

[1. kube-apiserver](#1. kube-apiserver)

[2. etcd](#2. etcd)

[3. kube-controller-manager](#3. kube-controller-manager)

[4. kube-scheduler](#4. kube-scheduler)

组件之间的协作关系

总结

[11. kubelet, kube-proxy 作用。](#11. kubelet, kube-proxy 作用。)

[1. kubelet](#1. kubelet)

[2. kube-proxy](#2. kube-proxy)

组件之间的协作关系

总结

[12. 什么是 K8s 的 namespace?](#12. 什么是 K8s 的 namespace?)


9. Calico 网络插件在 K8s 集群的作用。

Calico是一个开源的网络和网络安全解决方案,在k8s集群中是非常重要的角色,主要用于提高网络连接、网络策略和网络安全功能。以下是主要作用:

1. 提供容器网络连接

Calico 为 Kubernetes 集群中的 Pod 提供网络连接,确保 Pod 之间可以相互通信。它通过以下方式实现:

  • IP 地址管理(IPAM):Calico 为每个 Pod 分配唯一的 IP 地址,并管理 IP 地址的分配和回收。

  • 路由分发 :Calico 使用 BGP(Border Gateway Protocol) 协议在集群节点之间分发路由信息,确保 Pod 之间的流量能够正确路由。

  • 支持多种网络模式

    • Overlay 模式:使用 IP-in-IP 或 VXLAN 封装技术,适用于跨子网的集群。

    • 非 Overlay 模式:直接路由模式,适用于同一子网内的集群,性能更高。


2. 实现网络策略(Network Policy)

Calico 提供了强大的网络策略功能,允许用户定义精细化的网络访问规则,控制 Pod 之间的通信。这些策略可以用于:

  • 限制 Pod 的入口和出口流量:例如,只允许特定的 Pod 或命名空间之间的通信。

  • 实现微服务的安全隔离:通过策略限制服务之间的访问,提高安全性。

  • 支持 Kubernetes 原生的 NetworkPolicy API:Calico 完全兼容 Kubernetes 的 NetworkPolicy 资源,用户可以通过 YAML 文件定义策略。

示例 NetworkPolicy

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: backend
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 80

3. 提供网络安全功能

Calico 通过以下方式增强 Kubernetes 集群的安全性:

  • 基于身份的微隔离:通过标签(Labels)和选择器(Selectors)定义策略,实现基于身份的访问控制。

  • 加密通信:支持 WireGuard 加密技术,确保 Pod 之间的通信安全。

  • 防止 IP 欺骗:Calico 会验证 Pod 的 IP 地址,防止 IP 欺骗攻击。


4. 高性能和可扩展性

  • 高性能:Calico 的非 Overlay 模式(直接路由)避免了额外的封装和解封装开销,提供了接近原生网络的性能。

  • 可扩展性:Calico 支持大规模的 Kubernetes 集群,能够处理数千个节点和数万个 Pod。


5. 多平台支持

Calico 不仅支持 Kubernetes,还支持其他容器编排平台,如 OpenShift、Rancher 等。此外,Calico 还可以与云服务商(如 AWS、GCP、Azure)的网络集成。


6. 灵活的部署选项

Calico 支持多种部署方式,包括:

  • Kubernetes 集成:通过 Kubernetes 的 CNI(Container Network Interface)插件部署。

  • 独立部署:可以作为独立的网络解决方案部署在非 Kubernetes 环境中。

  • 托管服务:通过 Tigera 提供的托管服务(如 Calico Cloud)获得企业级支持。


7. 可视化和监控

Calico 提供了丰富的可视化和监控工具,帮助用户更好地理解和管理集群中的网络流量和策略:

  • Calico UI:提供网络拓扑、策略状态和流量监控的可视化界面。

  • Prometheus 集成:支持将网络指标导出到 Prometheus,方便用户进行监控和告警。


总结

Calico 在 Kubernetes 集群中的作用可以概括为:

  1. 提供高效的容器网络连接

  2. 实现精细化的网络策略,增强安全性。

  3. 支持高性能和可扩展性,适用于大规模集群。

  4. 提供丰富的网络安全功能,如加密通信和微隔离。

  5. 支持多平台和灵活的部署选项

10. kube-apiserver, etcd, kube-controller-manager, kube-scheduler 的作用。

首先先来看官网的一张图:

1. kube-apiserver

  • 作用 :Kubernetes API 服务器,是 Kubernetes 集群的前端接口,所有与集群的交互都通过它进行。

  • 功能

    • 提供 RESTful API,供用户、命令行工具(如 kubectl)和其他组件访问。

    • 验证和授权请求(通过认证、授权和准入控制机制)。

    • 处理资源的创建、更新、删除和查询操作(如 Pod、Service、Deployment 等)。

    • 将集群的期望状态(Desired State)写入 etcd

  • 特点

    • 是无状态的,所有状态都存储在 etcd 中。

    • 支持水平扩展,可以通过部署多个实例来提高可用性和性能。

2. etcd

  • 作用 :分布式键值存储,是 Kubernetes 集群的持久化存储,用于保存集群的所有配置数据和状态信息。

  • 功能

    • 存储 Kubernetes 集群的元数据,如节点信息、Pod 信息、服务信息、配置信息等。

    • 提供高可用性和一致性,确保集群状态的一致性和可靠性。

    • 支持 Watch 机制,其他组件可以通过 Watch 监听 etcd 中的数据变化。

  • 特点

    • 是 Kubernetes 集群的唯一数据源 ,所有组件都依赖 etcd 获取集群状态。

    • 支持分布式部署,确保高可用性

3. kube-controller-manager

  • 作用 :控制器管理器,负责运行 Kubernetes 中的各种控制器,确保集群的当前状态与期望状态一致。

  • 功能

    • 包含多个控制器,每个控制器负责管理特定类型的资源。常见的控制器包括:

      • Node Controller:监控节点的状态,处理节点故障。

      • Replication Controller:确保 Pod 的副本数与期望值一致。

      • Deployment Controller:管理 Deployment 的创建、更新和回滚。

      • Service Controller:管理 Service 和 Endpoints 的创建和更新。

      • Namespace Controller:管理命名空间的生命周期。

    • 通过 Watch 机制监听 etcd 中的资源变化,并根据期望状态进行调整。

  • 特点

    • 控制器是 Kubernetes 实现声明式 API的核心组件。

    • 控制器通过不断调谐(Reconcile)确保集群状态与期望状态一致。

4. kube-scheduler

  • 作用:调度器,负责将新创建的 Pod 分配到合适的节点上运行。

  • 功能

    • 根据 Pod 的资源需求(如 CPU、内存)和节点的可用资源,选择合适的节点。

    • 考虑调度策略和约束条件,如节点亲和性(Node Affinity)、Pod 亲和性(Pod Affinity)、污点和容忍(Taints and Tolerations)等。

    • 支持扩展和自定义调度策略。

  • 特点

    • 调度器只负责决策,不负责实际的 Pod 启动和运行。

    • 调度器是无状态的,所有调度决策都基于当前集群状态。


组件之间的协作关系

  1. 用户通过 kubectl 或其他客户端工具向 kube-apiserver 发送请求,例如创建 Pod。

  2. kube-apiserver 验证请求并将资源信息写入 etcd

  3. kube-scheduler 监听 etcd 中的未调度 Pod ,并根据调度策略为 Pod 选择合适的节点,然后将调度结果写入 etcd

  4. kube-controller-manager 监听 etcd 中的资源状态,并根据期望状态进行调整。例如,确保 Pod 的副本数与期望值一致。

  5. 节点上的 kubeletkube-apiserver 获取调度到本节点的 Pod 信息,并启动 Pod。


总结

组件 作用 关键功能
kube-apiserver Kubernetes 的前端接口,处理所有请求 提供 API、验证请求、写入 etcd
etcd 分布式键值存储,保存集群状态 存储集群元数据、提供高可用性和一致性
kube-controller-manager 运行控制器,确保集群状态与期望状态一致 管理节点、Pod、Service 等资源的状态
kube-scheduler 调度 Pod 到合适的节点 根据资源需求和调度策略选择节点

11. kubelet, kube-proxy 作用。

kubelete会在集群中的每个节点上运行,它保证容器都运行在Pod中。

1. kubelet

  • 作用:Kubernetes 节点上的主要代理组件,负责管理节点上的 Pod 和容器。

  • 功能

    1. Pod 生命周期管理

      • kube-apiserver 获取调度到本节点的 Pod 信息。

      • 根据 Pod 的配置启动、停止和管理容器。

      • 确保 Pod 中的容器处于运行状态,并在容器失败时重启它们。

    2. 资源监控

      • 监控节点上的资源使用情况(如 CPU、内存、磁盘等),并将这些信息上报给 kube-apiserver
    3. 容器健康检查

      • 执行 livenessProbereadinessProbe,确保容器的健康状态。
    4. 镜像管理

      • 拉取 Pod 所需的容器镜像,并管理镜像的缓存。
    5. 与容器运行时交互

      • 通过 CRI(Container Runtime Interface)与容器运行时(如 Docker、containerd)交互,执行容器的创建、启动和停止操作。
    6. Volume 和网络管理

      • 挂载 Pod 所需的 Volume(如 ConfigMap、Secret、Persistent Volume 等)。

      • 配置 Pod 的网络命名空间和网络接口。

  • 特点

    • 是 Kubernetes 集群中每个节点上必须运行的组件。

    • 直接与容器运行时和操作系统交互,是 Kubernetes 管理容器的核心组件。

2. kube-proxy

  • 作用:Kubernetes 节点上的网络代理组件,负责实现 Service 的网络转发和负载均衡。

  • 功能

    1. Service 的实现

      • 监听 kube-apiserver 中的 Service 和 Endpoints 变化。

      • 根据 Service 的配置,为每个 Service 创建虚拟 IP(ClusterIP)和端口。

    2. 流量转发

      • 将发送到 Service ClusterIP 的流量转发到后端的 Pod。

      • 支持多种代理模式:

        • userspace 模式:流量通过用户空间的代理程序转发(性能较低,已逐渐淘汰)。

        • iptables 模式 :使用 Linux 的 iptables 规则实现流量转发(性能较高,是默认模式)。

        • IPVS 模式:使用 Linux 的 IPVS(IP Virtual Server)实现流量转发(性能最高,支持更复杂的负载均衡算法)。

    3. 负载均衡

      • 在多个 Pod 之间分配流量,实现负载均衡。
    4. 网络策略支持

      • 配合网络插件(如 Calico、Cilium)实现网络策略(Network Policy)的流量控制。
  • 特点

    • 是 Kubernetes 集群中每个节点上必须运行的组件。

    • 通过维护节点上的网络规则,确保 Service 的流量能够正确转发到后端的 Pod。

组件之间的协作关系

  1. kubeletkube-apiserver 的交互

    • kubeletkube-apiserver 获取调度到本节点的 Pod 信息。

    • kubelet 将节点的状态(如资源使用情况、Pod 状态)上报给 kube-apiserver

  2. kube-proxykube-apiserver 的交互

    • kube-proxy 监听 kube-apiserver 中的 Service 和 Endpoints 变化。

    • kube-proxy 根据 Service 的配置更新节点上的网络规则。

  3. kubeletkube-proxy 的协作

    • kubelet 负责启动和管理 Pod 中的容器。

    • kube-proxy 负责将 Service 的流量转发到这些容器。


总结

组件 作用 关键功能
kubelet 管理节点上的 Pod 和容器 启动/停止容器、监控资源、健康检查、镜像管理、Volume 挂载
kube-proxy 实现 Service 的网络转发和负载均衡 流量转发、负载均衡、维护网络规则

12. 什么是 K8s 的 namespace?

在k8s中,namespace提供一种机制,将同一集群中的资源划分未相互隔离的组。同一命名空间中的资源名称要唯一,但是跨命名空间没这个要求。

13.namespace和cgroup的关系?

1. Namespace(命名空间)

  • 作用:Namespace 是 Kubernetes 中的一种逻辑分区机制,用于将集群资源划分为多个虚拟集群。

  • 功能

    • 资源隔离:将资源(如 Pod、Service、Deployment 等)划分到不同的命名空间中。

    • 权限控制:通过 RBAC 限制用户或团队对特定命名空间的访问权限。

    • 资源配额管理:为命名空间设置资源配额,限制其资源使用量。

  • 级别:Namespace 是 Kubernetes 集群级别的概念,主要用于组织和隔离 Kubernetes 资源。


2. 控制组(cgroups)

  • 作用:cgroups 是 Linux 内核的一种机制,用于限制、记录和隔离进程组的资源使用(如 CPU、内存、磁盘 I/O 等)。

  • 功能

    • 资源限制:限制进程组可以使用的资源量(如 CPU、内存)。

    • 资源统计:记录进程组的资源使用情况。

    • 优先级控制:为进程组分配不同的资源使用优先级。

  • 级别:cgroups 是操作系统级别的概念,主要用于管理单个节点上的进程资源。


3. Namespace 和 cgroups 的关系

虽然 Namespace 和 cgroups 都涉及资源隔离和管理,但它们的作用范围和层次不同:

(1)作用范围
  • Namespace:作用于 Kubernetes 集群级别,用于隔离 Kubernetes 资源(如 Pod、Service 等)。

  • cgroups:作用于操作系统级别,用于隔离和管理单个节点上的进程资源。

(2)资源管理
  • Namespace:通过资源配额(Resource Quota)和限制范围(Limit Range)管理 Kubernetes 资源的使用。

  • cgroups:通过 Linux 内核机制管理进程的资源使用(如 CPU、内存)。

(3)协作关系
  • 在 Kubernetes 中,cgroups 是实现资源限制的基础。例如,当你在 Kubernetes 中为 Pod 设置资源请求(requests)和限制(limits)时,Kubernetes 会通过 cgroups 在节点上实施这些限制。

  • Namespace 的资源配额(如 CPU、内存)最终会通过 cgroups 在节点上生效。例如,如果你为某个命名空间设置了 CPU 配额,Kubernetes 会通过 cgroups 限制该命名空间中所有 Pod 的 CPU 使用。


4. 示例:Namespace 和 cgroups 的协作

假设你在 Kubernetes 中创建了一个命名空间 my-namespace,并为其设置了资源配额:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: my-quota
  namespace: my-namespace
spec:
  hard:
    requests.cpu: "2"
    requests.memory: "4Gi"
    limits.cpu: "4"
    limits.memory: "8Gi"

当你在 my-namespace 中创建 Pod 时,Kubernetes 会通过以下步骤实施资源管理:

  1. Kubernetes 调度器:根据 Pod 的资源请求(requests)和节点的可用资源,将 Pod 调度到合适的节点。

  2. kubelet:在节点上启动 Pod 的容器,并通过 cgroups 设置容器的资源限制(如 CPU、内存)。

  3. cgroups:在操作系统级别限制容器的资源使用,确保其不超过命名空间的资源配额。


5. 总结

  • Namespace 是 Kubernetes 中的逻辑分区机制,用于隔离和管理 Kubernetes 资源。

  • cgroups 是 Linux 内核的机制,用于隔离和管理进程资源。

  • 协作关系

    • Namespace 的资源配额和限制通过 cgroups 在节点上实施。

    • cgroups 是实现 Kubernetes 资源管理的基础。

相关推荐
二楼后座。3 小时前
mac 被禁用docker ui后,如何使用lima虚拟机启动docker
macos·docker·容器·lima
孔令飞3 小时前
11 | 给 Gin 服务器添加中间件
人工智能·ai·云原生·golang·kubernetes
ThisIsClark3 小时前
【K8s】使用Kubernetes的resources字段中的requests和limits字段控制Pod资源使用
云原生·容器·kubernetes
笑远3 小时前
无服务器数据库
数据库·云原生·serverless
孔令飞4 小时前
12 | 给应用添加优雅关停功能
人工智能·ai·云原生·golang·kubernetes
小涵4 小时前
【DevOps】Backstage介绍及如何在Azure Kubernetes Service上进行部署
docker·容器·kubernetes·azure·devops·backstage
小刘爱喇石( ˝ᗢ̈˝ )4 小时前
hadoop框架与核心组件刨析(五)ZOOKEEPER及选举深度刨析
hadoop·zookeeper·云原生
a_j585 小时前
k8s面试题总结(十二)
云原生·容器·kubernetes
瑟王5 小时前
Kubernetes教程(七)了解集群、标签、Pod和Deployment
云原生·容器·kubernetes