探索Kubernetes节点架构

93 阅读3分钟

照片:Danny SaltarenonUnsplash

在本指南中,我们将探讨Kubernetes中的节点架构,以及你的容器如何通过网络相互通信

吊舱、节点和容器

在绿色中,你可以看到吊舱。我们在节点1上有Pod 1、Pod 2和Pod 3,在节点2上有Pod 4、Pod 5和Pod N。在这些豆荚中,你可以看到里面的容器。另外,你可以看到Pod 2Pod 5上的一个容器,用红色表示。如果你看一下Pod 3,你也可以有多个容器。它有2个容器,Pod 1有3个容器。

这些容器可以使用端口号和localhost轻松地相互通信。如果你有两个小服务,一个是后台,另一个是认证服务,它们可以很容易地通过网络相互通信,就像集群中的Pod也可以相互通信一样,但这必须要通过网络。上图中Pod中的那些容器是在Docker上运行的,在你的节点上,你需要安装Docker。你也可以使用其他容器引擎,但最好总是使用Docker。

Kubelet和一个Kube-proxy

在这些节点上,你还要运行Kubelet和Kube-proxy服务。Kubelet负责启动pod。它将连接到主节点以获得信息。

Kube-proxy将把关于这些节点上有哪些pod的信息反馈给iptables。因此,每当一个新的pod启动时,Kube-proxy将改变iptables规则,以确保你的pod在集群内可以被路由。

服务

记住服务如何工作的最简单方法就是把自己想象成一个负载平衡器😅。你的服务可以是AWS上的ELB(Elastic Load Balancer)。AWS上的这个弹性负载平衡器将是公开的,这样互联网上的客户就可以连接到你的负载平衡器,然后你的负载平衡器将流量转发到你的Kubernetes集群,该集群将列出所有节点,流量将全部到达iptables。

iptables拥有将流量转发到另一个节点的规则。例如,如果Pod在第二个节点上,那么它将转发流量到Pod和Pod中的特定容器。服务和节点之间的通信是通过一个端口进行的。在AWS的情况下,你可以将你的ELB配置为使用一个端口,这样你的所有节点都可以监听该端口,iptables将把来自该端口的流量路由到正确的pod。

要把这个转化为Yaml文件。

apiVersion: v1
kind: Pod
metadata:
name: hello-world.example.com
labels:
app: hello-world
spec:
containers:
- name: docker-demo
image: thecraftman/docker-demo
ports:
- name: python-port
containerPort: 3000

从上面的配置来看,我们有一个容器和pod的定义。 spec指的是一个容器,而这个容器指的是我们上图中pod中的红色块。整个绿色的pod实际上就是你在上面的yaml配置中看到的完整定义。容器就是你在spec下面看到的一切。

如果你会有两个容器,你只会有一个带有两个容器的规格。

谢谢你

喜欢阅读吗?在下面留下一些 "掌声",以便其他人能够找到这篇文章 🙂


探索Kubernetes节点架构。最初发表于Nerd For Techon Medium,人们通过强调和回应这个故事继续对话。