k8s各组件介绍

一.k8s中组件

1.etcd

键值对数据库。存储集群的整个状态,配置等。

参考:https://blog.csdn.net/w2009211777/article/details/123982273

2.kube-apiserver

是k8s所有组件交互的通道。其它组件不会两两交互,都通过apiServer组件交互

参考:https://www.jianshu.com/p/a6cc40ec3dfa

1. node和master之间通过load balancer负载均衡连接,node通过负载均衡可以访问到master的api-server
2. master上的controllerManager、Scheduler、kubelet都是通过load balancer来和api-server通信的,并不是直接通信
3. 只有api-server可以访问到etcd cluster存储
4. load-balancer可以通过多种策略生成(keepalived+nginx是其中一种)
5. api-server用来k8s架构中组件进行通信,开发者访问。客户访问node上的服务,通过kube-proxy

3.controllermanager

集群中每一个特定资源都会有相应的Controller来维护其状态,当资源当即或发生故障时,controller会通过apiserver提供的watch apiserver接口实时发现并执行自动化修复流程,而controller Manager是把所有的controller聚合起来,统一管理。比如改变副本数量,contruller会调用apiserver进行优化。

参考:https://www.cnblogs.com/liuxingxing/p/14388729.html

4.Scheduler

核心功能是监听apiserver 来获取 PodSpec.NodeName 为空的 pod,然后为每个这样的 pod 创建一个 binding 指示 pod 应该调度到哪个节点上。

在整个系统中起"承上启下"作用,承上:负责接收Controller Manager创建的新的Pod,为其选择一个合适的Node;启下:Node上的kubelet接管Pod的生命周期

5.kubelet

负责监听节点上pod的状态,同时上报节点和节点上面pod的状态,负责与master节点通信,并管理上面的pod。 参考: https://www.cnblogs.com/liuxingxing/p/14392399.html master节点装kubelet是为了可以看到master节点的状态(kubectl get node)

6.kube-proxy

kube-proxy:负责pod之间的通信和负载均衡,将指定的流量分发到后端正确的节点上 。

master可无。不是源pod

6.1 模式

修改kube-system模式

kubectl edit cm kube-proxy -n kube-system 

查看Kube-Proxy模式:curl 127.0.0.1:10249/proxyMode

ipvs工作模式:监听master节点增加和删除service以及endpoint的消息,调用netlink接口创建相应的ipvs规则。通过ipvs规则,将流量转发到相应的pod上

  1. 查看kube-proxy的端口(30868是dashboard的service的端口)

  2. 查看ipvs规则路由

  3. 命令kubectl get pods -n kubernetes-dashboard -owide查看

    可以看到kube-proxy暴露的端口最后是转发到了node2的8443端口上

iptables规则:监听master节点增加和删除service以及endpoint的消息,对于每一个service,它都会创建一个iptables规则,将service的clusterip代理到后端对应的pod

6.3 模式对比

当模式非常多的时候,iptables性能极具下降,ipvs是基于内核的所以应用会相对来说更加宽泛

7.pod

  • k8s中最小的单元,由一组、一个或多个容器组成,每个pod包含一个pause容器,pause容器时pod的父容器,主要负责僵尸进程的回收管理

  • 自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不会重建

  • 控制器创建的pod:kubernetes通过控制器创建的pod,这种pod删除了之后还会自动重建

为什么要有pod?

  • k8s可编排的不止docker一种容器,只要是符合CRI标准都可以
  • 一个pod中包括多个容器,容器之间通信简单

二.其他组件

1.calico

复合CNI标准的网络插件,会给每个pod生成一个唯一的ip地址,并把每个节点当作一个路由器,这样不同节点上的pod可跨节点进行相互通信

2.coredns

用于kubernetes集群内部service的解析,可以让pod把service名称解析成ip地址(每次创建service都跟之前不一样,所以一般都是通过名称来代表),然后通过service的ip地址进行连接到对应应用上。

posted @ 2023-02-26 11:37  MISF  阅读(201)  评论(0编辑  收藏  举报
     JS过度和变形效果演示   
  
    html5.png