k8s 各种概念 —— 《Kubernetes权威指南》第一章读书笔记

资源总架构

Kubernetesç®è¦ä»ç»

Master

  • api server 进程:接收和执行控制命令,是集群控制入口,对集群所有资源“增删改查”。
  • replication controller 进程:所有资源自动化控制中心。
  • scheduler 进程:资源(Pod)调度。
  • etcd server:K8S 集群所有数据存储在 etcd。

Node

  • 早期叫 minion
  • 代表一个机器。可以是物理机,也可以是虚拟机。
  • 每个 Node 上可有多个 Pod。
  • Node 宕机,其上 Pod 被 Master 自动转移到其他 Node。
  • kubnet 进程:负责 Pod 对应的容器的创建启停。与 Master 一起完成集群管理。
  • kube-proxy:实现 K8S service 的通信与负载均衡。
  • Docker engine:负责本机容器的创建。
  • Node 可在运行中动态加入集群。

Pod

  • 包含 跟容器 Pause + 其他用户容器。
  • Pause 作用1:一个容器死亡,算 Pod 总体死亡吗?引入无关紧要且不容易挂掉的 Pause 容器,以其状态代表 Pod 状态。
  • Pause 作用2:Pod 内多个业务容器共享 Pause 容器 IP。 共享 Pause 容器挂接的 Volume。既简化了密切关联的业务容器之间的通信问题,也解决了文件共享问题。
  • 每个 Pod 可以为其使用的资源设限。

Label

  • label 是一个 key=value 键值对。
  • label 可附加到任何资源上。如 Node,Pod,RC,Service。
  • 可在资源定义时指定,也可在对象创建后动态添加。
  • 通过 Label Selector 查询和筛选拥有某些 label 的资源对象。
  • Kube-Controller 进程通过资源对象 RC 上定义的 Label Selector 来筛选要监控的 Pod 副本数量。从而实现 Pod 副本数量符合 RC 中定义。
  • Kube-Proxy 进程通过 Service 的 Label Selector 来选择 Pod,自动建立起每个 Service 到对应 Pod 的请求转发路由表,从而实现 Service 的只能负载均衡机制。
  • 通过某些 Node 定义特定的 Label,并且在 Pod 定义文件中使用 NodeSelector 这种标签调度策略,kube-scheduler 进程可实现 Pod 定向调度的特性。

Replication Controller

RC 定义包括

  • Pod 期待副本数 (replicas)。
  • RC 包含完整的 Pod 定义模板。
  • RC 通过 Label Selector 实现对 Pod 副本的自动控制。
  • 通过改变 RC 中的副本数量,K8S 实现自动扩容缩容。
  • 通过改变 RC 中的镜像版本,K8S 实现升级回滚等。

Service

  • service 即微服务。
  • service 通过 label selector 将一群 Pod 作为真正处理请求的后端。
  • service 定义了一个服务的访问入口(cluster IP)。Cluster IP 是一个虚拟 IP,无法被 Ping,因为它没有实体网络对象(既无软件也无硬件)。Cluster IP 仅属于当前 K8S 集群的内部地址,在集群外不可用。

K8S 内部访问 Service

  • K8S 集群内的应用可以通过 cluster IP 直接访问到此 service 后端的 Pod,至于访问哪个 Pod,由负载均衡算法决定(默认 RR)
  • 请求从 Client -> clusterIP -> Client 所在 Node 的 kube-proxy 进程 -> Service 后端 Pod。
  • 内部访问有“userspace 代理模式”,“iptables 代理模式”,“IPVS 代理模式”,详见官网:https://kubernetes.io/zh/docs/concepts/services-networking/service/。但每种代理模式都是 Client 所在 Node 完成负载均衡及请求路由的。

  • “userspace 代理模式”下,负载均衡由 Client 所在 Node 的 kube-proxy 进程 完成。使用哪个 backend Pod,是 kube-proxy 基于 SessionAffinity 来确定的。

扫描二维码关注公众号,回复: 8666221 查看本文章

(本图为 userspace 代理模式)

K8S 外部访问 Service

3个概念

  • Node IP:Node 的物理地址。
  • Pod IP:每个 Pod 的 IP,是由 Docker Engine 根据 docker0 网桥的 ip 地址段进行分配的,通常是一个虚拟的二层网络。
  • Cluster IP:Server 的虚拟 IP,不能 Ping,无“实体网络对象”。

外部访问

  • Cluster IP 不能在 K8S 集群外访问。
  • 采用 NodePort 可以让每个 Node 的 IP 可供外部访问。在 service 定义中做如下扩展即可。
  • NodePort 的实现方式是在 K8S 集群内每个 Node 上需要外部访问的 Service 开启一个对应的 TCP 监听端口,外部系统只要用任意一个 Node 的 IP + 具体的 NodePort 端口即可访问此服务。即直接访问具体 Node。
  • 那么怎么做负载均衡呢?用户可在 K8S 集群外部署单独的 HAProxy 或者 Nginx 。

发布了34 篇原创文章 · 获赞 0 · 访问量 1372

猜你喜欢

转载自blog.csdn.net/justsomebody126/article/details/103966320