K8s对容器的编排和管理

Kubernetes(简称K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。

1. K8s是如何对容器编排的?

在K8s集群中,容器被封装在Pod中。Pod是K8s调度的最小单位,一个Pod可以包含一个或多个容器。K8s通过以下步骤对容器进行编排:

用户创建资源请求:用户通过命令行工具(如kubectl)或API服务器提交Pod的创建请求,这些请求通常以YAML或JSON格式的文件定义。

API Server处理请求:API Server接收到请求后,进行验证并存储到etcd中。

调度器分配主机:K8s调度器会根据资源需求和集群状态,为Pod选择合适的节点。调度器通过过滤和打分两个步骤来选择节点:

- **过滤**:剔除不符合要求的节点。
- **打分**:对剩余节点进行评分,选择得分最高的节点。

创建Pod:调度器选择好节点后,将调度结果写入etcd。kubelet(节点代理)在每个工作节点上监视etcd中的变化,并在选定的节点上创建Pod,拉取容器镜像并启动容器。

例如:
当你使用kubectl apply -f mypod.yaml命令时,K8s会根据mypod.yaml文件中定义的内容创建一个Pod,并将其调度到合适的节点上运行。

2. Pod是怎样创建出来的?

Pod的创建过程如下:

提交请求:用户通过kubectl命令行工具或API Server提交创建Pod的请求。

处理请求:API Server验证请求并将其存储到etcd中。

调度分配:调度器根据资源需求和节点状态选择合适的节点。

过滤和打分:调度器通过过滤和打分机制选择最佳节点。

创建Pod:调度结果写入etcd后,kubelet在选定节点上创建Pod并启动容器。

例如:
如果你在mypod.yaml文件中定义了一个Nginx容器,那么K8s会在指定的节点上启动这个Nginx容器,并将其封装在一个Pod中运行。

3. Service又是怎样关联到Pod的?

Service是K8s中的一种资源对象,用于将Pod暴露给外部访问。Service通过标签选择器(Label Selector)将请求路由到合适的Pod上。

定义Service:用户通过YAML文件定义Service,并指定标签选择器。

关联Pod:Service根据标签选择器选择符合条件的Pod,并为其提供统一的访问入口。

访问Pod:用户通过Service的IP地址和端口访问Pod,Service会将请求负载均衡地分发到后端的Pod上。

例如:
假设你定义了一个Service,将标签选择器设置为app=nginx,那么所有具有该标签的Pod都会被包含在这个Service的负载均衡范围内,用户访问Service的IP地址时,请求会被转发到这些Pod上。

本文由mdnice多平台发布


逼格高的汤圆
10 声望2 粉丝