Kubernetes学习周报(第10期 )如何保持容器运行以调试; ETCD Raft 协议;Kubectl端口转发详解

文摘   2024-10-11 21:58   挪威  

往期回顾

Kubernetes学习周报(第9期 ): CNI 和网络命名空间;网络插件基准测试;K8S备份解决方案Velero实施指南

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 个注意事项 

 

Kubernetes学习周报 : 一周好文推荐


如何保持 Docker 容器运行以进行调试

https://devopscube.com/keep-docker-container-running/

本文提供了几种保持 Docker 容器运行的方法,以便进行调试和故障排除。 

关键点

  • - 为什么 Docker 容器在启动后立即退出。

  • - 如何通过向 Docker Entrypoint 添加前台进程来保持容器运行。

  • - 使用“docker run”命令保持容器运行的四种不同方法:交互式 shell 会话、“tail -f /dev/null”、“sleep infinity”和在入口点中使用 keep-alive 命令。

  • - 如何通过向container specification添加自定义命令来保持 Kubernetes Pod 运行。

  • - 需要基本运行容器的使用案例,例如测试/开发 Docker 镜像、系统故障排除和 Kubernetes 集群故障排除。

         

 

         

 

DIY:使用 Kubernetes 创建自己的云(第 1 部分)    

https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/

本文讨论了作者开发基于 Kubernetes 的云平台的经验,重点介绍了所使用的开源项目以及在裸机上运行 Kubernetes 时面临的挑战。  

 

关键点

  • 1. Kubernetes 生态系统:作者认为 Kubernetes 可以有效地管理租户集群,而无需依赖 OpenStack 等额外的复杂系统。

  • 2. 云与裸机:

    - Cloud Kubernetes:在云提供商处理基础设施管理时简化操作,使用户能够专注于部署应用程序。

    - 裸机 Kubernetes:由于需要在集群内管理网络、存储和负载均衡,因此更加复杂。

  • 3. 挑战:本文概述了与云环境相比,更新和维护裸机安装的困难。        

  • 4. Talos Linux:作者更喜欢使用 Talos Linux,因为它能够使用必要的内核模块创建系统镜像,从而简化部署过程。

  • 5. 部署技术:建议使用 PXE 启动将系统镜像交付到节点,并在 GitHub 上提供脚本以快速部署 Kubernetes。  

     

  • 6. GitOps 实践:建议使用 ArgoCD 和 FluxCD 等工具以声明方式管理跨多个集群的部署和更新。   

     

        

  • 7. 未来部分:本文介绍了一个系列,将涵盖 Kubernetes 中的网络、存储和虚拟机管理等主题。

         

 

文章最后推广了 Cozystack 项目,该项目旨在提供可重复且可靠的 Kubernetes 环境。


etcd 如何通过 Raft 协议实现数据的高可用性和强一致性?

https://blog.devops.dev/how-does-etcd-achieve-high-availability-and-strong-consistency-of-data-through-the-raft-protocol-2529e51550c6

本文介绍了 etcd 分布式数据库如何使用 Raft 共识算法实现高可用性和数据强一致性。它讨论了传统复制方法的问题,Raft 如何解决这些问题,以及 Raft 的 leader 选举、日志复制和安全功能的关键原则。

关键点

  • - Etcd 使用 Raft 协议快速检测 leader 节点崩溃情况,并在 follower 节点中高效选举新的 leader 提供高可用服务。

  • - Raft 将时间划分为多个术语,并使用 leader 选举流程来确保每个时期最多选举一名 leader,从而防止数据不一致。

  • - Raft leader 将日志复制到 follower 节点,通过提交过程确保日志一致性,该过程需要大多数节点在提交之前就日志条目达成一致。

  • - Raft 通过选举规则、leader completeness property、append-only 原则和日志匹配机制来确保安全,即使在 leader 崩溃的情况下也能防止数据丢失和不一致。    

         

 

Kubernetes Pod 可以附加多个网络吗?

https://medium.datadriveninvestor.com/can-a-kubernetes-pod-have-more-than-one-network-attached-6d78456dbeb2

本文讨论了 Kubernetes 如何允许使用 Multus CNI 插件以及 NMState Operator 和 OpenShift Virtualization 为 Pod 和虚拟机配置额外的网络。它概述了 Kubernetes 网络概念,解释了 CNI 插件的作用,并演示了如何使用 Multus CNI 和 NMState Operator 设置额外的网络接口。    

关键点

  • - Kubernetes 有一个网络模型,用于定义容器、Pod 和节点的通信方式。

  • - CNI 插件用于在 Linux 容器中配置网络接口。

  • - Multus CNI 允许在默认 Pod 网络之外配置其他网络。

  • - NMState Operator 用于以声明方式管理节点上的物理网络接口。

  • - OpenShift 虚拟化允许在与基于容器的工作负载相同的平台上托管和管理虚拟化工作负载。

  • - Multus CNI、NMState Operator 和 OpenShift Virtualization 协同工作,支持向 Pod 和虚拟机添加多个网络接口。

  • - 其他网络的使用案例包括网络分段、特殊流量处理、静态 IP 寻址以及从虚拟化工作负载过渡到容器化工作负载。

  • - 本文演示了如何使用 NMState Operator 配置额外的桥接网络,以及如何使用 Multus CNI 创建网络附件定义。

  • - Pod 和虚拟机可以配置为使用额外的网络接口,并可选择分配静态 IP 地址或使用 DHCP。

         

 

 

 

如何动态调整 k8s 中容器的 CPU?   

https://medium.com/@mathieuces/how-to-calculate-cpu-for-containers-in-k8s-dynamically-47a89e3886eb

本文讨论了在 Kubernetes 中动态调整容器 CPU 资源大小的方法,特别是利用特性门控 “InPlacePodVerticalScaling”。它概述了三种策略:

1. 始终使用 80% 的 CPU:

   -对已使用50%应用程序 调整到使用 80% 的 CPU。

   - 这种方法保留了 20% 作为安全边际,对于downsizing有效,但对upsizing来说是有问题的。

2. 指数级增长的 80% CPU:

   - 类似于第一种缩小策略。

   - 对于upsizing,它使用公式根据当前使用情况呈指数方式增加 CPU,从而在满容量时允许显著增加。    

3. 目标 100% 使用:

   - 调整大小以在缩容时使用 100% 的 CPU。

   - 在扩容时,它会监控 CPU 压力(由于 CPU 不足而损失的微秒)以确定必要的增加,尽管这种方法存在实际挑战。

结论

动态调整大小是 Kubernetes 的一项重大进步,有望减少资源浪费。建议使用 Kondense 等工具来实现这些策略。本文强调了该领域的持续发展以及未来 CPU 大小调整自动化的潜力。

         

 

Kubectl 端口转发流的解释

https://blog.kftray.app/kubectl-port-forward-flow-explained?showSharer=true

本文对 Kubernetes 中的 kubectl port-forward 命令进行了详细说明,涵盖了从初始化到数据传输的整个过程。

关键点    

  • - 共享有关 kubectl port-forward 命令的信息,因为官方文档没有在一个地方介绍该过程。

  • - 本文涵盖以下部分:初始化,认证和授权,Pod的信息检索,端口转发会话建立,配置iptables进行端口转发,以及SPDY会话进行端口转发。

  • - 用户通过执行 kubectl port-forward 发起端口转发进程。

  • - CLI 向 Kubernetes API 服务器发送请求,以验证用户的令牌并验证权限。

  • - CLI 通过向 Kubernetes API 服务器发送 GET 请求来检索有关目标 Pod 的基本详细信息。

  • - CLI 通过向 Kubernetes API 服务器发送 POST 请求来启动端口转发会话,API 服务器将协议切换到 SPDY。

  • - Kubernetes API 服务器指示 Kubelet 配置 iptables 进行端口转发。

  • - 用户通过 SPDY 流发送请求,与 Pod 的应用程序进行交互


加入知识星球,共同探索云原生学习之旅!

更多K8S学习资料以及SRE学习手册,请扫码关注哦!



 

云原生SRE
懂点K8S的SRE,关注云原生、DevOps、AI&ChatGPT等技术热点
 最新文章