首页 > 其他分享 >k8s

k8s

时间:2023-06-06 17:55:06浏览次数:30  
标签:容器 删除 Kubernetes kubectl Pod k8s Docker

kubectl 创建 Pod 背后到底发生了什么

kubectl 创建 Pod 背后发生了以下一些主要的步骤:

  1. kubectl 解析配置文件:kubectl 会读取 Pod 的配置文件,通常是 YAML 或 JSON 格式,解析其中的内容并将其转换为 Kubernetes API 对象。

  2. 验证配置文件:在创建 Pod 之前,kubectl 会验证 Pod 配置文件是否正确,例如是否包含必需的字段、端口是否已分配等。如果文件存在错误,kubectl 将输出相应的错误消息。

  3. 向 Kubernetes API 发送请求:一旦通过验证,kubectl 将向 Kubernetes API 发送一个创建 Pod 的请求。请求中包含 Pod 元数据和容器定义等信息。

  4. 调度 Pod:Kubernetes 调度器接收到 Pod 创建请求后,会根据各种规则(如节点资源利用率、Pod 的标签选择器等)来决定将该 Pod 调度到哪个节点上。

  5. 下载镜像:如果 Pod 中使用了未被缓存的镜像,Kubernetes 将从指定的容器镜像库(如 Docker Hub)中下载相应的镜像。

  6. 创建容器:一旦镜像下载完成,Kubernetes 会在节点上创建并运行 Pod 中定义的所有容器。它们将共享 Pod 的网络空间、存储卷等资源。

  7. 监控 Pod:一旦 Pod 创建完成,Kubernetes 会对其进行监控,并不断检查其状态。如果出现故障或崩溃,Kubernetes 将尝试自动恢复它,或者报告问题供管理员处理。

总体来说,kubectl 创建 Pod 的过程涉及到多个组件和步骤,需要确保各种资源的协调运作,以及快速、可靠地启动容器并保证其正常运行。

 

kubectl 创建 Pod 背后到底发生了什么

kubectl 删除 Pod 的过程涉及以下主要步骤:

  1. kubectl 向 Kubernetes API 发送请求:kubectl 接收到删除命令后,会向 Kubernetes API 发送一个删除 Pod 请求。

  2. Kubernetes API 根据请求信息找到对应的 Pod:API Server 会根据请求中指定的 Pod 名称和命名空间,查找到对应的 Pod 对象。

  3. 调度器将该 Pod 标记为删除:Kubernetes 调度器会将该 Pod 标记为“待删除”状态,并防止新的请求向其发送。

  4. 删除所有容器:Kubernetes 将停止并删除 Pod 中的所有容器。当容器被删除时,它们将释放与其关联的网络端口、存储卷等资源。

  5. 清理 Pod 所使用的资源:一旦容器被删除,Kubernetes 将清理所有与 Pod 相关的资源,如网络空间、存储卷等。

  6. 更新集群状态:当 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。

标签:容器,删除,Kubernetes,kubectl,Pod,k8s,Docker
From: https://www.cnblogs.com/jiangjiangstudy/p/17461289.html

相关文章

  • Kubernetes(k8s)服务service:service的发现和service的发布
    目录一.系统环境二.前言三.Kubernetesservice简介四.使用hostPort向外界暴露应用程序4.1创建deploy4.2使用hostPort向外界暴露pod的端口五.使用service服务向外界暴露应用程序5.1使用service服务向外界暴露pod5.1.1创建service服务5.1.2测试svc的负载均衡六.service服务的发......
  • k8s常用命令
    1.命名空间namespace/ns方式:1创建:kubectlcreatenshello-ns删除:kubectldeletenshello-ns查询:kubectlgetns  方式2:万能通用方式:通过yaml模板创建:创建ns-ceate.yamlapiVersion:v1kind:Namespacemetadata:name:hello创建:kubectlapply-fns-cre......
  • k8s1.23 安装calico网络插件
    1、下载curlhttps://docs.projectcalico.org/manifests/calico.yaml-O2、修改CIDR,添加图中内容。该yaml文件中默认CIDR为192.168.0.0/16,需要与初始化时kube-config.yaml中的配置一致vimcalico.yaml 3、指定网卡,添加图中内容。 4、部署kubectlapply-fcalico.y......
  • k8s nodeName调度
    nodeName调度nodeName是节点选择约束的最简单形式,但是由于其限制,通常很少使用它。nodeName是PodSpec的领域。pod.spec.nodeName将Pod直接调度到指定的Node节点上,会【跳过Scheduler的调度策略】,该匹配规则是【强制】匹配。可以越过Taints污点进行调度。nodeName用于选择节点的一......
  • k8s中设置hostNetwork: true,怎么修改冲突的端口,yaml使用的是DaemonSet
    apiVersion:apps/v1kind:DaemonSetmetadata:name:cadvisornamespace:monitoringspec:selector:matchLabels:app:cAdvisortemplate:metadata:labels:app:cAdvisorspec:tolerations:#污点容忍,忽略master的......
  • k8s之hostport 在daemonset 上面暴露端口
    NodePort虽然可以给pod提供节点级别的porxy,但是如果对于一个daemonset,采用NodePort方式来申明节点端口就不这么直观了,这个时候就可以使用pod的hostport来直接在pod的节点上暴露端口。apiVersion:apps/v1kind:DaemonSetmetadata:labels:app:tools-testnam......
  • K8S核心概念以及部署
    架构以及核心组件介绍:Master -APIServer(接口中心)j接口服务,基于rest风格开放的k8s接口服务 -kubeControllerManager:管理各个类型的控制器,针对k8s中的各种资源进行管理 -nodecontroller节点控制器:负责在节点出现故障时进行通知和响应 -jobcontroller任务控制器......
  • 云原生第六周--k8s组件详解(下)
    一Velero结合minio实现kubernetesetcd数据备份与恢复Velero简介:Velero是vmware开源的一个云原生的灾难恢复和迁移工具,它本身也是开源的,采用Go语言编写,可以安全的备份、恢复和迁移Kubernetes集群资源数据Velero支持标准的K8S集群,既可以是私有云平台也可以是公有云,除了灾备......
  • 安装k8s 时报错No package kubelet-1.20.9 available.
    报错信息:[root@vm~]#sudoyuminstall-ykubelet-1.20.9kubeadm-1.20.9kubectl-1.20.9--disableexcludes=kubernetesLoadedplugins:fastestmirrorLoadingmirrorspeedsfromcachedhostfileepel:mirror-icn.yuki.net.ukNopackagekubelet-1.20.9available.No......
  • k8s--etcd 基本操作
    介绍Etcd是CoreOS基于Raft开发的分布式key-value存储,可用于服务发现、共享配置以及一致性保障(如数据库选主、分布式锁等)。在分布式系统中,如何管理节点间的状态一直是一个难题,etcd像是专门为集群环境的服务发现和注册而设计,它提供了数据TTL失效、数据改变监视、多值、目录监......