K8s: 关于Kubernetes中的Pod的创建,实现原理,Job调度pod以及pod网络

pod(一):Kubernetes(k8s)创建pod的两种方式 docker可以创建容器,Kubernetes不能直接创建容器,Kubernetes创建的是pod,pod里面包含了一个或者多个容器。创建pod的前提是已经有一套可以正常运行的Kubernetes集群,关于Kubernetes(k8s)集群的安装部署,可以查看博客《Centos7 安装部署Kubernetes(k8s)集群》Centos7 安装部署Kubernetes(k8s)集群 - 人生的哲理 - 博客园。 阅读详情

Pod 概述

  • Pod 是最小部署的单元,Pod里面是由一个或多个容器组成,也就是一组容器的集合
  • 一个pod中的容器是共享网络命名空间,每个Pod包含一个或多个紧密相关的用户业务容器
  • Pod 是 k8s 系统中可以创建和管理的最小单元
  • 是资源对象模型中由用户创建或部署的最小资源对象模型
  • 也是在 k8s 上运行容器化应用的资源对象,
  • 其他的资源对象都是用来支撑或者扩展 Pod 对象功能的, 比如控制器对象是用来管控 Pod 对象的
  • Service 或者 Ingress 资源对象是用来暴露 Pod 引用对象的
  • PersistentVolume 资源对象是用来为 Pod 提供存储等等

Pod的创建

  • 现在创建一个 nginx 的 pod, 创建一个文件: my-nginx.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-nginx
      labels:
        name: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx:latest
        resources:
            limits:
                memory: "128Mi"
                cpu: "500m"
        ports:
        - containerPort: 80
    
  • $ kubectl create -f my-nginx.yaml
    pod/my-nginx created
    
  • $ kubectl get po
    NAME       READY   STATUS              RESTARTS   AGE
    my-nginx   0/1     ContainerCreating   0          6s
    
  • $ kubectl describe pod my-nginx
    Name:         my-nginx
    Namespace:    default
    Priority:     0
    Node:         node1.k8s/10.211.55.11
    Start Time:   Thu, 18 Apr 2024 09:49:12 +0800
    Labels:       name=my-nginx
    Annotations:  <none>
    Status:       Running
    IP:           10.244.1.12
    IPs:
      IP:  10.244.1.12
    Containers:
      my-nginx:
        Container ID:   docker://2c73c0faa3aa91a72849fdaa1aa09cbca1ce3c6ef2092e2542fc7558d3b524a3
        Image:          nginx
        Image ID:       docker-pullable://nginx@sha256:d2cb0992f098fb075674730da5e1c6cccdd4890516e448a1db96e0245c1b7fca
        Port:           80/TCP
        Host Port:      0/TCP
        State:          Running
          Started:      Thu, 18 Apr 2024 09:49:23 +0800
        Ready:          True
        Restart Count:  0
        Limits:
          cpu:     500m
          memory:  128Mi
        Requests:
          cpu:        500m
          memory:     128Mi
        Environment:  <none>
        Mounts:
          /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-kpmzn (ro)
    Conditions:
      Type              Status
      Initialized       True
      Ready             True
      ContainersReady   True
      PodScheduled      True
    Volumes:
      kube-api-access-kpmzn:
        Type:                    Projected (a volume that contains injected data from multiple sources)
        TokenExpirationSeconds:  3607
        ConfigMapName:           kube-root-ca.crt
        ConfigMapOptional:       <nil>
        DownwardAPI:             true
    QoS Class:                   Guaranteed
    Node-Selectors:              <none>
    Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
    Events:
      Type    Reason     Age   From               Message
      ----    ------     ----  ----               -------
      Normal  Scheduled  13s   default-scheduler  Successfully assigned default/my-nginx to node1.k8s
      Normal  Pulling    13s   kubelet            Pulling image "nginx"
      Normal  Pulled     2s    kubelet            Successfully pulled image "nginx" in 10.625690431s
      Normal  Created    2s    kubelet            Created container my-nginx
      Normal  Started    2s    kubelet            Started container my-nginx
    
    • 这里可以看到:
      • Successfully assigned default/my-nginx to node1.k8s
      • 这里将pod分配到 node1.k8s 节点上

Pod 的实现原理


1 ) Pod 在 K8s 中结构

  • k8s 不会直接处理容器,而是 Pod,Pod 是由一个或多个 container 组成
  • Pod 是 Kubernetes 的最重要概念,每一个 Pod 都有一个特殊的被称为”根容器“的 Pause容器
  • Pause 容器对应的镜像属于 Kubernetes 平台的一部分,除了 Pause 容器,每个Pod还包含一个或多个紧密相关的用户业务容器

2 )实现原理

  • Pod 的共享上下文包括一组 Linux 名字空间、控制组(cgroup)和可能一些其他的隔离方面
  • 即用来隔离 Docker 容器的技术。 在 Pod 的上下文中,每个独立的应用可能会进一步实施隔离
  • 就 Docker 概念的术语而言,Pod 类似于共享名字空间和文件系统卷的一组 Docker 容器
  • 说明: 除了 Docker 之外,Kubernetes 支持很多其他容器运行时
  • Docker 是最有名的运行时, 使用 Docker 的术语来描述 Pod 会很有帮助

3 )pod 的结构图例

  • 一个包含多个容器的 Pod 中包含一个用来拉取文件的程序和一个 Web 服务器
  • 均使用持久卷作为容器间共享的存储
  • 在这个小小的pod之内,网络(网卡)和磁盘都是独立的
  • 一个pod内的容器可以实现互相通信和资源共享,也就是可以访问同一个目录
  • 在 pod 停掉之前,会先关闭里面的容器

4 )pod 的使用

  • 通常你不需要直接创建 Pod,甚至单实例 Pod
  • 相反,你会使用诸如 Deployment 或 Job 这类工作负载资源 来创建 Pod
  • 如果 Pod 需要跟踪状态, 可以考虑 StatefulSet 资源

5 )Kubernetes 集群中的 Pod 主要有两种用法

  • a )运行单个容器的 Pod
    • "每个 Pod 一个容器"模型是最常见的 K8s 用例
    • 在这种情况下,可以将 Pod 看作单个容器的包装器
    • 并且 K8s 直接管理 Pod,而不是容器
  • b ) 运行多个协同工作的容器的 Pod
    • Pod 可能封装由多个紧密耦合且需要共享资源的共处容器组成的应用程序
    • 这些位于同一位置的容器可能形成单个内聚的服务单元:
      • 一个容器将文件从共享卷提供给公众
      • 而另一个单独的“边车”(sidecar)容器则刷新或更新这些文件
        • 比如:这个 sidecar 是一个日志的收集容器, 要时时的收集日志
        • 读取应用的日志并推送到 log-stash,elk 或 Prometheus 中去
      • Pod 将这些容器和存储资源打包为一个可管理的实体
      • 通过这种方式形成一个协同工作的单元

6 ) 使用job调度一系列的 pod

  • 目的:基于一个nginx容器完成shell命令,并且完成5次

  • 创建 hello-job.yaml

    apiVersion: batch/v1
    kind: Job
    metadata:
     name: hello-job
    spec:
     completions: 5 # 完成5次
     template:
        spec:
          containers:
          - name: hello-job
            image: nginx
            command: ['sh', '-c', 'echo "Hello, Kubernetes" && sleep 1']
          restartPolicy: OnFailure
    
  • $ kubectl create -f hello-job.yaml 创建 job

    job.batch/hello-job created
    
  • $ kubectl get job 获取 job

    NAME        COMPLETIONS   DURATION   AGE
    hello-job   0/5           39s        39s
    
  • $ kubectl get po -w 监控

    NAME                 READY   STATUS              RESTARTS   AGE
    hello-job--1-dfj2j   0/1     Completed           0          12s
    hello-job--1-k2d2w   0/1     Completed           0          32s
    hello-job--1-km7sn   0/1     Completed           0          21s
    hello-job--1-n78fk   0/1     Completed           0          45s
    hello-job--1-pgcvn   0/1     ContainerCreating   0          2s
    hello-job--1-pgcvn   1/1     Running             0          8s
    hello-job--1-pgcvn   0/1     Completed           0          9s
    
  • $ kubectl get job 再次获取 job

    NAME        COMPLETIONS   DURATION   AGE
    hello-job   5/5           39s        39s
    
  • $ kubectl get po 再次查看 pod

    hello-job--1-dfj2j   0/1     Completed   0          16m
    hello-job--1-k2d2w   0/1     Completed   0          16m
    hello-job--1-km7sn   0/1     Completed   0          16m
    hello-job--1-n78fk   0/1     Completed   0          17m
    hello-job--1-pgcvn   0/1     Completed   0          16m
    
  • $ kubectl logs hello-job--1-pgcvn 查看日志

    Hello, Kubernetes
    
  • $ kubectl delete job hello-job

    job.batch "hello-job" deleted
    
  • 基于以上,可以看到,基于 job 维护 pod 的运行状态的一个简单示例

7 ) pod 的 网络

  • 每个 Pod 都在每个地址族中获得一个唯一的 IP 地址
  • Pod 中的每个容器共享网络名字空间,包括 IP 地址和网络端口
  • Pod 内 的容器可以使用 localhost 互相通信
  • 当 Pod 中的容器与 Pod 之外的实体通信时,它们必须协调如何使用共享的网络资源 (例如端口)
k8s——pod控制器 服务发现:就是应用服务之间相互定位的过程。动态性强:Pod会飘到别的node节点更新发布频繁:互联网思维小步快跑,先实现再优化,老板永远是先上线再慢慢优化,先把idea变成产品挣到钱然后再慢慢一点一点优化支持自动伸缩:一来大促,肯定是要扩容多个副本K8S里服务发现的方式—DNS,使K8S集群能够自动关联Service资源的“名称”和“CLUSTER-IP”,从而达到服务被集群自动发现的目的。一个完整的 StatefulSet 控制器由。 阅读详情

相关推荐

K8S(Kubernetes)简介和官方安装部署保姆级详细教程

Kubernetes简称为K8s,是用于自动部署、扩缩和管理容器化应用程序的开源系统,起源于Google 集群管理工具Borg。

BlogPan的专栏 4万+

kubernetes资源类型--pod和job

pod Pod是K8S的最小操作单元,一个Pod可以由一个或多个容器组成;整个K8S系统都是围绕着Pod展开的,比如如何部署运行Pod、如何保证Pod的数量、如何访问Pod等。 特点 Pod是能够被创建、调度和管理的最小单元; 每个Pod都有一个独立的IP; 一个Pod由一个或多个容器构成,并共享所有资源,主要包括:PID、Network、IPC、UTS、共享存储等;Pod所有容器在同一...

lyk-ops 897

K8s架构|全面整理K8s的架构介绍

K8S架构与核心技术介绍 参考文献: https://jimmysong.io/kubernetes-handbook/concepts/concepts.html https://www.infoq.cn/article/kubernetes-and-cloud-native-applications-part01/ 文章目录K8S架构与核心技术介绍1. 架构图1.1 整体结构图1.2 组件间的协议1.3 master与node架构图1.4 分层架构图2. K8s核心技术概念2.1 API对象2.2

qq_37419449的博客 3万+

Kubernetes(k8s)的Pod控制器Job和CronJob详细讲解

目录1. Job控制器1.1 概述1.2 Job的创建、查看、删除1.2.1 Job的创建1.2.2 Job的查看1.2.3 Job的删除2. CronJob控制器2.1 概述2.2 CronJob的创建、查看、删除2.2.1 CronJob的创建2.2.2 CronJob的查看2.2.3 CronJob的删除 1. Job控制器 1.1 概述 Job主要用于负责批量处理短暂的一次性任务 Job的特点: 当Job创建的Pod执行成功结束时,Job将记录成功结束的Pod数量 当成功结束的Pod达到指定的数量

Bulut0907 1971

K8S学习之基础二:k8s基本单元pod

Pod是k8s最小的调度单元。k8s是通过定义一个Pod资源,然后Pod里面运行容器,容器指定镜像,运行具体的服务。一个Pod封装一个或多个容器,Pod里面的容器共享存储、网络等,可以把Pod看做是一个虚拟机,Pod里面的进程相当于虚拟机上的进程。通俗来说,可以把Pod看做一个豌豆荚,而豌豆荚里的每个豆子都是Pod中的容器。

云上艺旅的博客 2550

自动化运维之k8s——Kubernetes集群部署、pod、service微服务、kubernetes网络通信

一、Kubernetes简介 1、Kubernetes简介 在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上万的容器应用。 Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。 Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。 Kubernetes的好处: (1)隐藏资源管理和错误处理,用户仅需要关

Zhaohui_Zhang的博客 9101

云原生 | kubernetes - Pod创建/删除的原理及操作

Cloud Native | The principle and operation of creating/deleting kubernetes - Pod

Trollz的博客 3405

【Kubernetes】以LOL的视角打开K8s

LOL和K8s都上手之后,其实我觉得相比较起来,LOL的上手难度要高多了,这么多个英雄,每个英雄有不同的机制和技能,这些可比K8s的内容多多了,所以如果大家LOL都能上手的话,上手K8s肯定不会是问题的!

ThisIsClark 2074

K8s基础7——DaemonSet控制器、Job批处理调度、Cronjob定时调度

1、Daemonset控制器“雨露均沾”。 2、Job批处理调度。 3、Cronjob定时调度。

百慕卿君博客 1213

在centos7部署k8s搭建kubernetes集群

Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。 Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找

山东梅长苏 1万+

kubernetes(K8S)学习(五):K8S进阶(Lifecycle......偏理论)

本文介绍了Kubernetes中Pod的进阶知识,主要包括五个方面:1) Pod的生命周期状态(Pending、Running、Succeeded、Failed、Unknown);2) 重启策略(Always、OnFailure、Never);3) 静态Pod的特点;4) 健康检查探针(livenessProbe、readinessProbe、startupProbe);5) ConfigMap的创建与使用。文章详细说明了每种状态和策略的具体含义,并提供了命令行创建ConfigMap的示例代码。这些内容帮助

꯭ 瞎꯭扯꯭蛋꯭的博客 2885

Kubernetes详细笔记(K8s)

Kubernetes超详细笔记

写代码的渣渣苏 4万+

如何玩转 Kubernetes K8S

可以通过kubectl explain pod 查看pod yaml定义的顶级属性,然后通过类似 kubectl explain pod.{顶级属性}查看二级属性的细节定义。下面给出一个pod资源定义的样例,对pod的描述有一个初步了解。apiVersion: v1 #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本kind: Pod #该配置的类型,我们使用的是Pod。

m0_37843156的博客 1459

【云原生 | 从零开始学Kubernetes】五、Kubernetes核心技术Pod

k8s核心技术pod的详解以及实验

欢迎关注,一起进步! 3451

k8s容器编排总结

学而时习之,不亦说乎。今天总结一下k8s。k8s(Kubernetes)作为容器编排生态圈中重要一员,是Google大规模容器管理系统borg的开源版本实现,它提供应用部署、维护、 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用。当前Kubernetes支持GCE、vShpere、CoreOS、OpenShift、Azure等平台,除此之外,也可以直接运行在物理机上。kubernetes是一个开放的容器调度管理平台,不限定任何一种言语,支持java/C++/go/python等各

唐震宇的博客 7531

k8s入门教程详解(一)

文章目录Kubernetes 入门教程详解(一)一、 Kubernetes 概述1. K8S 发展历史由来2.K8S官网2.K8S 是什么3. K8s 优势及特点3.1 K8S优势3.2 K8S 特点4. K8s 集群架构与组件4.1 K8s 集群架构4.2 K8s 核心组件详细说明5. K8s 核心概念5.1 Master 集群控制节点5.2 Node 工作负载节点5.3 Pod kubernetes的最小控制单元5.4 Controller 控制器Pod5.4.1 复制控制器(Replication

心有鸿鹄天地,不敢妄坠人间 1万+

一、kubernetes k8s

k8s的全称:kubernetes k8sk8s的版本:1.301.20------------用的最多的版本,1.18-1.211.24------------>k8s的镜像不再使用docker,containerd。

2401_87896172的博客 3667

STM32基于软件模拟IIC进行AHT21B温湿度采集

通过学习软件IIC来进行实操AHT21B采集温湿度。

Liu-FE的博客 3700

【云原生 • Kubernetes】认识 k8s、k8s 架构、核心实战

【云原生 • Kubernetes】认识 k8s、k8s 架构、核心实战

程序员码小跳 1万+

LVGL项目内存告急?试试把中文字库放到SD卡里(基于LvglFontTool V0.5)

本文详细介绍了在LVGL嵌入式项目中如何通过将中文字库存储到SD卡来优化内存使用。针对Flash资源有限的MCU,如STM32F103,提供了基于LvglFontTool V0.5的外部字库生成与动态加载方案,适用于多字号、多语言及OTA场景,显著减少固件体积并提升显示灵活性。

weixin_33726318的博客 456

Landsat9 地表温度反演方法

landsat9地表温度反演及缺失值处理方法

xiangliu12345的博客 3919
上一篇: Go微服务: 服务限流原理, 负载均衡与API网关
下一篇: K8s: 关于Kubernetes中的Pod的生命周期(状态)以及生命周期的钩子函数处理
Wang's Blog
博客等级 码龄12年 7433粉丝 2419原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值