关于kubernetes:每天打卡5分钟学会k8s-第四章集群架构

8次阅读

共计 1973 个字符,预计需要花费 5 分钟才能阅读完成。

明天讲的是 kubernetes 的架构简讲吧,kuberbetes cluster 有 Master 和 Node【slave】组成,节点上运行多个 kubernetes 服务。

Master 节点

Master 是 kubernetes cluster 的大脑,运行着的 Daemon 服务包含 kube-apiserver、kube-scheduler、kube-controller-manager、etcd 和 pod 网络(例如 flannel)。

  1. API Server(kube-apiserver)

这个提供了 Rest API,也就是咱们应用层所说的前端接口,各种客户端工具 CLI/UI 治理的资源的货色,如果你 须要进行二次开发的话,这个服务须要把握。

  1. scheduler(kube-scheduler)

负责讲 Pod 放在那个 Node 上运行,也就是调度时会充分考虑 cluster 的拓扑构造,以后各个节点的负载,以及利用对高可用、数据亲和性的需要

  1. Controller Manager

负责 Cluster 各种资源,爱护资源处于预期的状态,也就是运行的服务器资源,管制在一个适合的中央,不会像老 AMD CPU 那种状况。一方有难,八方围观。在 Controller 有能够分了好几种 Controller,replication、endpoints、namescpace、serviceaccounts 等

不同的 controller 治理的不同的资源,例如 replication 治理的是 deployment、statefulset、daemonset 的生命周期,namespace 治理的是 Namespace 资源

4.etcd

etcd 是一个 key/value 分布式数据库,因为他是 go 写的。所以这货色也就成为了 k8s 用来保留资状态信息和配置信息应用,自带的负载平衡里的服务发现也用到它。

  1. pod 网络

这个比拟重要了,因为 docker 是不能跨主机通信的。如果要跨主机通信,就必须本人手动开启 port 映射,如果你的容器过多,那你操作就很麻烦。flannel 刚好就帮你解决了这个问题,当然还有其余的网络计划,这是 flannel 用的人多,材料多一点。

Node 节点

所有的 node 是 pod 打工的中央,kubernetes 反对 docker、rkt 等容器 Runtime。Node 上运行的组件有 Kubelet、kube-proxy 和 Pod 网络。

Kubelet

kubelet 是 node 的 agent。当 scheduler 确定在某个 node 上运行 pod 后,会将 pod 的具体配置 image、volume 等信息发送该街道到 kubelet 而后依据这些信息创立和运行容器,并向 master 报告状态。

kube-proxy

service 在逻辑上代表了后端的多个 pod,外界是通过 service 拜访 pod。service 接管到 request 须要通过 proxy 进行代理 pod 进行容器替换,如果你的 pod 是多个正本的话,这里也会帮你主动进行负载平衡。也就是说如果你应用了 k8s 有效在应用 nginx 进行手动负载平衡这些愚昧的操作。我看到很多 php 的教程是这么搞 docker。

上面咱们就看看残缺的结构图

从图中你会发现 master 也存在 kubelet 和 kube-proxy,那是因为 master 也能够运行利用,如果你好奇的话能够去试试应用 rancher,就算是单节点它也能够创立 pod 容器的。

咱们要查看 k8s 上曾经运行的 pod 能够用上面的命令,和你用 docker ps 一样频繁

kubectl get pod --all-namespaces -o wide

k8s 的零碎组件被放到了 kube-system namespace 中。这里有一个 kube 组件,它为 cluster 提供了 dns 服务。这个服务在 k8s 初始化的时候作为附加服务装置

kubelet 是惟一没有以容器模式运行的 k8s 组件,它在 ubuntu 中通过 systemd 服务中。你能够应用进行查看服务信息

systemctl status kubelet

用例子把他们串起来

以下所有的命令都是第一章有说到

kubectl run httpd-app --image=httpd --replicas=2

k8s 部署了 deployment httpd-app,有两个正本 pod,别离运行在 k8s-node1 和 k8s-node2

他们运作的步骤是这样的

  1. kubectl 发送部署申请到 API Server
  2. API Server 告诉 Controller Mananger 创立一个 deployment pod
  3. Scheduler 执行调度工作、将两个 pod 别离散发到两个集群节点上
  4. 收到信息的节点,会本人创立并运行 pod,利用的配置和以后运行状态信息保留在 etcd 中,执行 kubectl get pod 时 API Server 会从 etcd 中读取这些数据,flannel 会为每个 pod 进行调配 ip。
正文完
 0