Pod与容器的区别联系
1、容器与Pod之间的联系体现在它们都是Kubernetes核心组件,用于构建、部署和管理微服务架构。Pod负责管理一组相关的容器,并提供统一的网络与存储资源。容器则作为Pod中的基本运行单元,承载应用逻辑。容器提供了轻量级的虚拟化环境,使得应用在不同环境中快速部署与运行成为可能。
2、包含关系,Pod和容器的关系是包含关系。在Kubernetes中,一个Pod可以包含一个或多个容器,每个容器都是一个独立运行的应用程序或服务的实例。这些容器共享相同的网络命名空间、存储卷和其他资源,形成了一个逻辑上的整体,使得它们可以作为一个整体进行部署和管理。
3、总结来说,Pod 是容器的协作容器,它们共同构建了一个高效、共享的运行环境。如果你对Pod和容器的运作机制还不太清楚,通过本期内容,相信你已经有了更深入的理解。
4、Pod作为Kubernetes调度的原子单位,简化了复杂的协同调度设计,通过资源需求声明定义在Pod上,实现容器之间基于网络的联系。Sidecar容器模式则通过组合不同角色的容器,增强主应用容器功能,降低复杂度,实现高内聚、低耦合的软件开发。
5、容器镜像,作为轻量级、独立且可执行的软件包,包含运行所需代码、运行时、系统工具、库与配置,携带创建容器说明,可通过脚本自定义或使用公开仓库。容器镜像承载封装应用及其依赖,支持单独运行,构建并推送到仓库后引用于Pod。容器解耦应用与底层基础设施,简化跨云或OS环境部署。
6、Pod是Kubernetes的基本计算单元,它将一个或多个容器封装在一起,并共享相同的名称空间和本地网络。Pod中的容器可以互相通信,仿佛它们在同一台机器上,同时保持一定程度的隔离。Pod被用作Kubernetes的复制单元,确保负载均衡和故障恢复。Pod应保持较小的规模,通常只包含一个主进程和紧密耦合的辅助容器。
k8s在创建pod时先创建pause容器,还是先与cni交互执行网络
总结,Kubernetes在创建pod时,先启动pause容器以创建命名空间,然后pod中的其他容器共享这个命名空间,实现进程间的隔离和独立封装。通过pause容器的命名空间机制,确保了容器之间的资源隔离和通信隔离,有效管理了容器在集群中的运行。
接下来是init容器。它们在Pod中的其他容器启动之前开始执行,并执行初始化逻辑,如创建用户账户、执行数据库迁移或创建数据库结构。在创建init容器时,需要考虑资源和限制的优先级分配,因为init容器总是先于其他应用程序容器启动。调度程序将为init容器分配更高的资源优先级,因此在定义这些参数时应保持严格。
在部署不使用CRI-O的k8s集群,采用kube-ovn网络插件时,需要进行一系列的准备工作和配置。首先,确保加载必要的内核模块并安装ipvsadm。接着,更新yum源,安装Go语言环境,为cri-o的安装做准备。安装cri-o时,从源码包下载并生成默认配置。随后,安装conmon,同样是从源码获取并安装。
Calico+macvlan双网络为实现Calico+macvlan双网络配置,必须创建一个辅助网络,专门用于macvlan。配置时需避免将默认路由设置为macvlan网络,以避免路由冲突。确保`vmultus-cni.io/defaul...`注解设置为`net-calico-2`,而`k8s.vcni.cncf.io/netw...`注解设置为`net-macvlan`。
然而,CNI网桥仅管理k8s创建的容器(Pod),对于通过docker run单独启动的容器,docker仍然会将其连接到docker0网桥上,因此这些容器的IP地址将属于docker0的170/16网段。相比之下,在calico网络环境中,无论是IPIP还是BGP模式,cni0网桥并不适用,网桥设备主要还是docker0。
理解K8s的网络:pods、services、ingress
K8s的网络理解两个pod共享命名空间,特别是Pods、Services和Ingress,可以总结如下两个pod共享命名空间:Pods: 定义:Pods是构成Kubernetes应用的基本单元,包含了一个或多个容器以及它们共享的网络栈。 网络命名空间:Pods的网络命名空间与宿主机的物理网络命名空间独立,通过自定义桥接与宿主机相连。
Ingress资源 定义:Ingress是用于在Kubernetes集群中暴露从集群外部访问的服务的一种方式,类似于一个7层负载均衡器。 功能:通过Ingress可以建立映射规则,将外部请求转发到集群内部的服务。Ingress Controller负责将这些规则转换为Nginx的配置。 核心概念: 服务引入:定义哪些服务可以通过Ingress访问。
LoadBalancer类型的Service除了NodePort功能外,还会在集群外部添加负载均衡设备,以实现更广泛的外部访问。另一种提供服务暴露的资源是Ingress,它通过一个NodePort或LB实现多个服务的暴露。
Ingress 前面介绍的内容都围绕Service,主要解决网络层的问题,Ingress的出现主要是解决应用层的问题。Ingress实际上充当一个反向代理的角色,和Nginx的功能很类似。Kubernetes中广泛使用的Nginx Ingress其本质就是一个Nginx服务。Ingress依赖LoadBalancer类型的Service,因为它自己没有暴露集群内服务到外部的能力。
Ingress支持动态更新,无需重启应用或重建服务调整路由规则。通过更新Ingress对象,K8s自动更新负载均衡器配置,仅允许指定请求到达特定服务。