Kubernetes,简称K8s,是用8代替名字中间的8个字符 “ubernete” 而成的缩写。
是一个开源的,用于管理云平台中多个主机上的容器化的应用,K8s的目标是让部署容器化的应用简单并且高效,K8s提供了应用部署,规划,更新,维护的一种机制。
K8s是Google开源的一个容器编排引擎,使用Google自家的Go语言开发。它支持自动化部署、大规模可伸缩、应用容器化管理。
在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。
在K8s中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员手工进行复杂的配置和处理。
支持公有云,
私有云(企业内部使用的云),
混合云(提供给外部用户访问的内容到公有云,内部用户访问的内容在私有云),
多重云(multi-cloud)
模块化,插件化,可挂载,可组合
自动部署,自动重启,自动复制,自动伸缩/扩展
Docker是应用最广泛的容器技术,它通过打包镜像、启动容器来创建服务。然而,随着应用的日益复杂,容器的数量也不断增加,由此衍生出管理运维容器这一重要问题。
随着云计算的发展,容器的漂移成为云端最大的挑战。K8s正是在这种业务的驱动下,提出了一套全新的基于容器技术的分布式架构领先方案,这是容器技术领域中一个重大突破和创新。
一个 K8s 系统,通常称为一个 K8s 集群,集群主要包括两个部分:
Master 节点主要负责管理和控制,Master 节点内部结构图如下:
Master 节点包括 API Server、Scheduler、Controller Manager、etcd:
Node 节点是工作负载节点,里面是具体的容器,Node 节点内部结构图如下:
Node节点包括 Docker、kubelet、kube-proxy、pod。
每个 Node 都会被 Master 分配一些工作负载,当某个 Node 宕机时,该节点上的工作负载就会被 Master 自动转移到其它节点上。
在Node上主要运行以下内容:
K8s 被安装在一个叫做控制平面的机器上,控制平面的组件对集群做出全局决策。
主节点上负责提供 K8s API 服务的组件,它是 K8s 控制面的前端。
Load Average
或LBLoad Balance
,在设计上考虑了水平扩缩的需要。 换言之,通过部署多个实例可以实现扩缩。在主节点上运行控制器的组件。
主节点上的组件,该组件监视那些新创建的未指定运行节点的 Pod,并选择节点让 Pod 在上面运行。
Scheduler 负责分配调度 Pod 到集群内的节点上,它监听 Api Server,查询还未分配 Node 的 Pod,然后根据调度策略为这些 Pod 分配节点。
节点组件在每个节点上运行,维护运行的Pod并提供K8s运行环境。
一旦Pod被调度到对应的宿主机之后,后续要做的事情就是创建这个Pod,并管理这个Pod的生命周期,这里面包括:Pod的增删改查等操作,在K8S里面这部分功能是通过kubelet 这个核心组件来完成的。kubelet的功能分为两类:
在k8s集群的每个节点上都运行着kube-proxy进程,负责实现k8s中service组件的虚拟IP服务。kube-proxy是让集群服务在外部可以被访问到的重要方式。目前kube-proxy有三种工作模式:
k8s支持多个容器运行环境,如 Docker、 containerd、cri-o、 rktlet 以及任何实现 Kubernetes CRI (容器运行环境接口)的容器。
插件使用 k8s资源 (DaemonSet、Deployment等) 实现集群功能。
kube-dns为k8s集群提供命名服务,主要用来解析集群服务名和Pod的hostname。目的是让pod可以通过名字访问到集群内服务。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。