k8s介绍
概念介绍
参照
Kubernetes 有如下几个核心的功能
- 服务的发现与负载的均衡;
- 容器的自动装箱,我们也会把它叫做 scheduling,就是“调度”,把一 个容器放到一个集群的某一个机器上,Kubernetes 会帮助我们去做 存储的编排,让存储的声明周期与容器的生命周期能有一个连接;
- Kubernetes 会帮助我们去做
自动化的容器的恢复 。在一个集群中, 经常会出现宿主机的问题或者说是 OS 的问题,导致容器本身的不可 用,Kubernetes 会自动地对这些不可用的容器进行恢复; - Kubernetes 会帮助我们去做
应用的自动发布与应用的回滚 ,以及与 应用相关的配置密文的管理; - 对于 job 类型任务,Kubernetes 可以去做
批量的执行 ; - 为了让这个集群、这个应用
更富有弹性 ,Kubernetes 也支持水平的 伸缩 。
kubernetes功能详解
- 调度 Kubernetes 可以把用户提交的容器放到 Kubernetes 管理的集群的某 一台节点上去。Kubernetes 的调度器是执行这项能力的组件,它会观察 正在被调度的这个容器的大小、规格。
比如说它所需要的 CPU 以及它所需要的 memory ,然后在集群中找一台 相对比较空闲的机器来进行一次 placement,也就是一次放置的操作。在 这个例子中,它可能会把红颜色的这个容器放置到第二个空闲的机器上, 来完成一次调度的工作 - 自动修复 Kubernetes 有一个节点健康检查的功能,它会监测这个集群中所有的宿 主机,当宿主机本身出现故障,或者软件出现故障的时候,这个节点健康 检查会自动对它进行发现。 下面 Kubernetes 会把运行在这些失败节点上的容器进行自动迁移,迁移 到一个正在健康运行的宿主机上,来完成集群内容器的一个
自动恢复
3. 水平伸缩 Kubernetes 有业务负载检查的能力,它会监测业务上所承担的负载,如 果这个业务本身的 CPU 利用率过高,或者响应时间过长,它可以对这个 业务进行一次扩容 。 比如说在下面的例子中,黄颜色的过度忙碌,Kubernetes 就可以把黄颜 色负载从一份变为三份。接下来,它就可以通过负载均衡把原来打到第一 个黄颜色上的负载平均分到三个黄颜色的负载上去,以此来提高响应的时 间。
Kubernetes 的架构
Kubernetes 架 构 是 一 个 比 较 典 型 的 二 层 架 构 和 server-client 架 构 。 Master 作为中央的管控节点,会去与 Node 进行一个连接所有 UI 的、clients、这些 user 侧的组件,只会和 Master 进行连接, 把希望的状态或者想执行的命令下发给 Master,Master 会把这些命令或 者状态下发给相应的节点,进行最终的执行。
Kubernetes 的 Master 包含四个主要的组件:API Server、Controller、 Scheduler 以及 etcd
k8s 组件介绍(kubernetes)
查看组件
https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-apiserver/
-
kube-api server:Kubernetes API server 为 api 对象验证并配置数据 ,包括 pods、services、 replication,controllers 和其它 api 对象,API Server 提供 REST 操作和到集群共享状态的前端,所有其他组件通过它进行交互。 主要作用:组件与组件之间的通信 https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-scheduler/ -
Kubernetes scheduler :调度器是一个拥有丰富策略、能够感知拓扑变化、支持特定负载的功能组件 ,它对集群的可用性、性能表现以及容量都影响巨大。 scheduler 需要考虑独立的和集体的资源需求 、服务质量需求、硬件/软件/策略限制、亲和与反亲和规范、数据位置、内部负载接口、截止时间等等。如有必要,特定的负载需求可以通过 API 暴露出来。
主要作用:依据 它对 CPU、对 memory 请求大小,找一台合适的节点,进行放置 https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-controller-manager/
- kube-
controller -manager:控制器Controller Manager 作为集群内部的管理控制中心 ,负责集群内的 Node、Pod 副本 、服务端点 (Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个 Node意外宕机时,Controller Manager 会及时发现并执行自动化修复流程 ,确保集群始终处于预期 的工作状态。
主要用于:自动 对容器进行修复 、水平扩张 https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-proxy/
- kube-proxy : Kubernetes
网 络 代 理 运 行 在 node 上,它反映了 node 上Kubernetes API 中定义的服务,并可以通过一组后端进行简单的 TCP、UDP 流转发或循环模式(round robin))的 TCP、UDP 转发,用户必须使用 apiserver API 创建一个服务来配置代理,其实就是 kube-proxy 通过在主机上维护网络规则并执行连接转发来实现 Kubernetes 服务访问 。
https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kubelet/
- kubelet:是主要的节点代理,它会
监视已分配给节点的 pod ,具体功能如 下: 向 master 汇报 node 节点的状态信息 接受指令并在 Pod 中创建 docker 容器 准备 Pod 所需的数据卷 返回 pod 的运行状态 在 node 节点执行容器健康检查
https://github.com/etcd-io/etcd
- etcd 是 Kubernetes 提供默认的存储系统,
保存所有集群数据 ,使用时需要为 etcd数据提供备份计划 ,key-value存储 API Server 中所需要的这些原 信息都被放置在 etcd 中,etcd 本身是一个高可用系统,通过 etcd 保证整个 Kubernetes 的 Master 组件的高可用性。
Server端 和node端 组件有哪些
Server端
Server控制端:通过API接受用户指令 创建,删除容器,代码升级 apiserver controller-manager scheduler etcd kubectl 命令行工具 kube-proxy
node节点
node节点:真正运行容器的地方,是真正运行业务负载的 每个业务负载会以 Pod 的形式运行
kublelet kube-proxy 在 OS 上去创建容器所需要运行的环境,最终把容器或者 Pod 运行起 来,也需要对存储跟网络进行管理。Kubernetes 并不会直接进行网络存 储的操作,他们会靠 Storage Plugin 或者是网络的 Plugin 来进行操作。 用 户 自 己 或 者 云 厂 商 都 会 去 写 相 应 的 Storage Plugin 或 者 Network Plugin,去完成存储操作或网络操作。 在 Kubernetes 自己的环境中,也会有 Kubernetes 的 Network,它是 为了提供 Service network 来进行搭网组网的。(等一下我们也会去介 绍“service”这个概念。)真正完成 service 组网的组件的是 Kube-proxy , 它是利用了 iptable 的能力来进行组建 Kubernetes 的 Network,就是 cluster network,以上就是 Node 上面的四个组件。
用户可以通过 UI 或者 CLI 提交一个 Pod 给 Kubernetes 进行部署, 这 个 Pod 请 求 首 先 会 通 过 CLI 或 者 UI 提 交 给 Kubernetes API Server,下一步 API Server 会把这个信息写入到它的存储系统 etcd, 之后 Scheduler 会通过 API Server 的 watch 或者叫做 notification 机制得到这个信息:有一个 Pod 需要被调度。
这个时候 Scheduler 会根据它的内存状态进行一次调度决策,在完成这 次调度之后,它会向 API Server report 说:“OK!这个 Pod 需要被调 度到某一个节点上。”
这个时候 API Server 接收到这次操作之后,会把这次的结果再次写到 etcd 中,然后 API Server 会通知相应的节点进行这次 Pod 真正的执 行 启 动 。 相 应 节 点 的 kubelet 会 得 到 这 个 通 知 , kubelet 就 会 去 调 Container runtime 来真正去启动配置这个容器和这个容器的运行环境, 去调度 Storage Plugin 来去配置存储,network Plugin 去配置网络。 客户端 kubectl dashboard
部署工具*: 使用批量部署工具如(ansible/ saltstack)、手动二进制 、apt-get/yum 等方式安装,以守护进程的方式启动在宿主机上 ,类似于是 Nginx 一样使用 service 脚本启动。
安装方式
部署工具: 使用批量部署工具如(ansible/ saltstack)、手动二进制 、apt-get/yum 等方式安装,以守护进程的方式启动在宿主机上 ,类似于是 Nginx 一样使用 service 脚本启动。
-
kubeadm方式 安装: kubeadm是k8s部署工具,提供kubeadm init 和kubeadm join用于 快速部署k8s集群 使用 k8s 官方提供的部署工具 kubeadm 自动安装 ,需要在 master 和 node 节点上安装 docker 等组件,然后初始化,把管理端的控制服务和 node 上的服务都以pod 的方式运行。 kubeadm介绍 -
kubeadm方式 安装: kubeadm是k8s部署工具,提供kubeadm init 和kubeadm join用于 快速部署k8s集群 使用 k8s 官方提供的部署工具 kubeadm 自动安装 ,需要在 master 和 node 节点上安装 docker 等组件,然后初始化,把管理端的控制服务和 node 上的服务都以pod 的方式运行。 kubeadm介绍
集群网络插件,目前支持calico , flannel , kube-router, cilium
pod介绍 https://www.kubernetes.org.cn/kubernetes-pod Pod可以作为垂直应用整合的载体,但是它的主要特点是支持同地协作,同地管理程序, 例如:
内容管理系统,文件和数据加载,本地缓存等等
日志和检查点备份,压缩,循环,快照等等
数据交换监控,日志追踪,日志记录和监控适配器,以及事件发布等等
代理,网桥,适配器
控制,管理,配置,更新
总体来说,独立的Pod不会去加载多个相同的应用实例
|