kubectl 创建 Pod 背后到底发生了什么
kubectl 创建 Pod 背后发生了以下一些主要的步骤:
-
kubectl 解析配置文件:kubectl 会读取 Pod 的配置文件,通常是 YAML 或 JSON 格式,解析其中的内容并将其转换为 Kubernetes API 对象。
-
验证配置文件:在创建 Pod 之前,kubectl 会验证 Pod 配置文件是否正确,例如是否包含必需的字段、端口是否已分配等。如果文件存在错误,kubectl 将输出相应的错误消息。
-
向 Kubernetes API 发送请求:一旦通过验证,kubectl 将向 Kubernetes API 发送一个创建 Pod 的请求。请求中包含 Pod 元数据和容器定义等信息。
-
调度 Pod:Kubernetes 调度器接收到 Pod 创建请求后,会根据各种规则(如节点资源利用率、Pod 的标签选择器等)来决定将该 Pod 调度到哪个节点上。
-
下载镜像:如果 Pod 中使用了未被缓存的镜像,Kubernetes 将从指定的容器镜像库(如 Docker Hub)中下载相应的镜像。
-
创建容器:一旦镜像下载完成,Kubernetes 会在节点上创建并运行 Pod 中定义的所有容器。它们将共享 Pod 的网络空间、存储卷等资源。
-
监控 Pod:一旦 Pod 创建完成,Kubernetes 会对其进行监控,并不断检查其状态。如果出现故障或崩溃,Kubernetes 将尝试自动恢复它,或者报告问题供管理员处理。
总体来说,kubectl 创建 Pod 的过程涉及到多个组件和步骤,需要确保各种资源的协调运作,以及快速、可靠地启动容器并保证其正常运行。
kubectl 创建 Pod 背后到底发生了什么
kubectl 删除 Pod 的过程涉及以下主要步骤:
-
kubectl 向 Kubernetes API 发送请求:kubectl 接收到删除命令后,会向 Kubernetes API 发送一个删除 Pod 请求。
-
Kubernetes API 根据请求信息找到对应的 Pod:API Server 会根据请求中指定的 Pod 名称和命名空间,查找到对应的 Pod 对象。
-
调度器将该 Pod 标记为删除:Kubernetes 调度器会将该 Pod 标记为“待删除”状态,并防止新的请求向其发送。
-
删除所有容器:Kubernetes 将停止并删除 Pod 中的所有容器。当容器被删除时,它们将释放与其关联的网络端口、存储卷等资源。
-
清理 Pod 所使用的资源:一旦容器被删除,Kubernetes 将清理所有与 Pod 相关的资源,如网络空间、存储卷等。
-
更新集群状态:当 Pod 被成功删除后,Kubernetes API Server 将更新集群状态,并通知相关组件进行相应的操作。
总体来说,kubectl 删除 Pod 的过程是相对简单的,主要涉及标记 Pod、删除容器和清理资源等基本操作。但需要注意的是,在进行删除操作之前,需要确保正确地指定了目标 Pod,并明确了其所在的命名空间等重要信息,以避免误删等问题。
Docker in Docker(DinD)
是一种在另一个Docker实例中运行Docker的技术。这对于测试、开发和其他需要使用多个Docker环境的场景非常有用。
要在Docker中运行Docker,您首先需要在主机上安装Docker。完成后,您可以使用docker:dind
镜像启动一个Docker容器。该容器将具有自己的Docker环境,您可以像与任何其他Docker环境交互一样与之交互。
以下是启动Docker-in-Docker容器的示例命令:
docker run --privileged --name dind -d docker:dind
这将使用docker:dind
镜像启动名为“dind”的Docker容器。 --privileged
标志是必需的,以向容器提供所有必需的权限,使其能够在内部运行Docker。
容器运行后,您可以使用docker exec
命令进入容器并与其Docker环境交互:
docker exec -it dind /bin/bash
这将打开一个shell,让您进入dind
容器,在其中可以像平常一样运行Docker命令。请记住,在dind
容器内创建的任何容器都将与主机系统的Docker环境隔离开来。
如果在runner 需要用 就需要挂载sock 既 修改runner配置文件 /etc/gitlab-runner/config.toml
volumes = ["/var/run/docker.sock:/var/run/docker.sock"]
GitLab Runner具有以下功能。
-
同时运行多个作业。
-
将多个令牌用于多个服务器(甚至每个项目)。
-
限制每个令牌的并发作业数。
-
可以运行作业:
-
本地。
-
使用 Docker 容器。
-
使用 Docker 容器并通过 SSH 执行作业。
-
将 Docker 容器与不同云和虚拟化虚拟机管理程序上的自动缩放结合使用。
-
连接到远程 SSH 服务器。
-
-
用 Go 编写并作为单个二进制文件分发,没有任何其他要求。
-
支持 Bash、PowerShell Core 和 Windows PowerShell。
-
适用于GNU/Linux,macOS和Windows(几乎可以在任何可以运行Docker的地方)。
-
允许自定义作业运行环境。
-
自动重新加载配置,无需重新启动。
-
易于使用的设置,支持 Docker、Docker-SSH、Parallels 或 SSH 运行环境。
-
启用 Docker 容器的缓存。
-
易于作为GNU/Linux、macOS和Windows的服务安装。
-
嵌入式普罗米修斯指标 HTTP 服务器。
-
裁判工作人员监控普罗米修斯指标和其他特定于工作的数据并将其传递给 GitLab。