Kubernetes(K8s)是一个由多个组件组成的分布式系统,这些组件协同工作,共同实现容器化应用程序的自动化部署、扩展和管理。下面是Kubernetes主要的组件和它们的作用:
1、etcd:etcd是Kubernetes的分布式键值存储系统,它用于存储Kubernetes集群的配置信息和状态数据。
2、kube-apiserver:kube-apiserver是Kubernetes API的前端组件,它处理集群中的所有API请求,并将请求路由到其他组件进行处理。
3、kube-controller-manager:kube-controller-manager是一个组件集合,包含了多个控制器,用于监视集群状态并调整它。
4、kube-scheduler:kube-scheduler是Kubernetes的调度器,它负责将应用程序容器调度到集群中的节点上。
5、kubelet:kubelet是每个节点上运行的代理程序,它负责管理节点上的容器和它们的生命周期。
6、kube-proxy:kube-proxy是负责网络代理和负载均衡的组件,它实现了Kubernetes服务的抽象概念。
7、Container Runtime:Container Runtime是一个Kubernetes插件,负责管理容器的运行时环境。
8、addons:addons是Kubernetes的可选组件,用于实现集群级别的附加功能,如日志记录、监视和安全。
以上是Kubernetes的主要组件,每个组件都有不同的作用,但是它们协同工作,为容器化应用程序的自动化部署、扩展和管理提供了强大的支持。熟悉这些组件可以帮助管理员更好地理解Kubernetes的工作原理,从而更好地管理和维护Kubernetes集群。
下面有一副图比较清晰表达出当管理通通过kubectl进行管理作业和用户通过internet访问web站点时各个模块之间的作用。
当使用kubectl或直接调用API Server提供的API请求创建Pod和Service时,整个工作流程通常会分为以下几个步骤:
1、创建对象的YAML文件:首先需要创建一个包含Pod或Service对象配置的YAML文件,该文件包含必需的元数据(例如名称、命名空间和标签),以及定义对象的规范(例如容器镜像、端口号和卷)。
2、发送API请求:一旦YAML文件准备好了,就可以使用kubectl或者编写客户端程序通过API Server发送请求来创建对象。kubectl或客户端程序会向API Server发送一个POST请求,请求体包含创建对象的YAML文件内容。
3、API Server验证请求:API Server会验证请求的身份,并检查请求体的格式和内容是否正确。如果一切正常,API Server将请求转发给相应的控制器处理。
4、控制器创建Pod或Service对象:根据请求中的YAML文件,相应的控制器会创建Pod或Service对象,并将它们保存到etcd中,以便整个集群中的所有组件都可以访问它们。
5、调度器调度Pod:如果创建的对象是Pod,控制器将使用调度器来选择一个合适的节点并将Pod调度到该节点上。如果节点上已经存在同名Pod,则该Pod将被更新。
6、kubelet创建容器:一旦Pod被调度到节点上,kubelet会负责在节点上创建Pod所需的容器,并监视容器的生命周期。
7、kube-proxy创建Service:如果创建的对象是Service,控制器将使用kube-proxy来创建一个代理,用于将流量路由到Service后端的Pod上。
通过这个工作流程,我们可以了解Kubernetes如何管理和控制应用程序容器的整个生命周期。kubectl或客户端程序提供了方便的方法来创建和管理Kubernetes对象,并利用API Server来协调和协同整个集群中的各种组件。
当一个web用户访问布署在Kubernetes中的web应用时,工作流程大致如下:
用户在Web浏览器中输入网址,例如:http://example.com。
用户计算机向DNS服务器发送请求,查询该网址对应的IP地址。
DNS服务器返回IP地址给用户计算机。
用户计算机向该IP地址发送HTTP请求,请求网页数据。
如果Kubernetes集群中有多个副本,则Kubernetes负载均衡器(如Service)会将请求分发到其中一个副本。
选中的副本(Pod)将处理请求,生成响应并将其发送回负载均衡器。
负载均衡器将响应发送回用户计算机。
用户计算机接收到响应后,Web浏览器将渲染出网页。
在此过程中,Kubernetes集群中的组件(如Service、Pod和网络插件)负责实现负载均衡、容器间通信和网络隔离等功能。