关键词:ubuntu, k8s

熟悉 k8s

初步认识

  • Node 其实就是用于工作的服务器
  • Deployment 可理解为一种对期望状态的描述
  • Pod 作为集群中可调度的最小单元
  • Docker 是我们选择的容器运行时,可运行我们构建的服务镜像,减少在环境方面所做的重复工作,并且也非常便于部署。除了 Docker 外还存在其他的容器运行时。

整体架构

k8s


                               +-------------+                              
                               |             |                              
                               |             |               +---------------+
                               |             |       +-----> |     Node 1    |
                               | Kubernetes  |       |       +---------------+
+-----------------+            |   Server    |       |                      
|       CLI       |            |             |       |       +---------------+
|    (Kubectl)    |----------->| ( Master )  |<------+-----> |     Node 2    |
|                 |            |             |       |       +---------------+
+-----------------+            |             |       |       
                               |             |       |       +---------------+
                               |             |       +-----> |     Node 3    |
                               |             |               +---------------+
                               +-------------+               

  • Kubectl:官方提供的名为 kubectl 的 CLI (Command Line Interface)工具,用于使用 K8S 开放的 API 来管理集群和操作对象等
  • Master: 是一种角色(Role),表示在这个 Node 上包含着管理集群的一些必要组件, 生产环境中,为了保障集群的高可用,我们通常会部署多个 Master
  • Node: 是用于工作的机器

Master

Master 是整个 K8S 集群的大脑: 接收,发布,存储

+----------------------------------------------------------+          
| Master                                                   |          
|              +-------------------------+                 |          
|     +------->|        API Server       |<--------+       |          
|     |        |                         |         |       |          
|     v        +-------------------------+         v       |          
|   +----------------+     ^      +--------------------+   |          
|   |                |     |      |                    |   |          
|   |   Scheduler    |     |      | Controller Manager |   |          
|   |                |     |      |                    |   |          
|   +----------------+     v      +--------------------+   |          
| +------------------------------------------------------+ |          
| |                                                      | |          
| |                Cluster state store                   | |          
| |                                                      | |          
| +------------------------------------------------------+ |          
+----------------------------------------------------------+         
  • cluster state store: 存储集群所有需持久化的状态,并且提供 watch 的功能支持,可以快速的通知各组件的变更等操作, 是一个 etcd
  • api server: 整个集群的入口,类似于人体的感官,接收外部的信号和请求,并将一些信息写入到 etcd 中
  • controller manager: 调节集群的状态, 当集群的配置发生变更,控制器就会朝着预期的状态开始工作
  • scheduler: 调度器,它会持续的关注集群中未被调度的 Pod ,并根据各种条件,比如资源的可用性,节点的亲和性或者其他的一些限制条件,通过绑定的 API 将 Pod 调度/绑定到 Node 上。

Node

则运行着三个必要的组件 kubelet, container runtime (一般是 Docker), kube-proxy

+--------------------------------------------------------+       
| +---------------------+        +---------------------+ |       
| |      kubelet        |        |     kube-proxy      | |       
| |                     |        |                     | |       
| +---------------------+        +---------------------+ |       
| +----------------------------------------------------+ |       
| | Container Runtime (Docker)                         | |       
| | +---------------------+    +---------------------+ | |       
| | |Pod                  |    |Pod                  | | |       
| | | +-----+ +-----+     |    |+-----++-----++-----+| | |       
| | | |C1   | |C2   |     |    ||C1   ||C2   ||C3   || | |       
| | | |     | |     |     |    ||     ||     ||     || | |       
| | | +-----+ +-----+     |    |+-----++-----++-----+| | |       
| | +---------------------+    +---------------------+ | |       
| +----------------------------------------------------+ |       
+--------------------------------------------------------+  
  • kubelet: 实现了集群中最重要的关于 Node 和 Pod 的控制功能
  • container runtime: 下载镜像和运行容器
  • kube proxy: Node 上启动一个 kube-proxy 的进程,通过编排 iptables 规则来让 Service 访问到 Pod