【云原生Kubernetes】01-Kubernetes简介
文章目录
- 【云原生Kubernetes】01-Kubernetes简介
前言
kubernets概述
为什么要使用Kubernetes?
让我们通过时间倒流来看看为什么 Kubernetes 如此有用。
- 传统部署时代
- 虚拟化部署时代
- 容器部署时代
Kubernetes能做什么?
Kubenets架构
架构图
架构组件说明
Master节点
Node节点
Etcd节点
组件间的工作流程
- 如上图所示,注意除了api-server与etcd之间是双向箭头(互相访问),api-server与其他组件之间都是单向箭头(单向访问)
- 通过上图可以清楚的了解到api-server在中间起到关键性的作用,各个组件都需要与api-server进行通信,而api-server并不会主动的许其他组件进行沟通(与etcd之间除外,会主动将接受的相关信息记录到etcd之中),都是其他组件主动向api-server发起请求。
- 假如我们在kubernetes集群中运行一个nginx的容器,我们整个集群是怎么将容器运行起来的呢?
- 用户通过连接api-server(cli命令或ui图形交互)向kubernetes集群下发指令,说我现在需要创建一个nginx的容器;
- 这时候api-server接受到该指令之后,就会将该指令记录到etcd中;
- 与此同时scheduler(调度器)和controller-manager(集群调度器)都在时刻监控着api-server,不间断的向api-server询问我现在有事情要做吗?
- 此时api-server会告诉scheduler(资源调度器)现在需要在集群中启动一个nginx容器;scheduler就会通过计算将容器运行到那个node上,并将信息告诉给api-server;
- api-server接受到scheduler返回来的信息之后就会将该信息存储到etcd中,并记录说将nginx容器运行在node2节点上;存储之后api server就处于休息状态,因为它不会主动的去连接其他组件,但是api-server想休息也没办法休息的很舒服,因为scheduler(调度器)和controller-manager(集群调度器)在不停的向api server询问我是否有事情需要去做,以及kubelet向其报告节点以及pod的信息以及健康状态。
- 当controller-manager(集群调度器)询问api-server是否有事情做的时候,api-server就会说,现在有一个事情你快去将nginx容器运行到node2节点上去。当controller-manager(集群调度器)接受到该指令之后会很痛快的答应说好的,但是实际上并没真正的去做事情,而是一如既往的监控着api-server同时也一直询问该容器创建了吗?没创建抓紧创建啊。
- 因为每个node节点中kubelet会每隔一定时间就会想api server反馈自己的健康状态以及其他相关的自身信息,并且询问我是否有新的任务去做。
- 当node2节点连接api-server的时候就会告诉node2节点,要在你这里运行一个nginx的容器,内存呀,cpu是多少等等,这时候kubelet就会按照要求去创建。
Kubernetes的核心技术
Pod
副本控制器(Replication Controller,RC)
Deployment
Service
任务(Job)
后台支撑服务集(DaemonSet)
有状态服务集(StatefulSet)
集群联邦(Federation)
存储卷(Volume)
密钥对象(Secret)
EmptyDir
HostPath
ConfigMap
PersistentVolumeClaim
节点(Node)
用户账户(User Account)和服务账户(Service Account)
命名空间(Namespace)
RBAC访问授权
espace。例如,可以将不同的应用程序、不同的团队或不同的环境放置在不同的Namespace中,以便更好地管理它们。