目录

1.部署安装 K8s 为什么要关闭 swap 分区?

2.解释 br_netfilter。

3.解释 kubeadm, kubectl, kubelet。

4.详细说明 K8s 集群的创建过程。

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

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

7. kubelet, kube-proxy 作用。

总结


Kubernetes(简称 K8s)是当前主流的容器编排平台,它为容器化应用提供自动化部署、扩展和管理。K8s 的强大功能和灵活性使其成为云原生架构中不可或缺的部分。

1.部署安装 K8s 为什么要关闭 swap 分区?

  • 出于对系统性能的考虑

  • Swap 的作用:Swap 是虚拟内存管理的一部分,允许操作系统在磁盘上使用额外的内存空间,弥补物理内存不足的情况。虽然它可以增加系统的可用内存,但其本质上是依赖磁盘进行数据交换。

  • 性能影响:在容器化环境中,容器对磁盘 I/O 性能有很高的要求。如果启用了 Swap,虚拟内存交换过程会带来额外的磁盘 I/O 负载,加之容器运行环境自身对磁盘的吞吐量有很高的需求,尤其是在高负载情况下。这会导致 Kubernetes 集群的整体性能下降,严重时可能会导致应用程序崩溃。

2.解释 br_netfilter。

  • 桥接流量转发:br_netfilter 模块用于将桥接流量(如 Docker 容器之间的流量)转发到 iptables 防火墙规则链中。

  • 通信影响:如果没有加载该模块,会影响同一节点node上通过 service 访问其他 pod 的流量,虽然不同节点node之间的 pod 通信不受影响。因此,确保启用 br_netfilter 是保持网络流畅的关键。

3.解释 kubeadm, kubectl, kubelet。

  1. kubeadm:Kubeadm 是 Kubernetes 集群构建工具,提供初始化集群和加入新节点的命令。通过 kubeadm init 可以初始化集群,通过 kubeadm join 向集群添加新节点。

  2. kubectl:Kubectl 是 Kubernetes 集群的命令行工具,能够对集群进行管理,并执行应用程序的部署、查看日志等操作。

  3. kubelet:Kubelet 是每个节点上运行的代理,负责和 API Server 通信,确保容器和 pod 的生命周期得到正确管理。它还负责容器存储接口(CSI)和容器网络接口(CNI)的管理。

4.详细说明 K8s 集群的创建过程。

  1. 准备工作

    • 配置服务器节点,确保每个节点的系统环境满足要求。

  2. 安装依赖组件

    • 在各个节点上安装docker-ce, docker-ce-cli, containerd.io, docker-compose-plugin;部署 CRI-Docker

  3. 关闭 Swap 和配置网络

    • 关闭 Swap 分区并加载 br_netfilter 模块,以确保 Kubernetes 节点能够正确处理桥接流量。

  4. 安装 kubeadm, kubectl 和 kubelet

    • 安装并配置 Kubernetes 核心组件:kubeadmkubectl 和 kubelet,并确保它们正常运行。

  5. 集群初始化与节点加入

    • 在 Master 节点上使用 kubeadm init 初始化集群(kubeadm.yaml),然后使用 kubeadm join 将其他节点加入集群。

  6. 部署网络插件

    • 部署如 Calico 网络插件,以实现节点间容器的网络连接。

  7. 验证集群状态

    • 检查集群状态,确保各个节点正常运行,并且网络插件配置正确。

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

  • 三层网络架构:Calico 是基于三层网络架构的虚拟网络方案,它将每个 Kubernetes 节点视为一个路由器,并为每个容器分配唯一的 IP 地址。

  • 路由与扩展性:Calico 通过 BGP(边界网关协议)来学习和维护路由规则,使得不同节点的容器能够高效通信。Calico 提供了高度的网络可扩展性,适用于大规模分布式系统。

  • 网络安全:Calico 提供了基于策略的网络安全功能,确保不同服务之间的通信可以按照预定的安全策略进行控制。

Calico 不仅提升了 Kubernetes 集群的性能,还增强了其云原生架构的可扩展性和安全性。

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

  1. kube-apiserver

    • 作为集群的控制层,kube-apiserver 处理所有的 API 请求,并暴露集群的 API 接口。它是集群管理的中心,负责所有模块之间的通信。

  2. kube-scheduler

    • kube-scheduler 负责监视所有新创建但尚未分配节点的 Pod,并选择合适的节点来运行它们。

  3. kube-controller-manager

    • kube-controller-manager 负责处理集群中的常规任务,例如确保集群资源始终维持在“期望状态”,比如 Pod 副本数等。

  4. etcd:

    • etcd 是一个分布式的键值存储,用于存储 Kubernetes 集群的所有元数据。它包括所有对象的状态、配置信息等数据,保证集群的数据一致性。

7. kubelet, kube-proxy 作用。

  1. kubelet

    • kubelet 运行在每个节点上,负责与 kube-apiserver 通信,确保节点上的容器和 Pod 正常运行。它也是容器存储接口(CSI)和容器网络接口(CNI)的管理者。

  2. kube-proxy

    • kube-proxy 也运行在每个节点上,负责监听 service 和 endpoint 的变化情况,并通过 iptables 等方式实现服务的负载均衡

总结

Kubernetes 是一个复杂而强大的容器编排平台,掌握它的部署和核心组件的作用对于运维和开发者来说至关重要。本文介绍了从安装到部署、从网络配置到集群管理的详细过程,帮助我们更好地理解和使用 Kubernetes。

 

更多推荐