K8s 是 Kubernetes 的缩写, 源于 Google 的 Borg 的开源版本. 是一套自动化容器运维平台, 负责部署, 调度, 节点集群的扩展, 是管理 docker 容器的工具.
核心概念
集群(Cluster) 是计算, 存储和网络资源的整合. K8s 使用这些资源运行各种程序.
主控(Master) 是集群的控制节点, 整个集群中至少有 1 个主控节点, 用于执行集群的管理命令. 为保证可用性, 一般要部署多个主控节点.
API Server
提供资源增删改查的 Http Rest 接口, 用于管理集群数据, 负责认证授权, 集群校验, 集群状态变更. 控制集群配额, 提供模块间的通信和交互渠道.Controller Manager
管理 Node, Pod, Endpoint, Namespace, Service Account, 资源配额(Resource Quota). 及时发现 down 机的 Node, 并且自动修复.Scheduler
通过算法将 Pod 调度到 Node 上, 即为绑定(Bind). 输入 Pod + 可用 Node 列表 => 输出调度算法选择的 Node, 并且将其绑定.Etcd
保存集群所以网络配置和对象的状态信息
节点(Node) 是除了主控之外的其他节点, 承担主要计算功能. 出现故障时, 主控节点可以对 Node 节点进行替换操作.
- kubelet 用于处理 master 下发的任务, 管理 pod 和容器. 使用 CAdvisor 监控容器节点资源, 向 API Server 注册信息, 上报节点资源负载.
- kube-proxy 监听 API Server 中定义服务的变化, 创建路由规则进行服务负载.
- Docker Engine 负责容器的创建管理.
Pod 是 K8s 的基本操作单元, 在 Node 中被创建, 启动, 销毁. 其中的多个应用容器是紧耦合的, 其中有一个 Pause 容器, 为 Pod 中其他容器共享网络和数据卷, 所以 Pod 中的多个服务直接通信和数据交换更高效. 相同 Pod 中的应用, 可以使用 localhost
进行之间的通信, 共享 Pause 的 IP 地址 和 Volume 卷.
服务(Service) 是相同的 Pod 组合起来对外的访问接口, 类似负载均衡. 一般服务拥有唯一的名字, 虚拟 IP 地址和端口号, 只能内部访问, 除非指定 IP 和 Node 端口或者提供外部负载均衡器.
卷(Volume) 为容器提供数据的持久化方案和跨容器数据共享服务. K8s 的生命周期与 Pod 相同而非容器(多个容器组成 Pod 对外服务, 其中一个容器 down 机, Kubelet 将其重启, 不影响 Pod 整体). Pod 删除后, 卷数据是否丢失取决于卷数据类型. emptyDir 是多容器共享卷, 随着 Pod 生命周期消亡. 持久化数据卷是独立于计算资源的物理存储资源, 不属于任何 Node 节点, 除非人工删除不会消失.
命名空间(Namespace) 将系统内的对象分配到不同命名空间中, 形成逻辑上的不同项目, 小组, 用户组. 可以在共享整个集群资源的同时还可以分别管理. 默认情况下会使用 default 空间. 相同命名空间中的对象具有相同的访问控制策略.
安装方法
可以选择使用软件包工具(yum, apt, rpm 文件, deb 文件等), 下载二进制包, 编译源代码, 以及 kubeadm(位于二进制包中) 快速安装.
在后面我们会逐一尝试这几种安装方式.