往期回顾
Kubernetes学习周报(第8期 ):K8S网络数据包管理之旅;当K8S和 Go 不能很好地协同工作时;K8S探针配置
Kubernetes学习周报(第7期 ):K8S容器运行时CRI接口;Kluctl管理集群API;K8S无服务器应用监控
Kubernetes学习周报(第六期 ):K8S API 实用指南;Etcd灾难恢复方案;K8S Gateway API介绍
Kubernetes学习周报(第五期 ): K8S隐藏的“OOM 终止”问题;一个K8S命令引发的悲剧;Cilium的BGP功能
Kubernetes学习周报(第四期 ): K8S中使用 Wireshark;K8S安全清单;如何缩小Docker镜像
Kubernetes学习周报(第三期 ): Kubernetes 健康检查,如何使用 runc 生成容器
Kubernetes学习周报 : 一周好文推荐,K8s 网络请求分析,多集群 Kubernetes 的 7 个注意事项
CNI 和网络命名空间 — 完整指南 — 第 1 部分
https://medium.com/@alexandre.mahdhaoui_34782/cni-and-network-namespaces-complete-guide-part-1-b174b21e0f7c
本文是有关使用 CNI(容器网络接口)和网络命名空间进行容器联网的综合指南的第一部分。它介绍了网络命名空间的概念,并演示了如何使用 iproute2 和 veth 设备创建和连接两个命名空间。该指南分为五个部分,每个部分侧重于容器网络的不同方面,包括创建 CNI 插件和配置容器运行时。
关键点
- 使用 Containerd 和 CRI-O 等工具介绍网络命名空间及其在容器网络中的作用。
- 使用 iproute2 和 veth 设备创建和连接两个网络命名空间的步骤指南。
- 介绍如何配置 IP 地址和路由以启用命名空间之间的通信。
- 结论,强调了当前方法的可扩展性问题,并预告了下一部分关于使用 Bridge 接口的预告。
Kubernetes 网络插件 (CNI) 在 40Gbit/s 网络上的基准测试结果 [2024]
https://itnext.io/benchmark-results-of-kubernetes-network-plugins-cni-over-40gbit-s-network-2024-156f085a5e4e
本文介绍了 40Gbit/s 网络上的 Kubernetes 网络插件 (CNI) 的全面基准测试,根据性能、效率和资源消耗比较了各种 CNI。它讨论了测试方法、硬件设置和结果中的见解,为根据特定使用案例选择 CNI 提供了建议。
关键点
- 基准测试涉及使用截至 2024 年 1 月更新的 CNI 测试 Kubernetes 1.26 和 Ubuntu 22.04。
- 根据主动维护和对网络策略的支持等标准,选择了 7 个 CNI 进行基准测试。[
- 总共测试了 21 个 CNI 变体,包括使用 WireGuard 和 eBPF 的配置。
- 测试设置包括通过 40Gbit 交换机连接的三台 Supermicro 服务器,只需进行最少的系统调整即可反映实际情况。
- 基准测试协议涉及多项测试,以评估不同场景下的 TCP 和 UDP 带宽。
- 从 10Gbit 到 40Gbit 网络的过渡带来了挑战,例如 iperf3 等单线程测量工具的局限性。
- 使用 statexec 工具进行监控,以最小的资源开销捕获系统指标。
- 基准测试结果可通过开源资源进行探索,从而进行详细分析。
- 由于性能和带宽降低,CNI 中的加密通常会导致 CPU 使用率降低。
- 内存使用率与带宽无关,效率是使用“CPU 效率”指标来衡量的。
- 基准测试显示,CNI 之间的性能差异很小,eBPF 在 TCP 多流场景中表现出略有优势。
- UDP 性能通常很差,引发了对 HTTP/3 等协议的担忧。
- Calico VPP 需要大量调整才能实现最佳性能。
- WireGuard 在效率上优于 IPsec,但缺乏密钥轮换功能。
- 建议包括用于低资源集群的 Kube-router 和用于标准集群的 Cilium
- 建议将 Calico VPP 用于具有广泛硬件和软件优化的微调集群。
Result for test [dts] Direct pod-to-pod TCP bandwidth with a Single stream
Result for test [sts] Pod to Service TCP bandwidth with a Single stream
Kubernetes 节点中的可分配内存和 CPU
https://learnk8s.io/allocatable-resources
Kubernetes 集群中部署的 Pod 会消耗内存、CPU 和存储资源。但是,并非 Node 中的所有资源都可用于运行 Pod。操作系统和 kubelet 也需要内存和 CPU,您应该满足这些额外的资源。如果您仔细观察单个节点,则可以将可用资源划分为:运行操作系统和系统守护程序(如 SSH、systemd 等)所需的资源;运行 Kubernetes 代理所需的资源,例如 Kubelet、容器运行时、节点问题检测器等;Pod 可用的资源。正如您可以猜到的那样,所有这些配额都是可自定义的。
关键点
- 并非 Kubernetes 节点中的所有 CPU 和内存都可用于 Pod;OS 和 Kubernetes 代理也需要资源。
- Kubernetes 节点中的资源分配是可定制的。GKE、AKS 和 EKS 等主要服务都有自己的分配规则。
- GKE 根据节点的总资源预留特定百分比的内存和 CPU。
- 较大的实例在可分配资源方面可能更有效。
- EKS 使用代码实现来确定预留资源,并根据每个实例的 Pod 数量进行限制。
- AWS 提供了一个脚本来计算每个 EC2 实例的最大 Pod 数量。
- AKS 根据每个 Pod 的固定内存量或总内存的百分比(以较低者为准)保留内存。
- 较大的节点可能并不总是具有成本效益的;考虑开销、HA 策略和自动扩展等因素。
Kubernetes 中POD如何优雅关闭
https://learnk8s.io/graceful-shutdown
本文详细介绍了如何在 Kubernetes 中处理正常关闭。它涵盖了在 Pod 启动或关闭时防止连接断开的重要性,并讨论了优雅地管理长时间运行的任务和连接的技术。本文深入探讨了创建和删除 Pod 所涉及的过程、Kubernetes 组件(如 kubelet)的作用,以及如何有效地处理端点更新以避免停机。
关键点
- 本文讨论了在 Kubernetes 中 Pod 启动或关闭时如何防止连接断开。
- 介绍了创建 Pod 的过程,包括 kubelet、容器运行时接口 (CRI)、容器网络接口 (CNI) 和容器存储接口 (CSI) 的角色。
- 本文介绍了 Kubernetes 如何处理端点及其在路由流量中的重要性。
- 它重点介绍了删除 Pod 的过程,以及如果不及时更新端点可能发生的争用条件。
- 本文建议在应用程序中使用 preStop 钩子或 await,以确保正常关闭并避免争用条件。
- 它讨论了长时间的正常关闭对集群自动扩展的影响,并建议保持较短的关闭时间。
- 本文建议对具有长期任务的应用程序使用 rainbow 部署,以避免在更新期间中断。
Kubernetes 授权审计的乐趣 - 多个 authz 插件
https://raesene.github.io/blog/2024/04/22/Fun-with-Kubernetes-Authz/
本文讨论了 Kubernetes 授权审计的复杂性,尤其是在使用多种授权机制时。它强调了在同时使用 RBAC 和 webhook 授权方的集群中审计权限的挑战,并指出并非所有权限都可以通过标准工具(如 'kubectl auth can-i --list')看到。本文强调了对每个授权系统进行人工审查的必要性,以确保全面审计。
关键点
- Kubernetes 灵活的安全模型允许多种身份验证和授权模式,从而导致审计权限的复杂性。
- Kubernetes 鉴权者是按顺序查询的,有效权限基于他们的响应。
- kubectl auth can-i命令有助于审查权限,但在具有多个授权方的集群中,其输出可能不完整。
- Webhook 授权方不支持列出权限,因此他们的权限可能不会显示在 'kubectl auth can-i --list' 中。
- 有效的审计需要审查集群中的每个授权系统,因为自动化工具可能无法覆盖所有系统。
K8S 备份解决方案:Velero 实施指南(英文)
https://weng-albert.medium.com/k8s-backup-solution-velero-implementation-guide-en-ec06cb6b50dd
本文提供了将 Velero 实施为 Kubernetes 环境的备份解决方案的全面指南。它重点介绍了 Velero 的功能,例如 Kubernetes 资源和持久卷的备份和迁移,并详细介绍了部署过程,包括与 Minio 的集成以进行存储。本文还介绍了备份和恢复过程、自定义资源定义 (CRD) 的使用以及备份和卷快照的存储位置的配置。此外,它还讨论了 Velero 如何将对象存储数据与 Kubernetes 同步,并提供了部署和验证 Velero 的分步说明。
关键点
- Velero 用于备份和迁移 Kubernetes 资源和持久卷,在本地和云环境中运行。
- Velero 的主要功能包括备份和恢复功能、集群资源传输和生产环境复制。它使用 CRD 来管理操作并将备份存储在对象存储中。
- 备份过程包括创建名为 “Backup” 的 CRD 对象,然后收集数据并上传到对象存储。持久性卷的快照可以使用参数进行调整。
- Velero 允许指定备份保留期,并提供删除过期备份的机制。同步可确保对象存储中的备份资源反映在 Kubernetes 中。
- Velero 的部署步骤包括创建 Minio 存储桶、安装 Velero 客户端、配置 Minio 身份验证、部署 Velero 服务器以及验证设置。
- 备份和恢复操作包括创建测试备份、验证结果、删除命名空间以及从备份中恢复。
Essential Kubernetes 自动扩展指南:使用 Prometheus 进行 Karpenter 监控
https://www.perfectscale.io/blog/karpenter-monitoring-with-prometheus?utm_campaign=new-letter&utm_medium=referral&utm_source=learnk8_nl
本文讨论了 Kubernetes 自动扩展和监控 Karpenter(AWS 使用 Prometheus 的一个开源项目)的重要性。它强调了 Karpenter 在高效资源管理中的作用,以及监控其性能以优化 Kubernetes 集群的重要性。本文提供了 Karpenter 遇到的问题的真实示例,强调需要使用 Prometheus 和 Grafana 进行特定的监控和警报设置,以确保及时检测和解决潜在问题。
关键点
- Kubernetes 自动扩展对于高效的资源管理至关重要,Karpenter 可以根据需求自动配置和停用节点。
- 使用 Prometheus 监控 Karpenter 对于深入了解 Kubernetes 自动扩展性能至关重要。
- 一个示例问题涉及由于 AMI 中的错误而导致的待处理 Pod,这凸显了监控和快速响应的重要性。
- 设置 Prometheus 监控涉及在 Karpenter helm 图表中启用 serviceMonitor 并使用 Grafana 进行可视化。
- Prometheus 中的警报可以帮助检测未注册节点、资源限制和云提供商错误等问题。
- 适当的监控和警报增强了主动解决 Kubernetes 基础设施中异常的能力。
更多K8S学习资料以及SRE学习手册,请扫码关注哦!