[Kubernetes 01] 组件介绍
Kubernetes
1. kubernetes组件概念
- 节点(node): 一个物理机或者虚拟机
在一个节点上可以运行一个或多个pod,
- pod
pod是k8s的最小调度单元, 是一个或多个容器的组合,
一个pod中的容器可以共享一些资源(eg: 网络, 存储), 但建议一个pod只运行一个容器(解耦)
- Service组件
一个node中的pod是通过分配的ip地址来访问的, 但这个ip地址是不能被外部访问到的。并且, pod是不稳定的, 当因为异常重新创建时, pod的ip地址会发生变化。 因此k8s提供了service组件。 当pod被销毁时, service的ip地址不会变化, 会将请求转发到其他健康的pod上。
上述属于内部服务。
- Ingress组件
当一个pod需要暴露给外部的时候, 需要提供外部服务的入口。
在测试阶段, 可以使用node: port的方式,
在生产中, 需要通过域名来访问, 可以使用ingress组件来配置域名映射, 负载均衡,ssl证书等。
- ConfigMap组件和Secret组件
configMap组件可以把数据库的配置等信息放进去, 当数据库的信息变化时, 就可以去configMap修改数据, 不用在应用程序的pod中去修改配置文件, 但configMap是明文存储。 所以k8s提供了另一个secret组件(只是base64编码而已)
- Volumes组件
因为pod销毁后, 数据也消失, 所以对于数据库pod, 提供volumes组件, 可以把数据挂载到集群的本地磁盘或者远程存储中。(生产中, 一般不回把数据库放在pod中, 是在独立的服务器或者单独的云服务上)
- Deployment组件
当一个pod的时候, 如果要维护或者故障, 这时候服务不可用, 这样可以在多个node上创建pod, k8s提供了一个deployment组件用来定义和管理副本的数量, 以及应用程序的更新策略, 还有自动扩缩容等。
pod是在容器上增加一层抽象, deployment是在pod上再增加一层抽象。
- StateFulSet组件(基本不用)
对于有状态的副本来说, k8s提供了一个statefulSet组件, 来保证数据共享和同步等。(比如对于数据库使用这种组件管理), 此外, 还保证了其中的每个pod都有自己稳定的网络标识符或者持久化存储。(一般不使用这种方式, 数据库等需要持久化存储等还是剥离出k8s集群来单独部署)
2. kubernetes架构
master-worker架构
master-node负责管理整个集群
worker-node负责运行应用程序和服务
既, kubernetes会将容器放入运行在node上的pod中来执行工作负载。
2.1 worker-node
而为了对外提供服务, 每一个node包括三个服务:
kubelet: 负责管理和服务节点上的每个pod, 确保pod按照预期进行, 监控节点的运行情况, 并汇报给api-server
kube-proxy: 负责为Pod对象提供网络代理和负载均衡服务, 如果一个集群有多个节点, 则节点间通过service来通信, 这就需要一个负载均衡器来接收请求, 再把请求发送到不同的节点。kube-proxy会在每个node中启动一个网络代理, 使法往service的请求能路由到正确的pod中。
container-runtime: 容器运行环境, 是一个运行容器的软件, 负责拉取容器镜像, 创建容器, 启动, 停止容器等。所有的应用程序都需要使用容器运行环境来运行, 所以每个node上必须安装容器运行环境。常见的容器运行环境有: (Docker-Engine, Containerd, CRI-O, Mirantis Container Runtime)。
2.2 master-node
核心组件:
Kube API-Server: 它负责提供Kubernetes集群的API接口服务, 比如作为一个用户需要创建一个新的应用,可以使用kubectl命令行工具,或者一些dashboard或其他的UI图形工具, 所有的控制命令都通过api-server来进入集群(api-server就像一个集群的网关一样), 然后再分发给不同的组件进行处理。还对所有的操作如对pod的增删改查进行认证, 授权和访问控制等。进行认证之后, 会把请求转发给调度器。
Scheduler: 调度器 。 调度器负责监控集群中所有节点的资源使用情况, 根据一些调度策略,将新建一个pod这个命令调度到合适的节点上去运行, 保证合理的利用集群资源。
C-M: Controller Manager 控制器管理器, 它负责管理集群中各种资源对象的状态。 比如当集群中某一个pod发生故障, 必须要有机制来检测和处理这个故障, 如重启或者替换。 监控各种资源状态, 确保各种组件按照预期进行。
etcd: 是一个高可用的key-value系统, 用来存储集群中所有资源对象的状态信息, 是整个集群的存储中心, 比如我们通过CLI查询的集群状态等, 数据来源都是etcd。 但是这里只会存储集群的状态信息, 不会存业务数据。
c-c-m: cloud-controller-manager, 云控制器管理器; 如果使用的是aws等服务商提供的服务, 则可以负责与云平台的管理交互。