k8s 的一个小总结(未完待补充)
李二花 / 2020-03-10
关键词: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