首页 > 其他分享 >在K8S中,deployment的创建过程包括什么?

在K8S中,deployment的创建过程包括什么?

时间:2024-08-06 15:39:10浏览次数:8  
标签:Kubernetes 配置文件 创建 deployment ReplicaSet Deployment Pod K8S

在Kubernetes(K8S)中,Deployment的创建过程是一个涉及多个组件和步骤的复杂流程。以下是一个详细的步骤说明,包括从创建Deployment配置文件到Pod在集群中实际运行的整个过程:

1. 创建Deployment配置文件

首先,需要准备一个YAML格式的配置文件,用于定义Deployment的属性。这个配置文件包含了Deployment的元数据(如名称、命名空间)、规格说明(如副本数量、Pod模板、容器配置等)。以下是一个简单的示例配置文件:

apiVersion: apps/v1  
kind: Deployment  
metadata:  
  name: my-deployment  
spec:  
  replicas: 3  
  selector:  
    matchLabels:  
      app: my-app  
  template:  
    metadata:  
      labels:  
        app: my-app  
    spec:  
      containers:  
      - name: my-container  
        image: nginx:latest  
        ports:  
        - containerPort: 80
2. 提交Deployment配置文件到APIServer

使用kubectl命令行工具将配置文件提交到Kubernetes集群的APIServer。这个过程中,APIServer会进行认证鉴权、校验等操作,确保请求的有效性。

kubectl apply -f my-deployment.yaml
3. APIServer处理请求并存储到Etcd

一旦APIServer验证了请求的有效性,它会将Deployment的信息存储到集群的分布式键值存储系统Etcd中。Etcd是Kubernetes用于持久化存储集群状态数据的组件。

4. Controller Manager监听并处理资源变化

Controller Manager是Kubernetes的控制中心,它监听Etcd中的资源变化事件。当新的Deployment被创建时,Deployment Controller会检测到这个事件,并开始处理它。

5. 创建ReplicaSet

Deployment Controller会根据Deployment配置文件中的规格说明,创建一个或多个ReplicaSet对象。ReplicaSet负责确保Pod的副本数量符合期望的状态。

6. ReplicaSet创建Pod

ReplicaSet Controller监听ReplicaSet的创建事件,并根据ReplicaSet的规格说明(通过Pod模板)创建相应数量的Pod。Pod是Kubernetes中可以创建和管理的最小计算单元,包含了容器和容器的配置信息。

7. Scheduler为Pod分配节点

Kube-Scheduler是Kubernetes的调度器,它监听新创建的Pod事件,并根据调度策略(如节点亲和性、污点、容忍、硬件资源等)为Pod选择一个合适的节点。调度完成后,Kube-Scheduler会将Pod与节点的绑定信息写回Etcd。

8. Kubelet在节点上运行Pod

节点上的Kubelet进程监听Etcd中的Pod变化事件。当发现有新的Pod被调度到本节点时,Kubelet会调用容器运行时(如Docker、containerd等)来创建和启动容器。同时,Kubelet还负责Pod的生命周期管理,包括健康检查、日志收集等。

9. Pod和Service网络通信

Kube-Proxy是运行在集群各个节点上的网络代理,它负责实现服务发现和负载均衡。当有外部请求访问服务时,Kube-Proxy会根据服务的Endpoints信息将请求转发到正确的Pod或容器上。

10. 总结

综上所述,Deployment的创建过程是一个高度自动化的流程,涉及多个Kubernetes组件的协同工作。从创建Deployment配置文件到Pod在集群中实际运行,整个流程遵循关注点分离的原则,确保每个组件都能专注于自己的工作。这种设计使得Kubernetes能够高效地管理大规模容器化应用的部署和运维。

标签:Kubernetes,配置文件,创建,deployment,ReplicaSet,Deployment,Pod,K8S
From: https://www.cnblogs.com/huangjiabobk/p/18345281

相关文章

  • 在K8S中,Deployment和Statefulset有何区别?
    在Kubernetes中,Deployment和StatefulSet都是用来管理应用的资源对象,但是它们的设计目的和服务场景有所不同。下面详细解释这两种资源的区别:1.Deployment用途:Deployment主要用于管理无状态应用,即那些不需要持久化数据或者不需要唯一网络标识符的应用。它提供了一种简......
  • 金蝶云星空创建执行计划
     创建项目-类库添加引用 usingKingdee.BOS;usingKingdee.BOS.Contracts;usingKingdee.BOS.Core;  新建类,继承接口,实现run方法  ##新建执行计划,挂载插件服务插件:Krystal.K3cloud.App.Core.RunScheduleService.AutoCommitAfterOrder,Krystal.K3cloud.Ap......
  • 五、.Net Core Web Api连接MongoDB自动创建表格并实现CRUD功能
    五、.NetCoreWebApi连接MongoDB自动创建表格并实现CRUD功能1.注册MongoDB账号,并获取ConnectionString;MongoDB官网:MongoDB:TheDeveloperDataPlatform|MongoDB获取ConnectionString教程:ConnectionString获取在VSCodeforMac按下shift+command+p搜索Nuget......
  • 创建数据表与认识PDO学习
    pdo\config\database.php<?php/***返回一个数组数据库连接配置*pdo扩展为PHP访问数据库定义了一个轻量级的一致接口*pdophpdataobject为php提供了数据访问抽象层不管使用哪种数据库服务,都可以使用相同的函数(方法)去查询数据**///phpinfo();namespace......
  • 免费为您的网页创建在线客服,扣子(COZE) WEB SDK图文使用教程
    ......
  • 【从零开始一步步学习VSOA开发】创建VSOA的server端
    创建VSOA的server端创建工程参考hellovsoa工程,创建server工程,工程源码修改如下:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<netinet/in.h>#include<arpa/inet.h>#include"vsoa_platform.h"#include"vsoa_ser......
  • 用Python和PyQt5打造你的专属音乐播放器!轻松创建带封面的音乐列表
    在本文中,我们将介绍如何使用Python的PyQt5库创建一个简单的音乐播放器。这个音乐播放器可以显示歌曲的封面,并且点击封面就可以播放对应的歌曲。依赖库首先,我们需要安装PyQt5库。可以使用以下命令进行安装:pipinstallPyQt5功能如下:显示歌曲列表:程序会在指定的目录(在......
  • K8s和docker的关系
    k8s(kubernetes)是一个容器编排器,没容器的话也没编排。所以他是一个容器编排的系统,主要围绕pods进行工作。pods是k8s生态中最小的调度单位,可以包容一个或者多个容器。k8s是一个docker容器的管理工具核心功能:自愈:重启启动失败的容器,在节点不可用时,替换节点上的容器,对用户定义的不......
  • 在 Glue 作业中使用 python3+ 创建 CloudFront 签名 URL
    是否可以使用python3+为GlueJob中S3文件中的一个特定文件创建具有一定时间限制的CloudFront签名URL?我看到可以在Lambda中做到这一点,但在Python文档中找不到任何内容,特别是胶水工作。任何人都可以提供一些提示吗?defload_private_key(key_path):withopen(......
  • Pycharm启动项目没有创建venv
    当我使用Pycharm启动项目并尝试启动项目时,未创建我的虚拟环境目录。这是它在我的计算机上的样子:现在我可以通过使用python-mvenvvenv然后使用.\env\scripts\activate手动创建venv,但这样做会弄乱我的模板文件夹位置和静态位置。当我开始一个项目......