我的编程空间,编程开发者的网络收藏夹
学习永远不晚

k8s中pod使用详解(云原生kubernetes)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

k8s中pod使用详解(云原生kubernetes)

一、前言

在之前k8s组件一篇中,我们谈到了pod这个组件,了解到pod是k8s中资源管理的最小单位,可以说Pod是整个k8s对外提供服务的最基础的个体,有必要对Pod做深入的学习和探究。

二、再看k8s架构图

为了加深对k8s中pod的理解,再来回顾下k8s的完整架构

三、pod特点

结合上面这张图,关于pod,可以总结下面几点:

  • Pod是一组容器, 是K8S中最小的单位,,一个Pod可包含多个容器,但通常情况下每个Pod中仅运行一个容器,可以把Pod理解成豌豆荚, Pod内的每个容器就像是一颗豌豆 ;
  • Pod 的核心是运行容器,必须指定容器引擎,比如 Docker是其中一种技术 ;

四、pod分类

根据pod是否自主创建,可以分为两种

  • 自主创建:直接创建出来的Pod,这种pod删除后就没有了,也不会自动重建 ;
  • 控制器创建:通过控制器创建的pod,这类Pod删除了之后还会自动重建 ;

五、pod中的容器

从上图可以发现,容器是运行在pod中的,也可以简单理解为pod是容器运行的外部容器,所以一个pod理论上可以运行很多个docker容器,关于这一点,做两点说明:

  • 每个Pod中一个容器,的模式是最常见的用法,Pod是容器的简单封装,K8S管理Pod而不是直接管理容器 ;
  • 一个Pod中同时运行多个需要互相协作的容器,它们共享资源,同一个Pod中的容器可以作为service单位 ;

六、Pod中的网络

对于k8s集群中的某个节点来说,可能部署了多个pod,这些不同的pod之间如果也需要互相通信怎么办呢?这就需要说到pod中的网络了;

  • 一个 pod 包含一组容器,一个 pod 不会跨越多个工作节点 ;
  • 每个Pod都会被分配一个唯一的IP地址,Pod中的所 有容器共享网络空间,包括IP地址和端口 ;
  • Pod内 部的容器可以使用localhost互相通信 ;

补充:k8s中的网络通信模型

K8S集群的有4种网络:

        具体如下:同一pod内的容器间通信、各pod彼此之间的通信、pod与service间的通信、以及集群外部的流量同service之间的通信

七、Pod中的存储

  • Volume 也可以用来持久化Pod中的存储资源,以防容器重启后文件丢失 ;
  • Pod中 的所有容器都可以访问共享的Volume ;

八、Pod常用操作命令

1、查看k8s集群中系统运行的pod

kubectl get pod -n kube-system

2、查看创自己创建的pod

kubectl get pod
或
kubectl get pod,svc,deploy

3、删除pod

直接删除pod:

kubectl delete pod pod名称 -n 名称空间

删除通过控制器创建的pod:

kubectl delete pod控制器名称 -n 名称空间

补充说明:

  • 如果是通过deploy控制器创建的pod, 直接删除则会自动创建新的;
  • -n 非必须,表示某个具体的命名空间;

4、启动一个pod【命令方式启动】

kubectl run pod名称 --image=镜像 --port=80 --namespace 命名空间名字

比如在上一篇中,我们创建了一个nginx的pod,可以写成:

kubectl run test-nignx-pod --image=nginx:1.23.0 --port=80 --namespace test

5、启动一个pod【yaml方式启动】

在当前目录下创建一个yaml的文件

配置内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy  
  labels:
    chapter: first-app
spec:
  selector:
     matchLabels:  
       app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name : nginx
        image: nginx:1.23.0
        ports:
        - containerPort: 80

然后使用apply的方式启动

kubectl apply -f ./test-nginx.yaml

注意点:

通过 apply -f 的方式创建的pod,删除的时候,也需要通过apply -f 的方式删除

6、通过deployment控制器导出yaml文件

在当前集群下,我们有下面这个pod

 使用下面的命令导出这个pod对应的yaml

kubectl create deployment test-nginx3 --image=nginx:1.23.0 --namespace test -o yaml --dry-run=client > ./nginx.yaml

执行之后可以发现在当前目录下创建了一个yaml的文件

 文件内容是不是和前面我们自己创建的那个yaml很像,看起来似乎更加完整,需要注意的是,这个里面的有些参数是可以手动修改的,比如:replicas 这个表示生成的nginx的pod个数;

然后就可以使用apply的命令创建pod了

kubectl apply -f nginx.yaml

7、查看某个名称空间下 pod 的详细信息

kubectl get pod -n ns名称 -o wide

比如,查看default名称空间下的pod信息,就能看到上面通过yaml文件创建的pod;

kubectl get pod -n default -o wide

通过k8s创建出来的pod,会分给当前的pod一个IP地址,可以直接通过curl 进行访问【同一个集群下的其他节点都可访问】

九、Pod延伸补充说明

1、pod镜像拉取策略 

pod镜像拉取策略可以通过imagePullPolicy字段配置镜像拉取策略,如下:

spec:
  containers:
    - name: nginx
      image: nginx:1.23.0
      imagePullPolicy: Always	#可取 Always(默认值)、IfNotPresent、Never

imagePullPolicy可以使用以下3种策略值:

Always: 默认值,每次创建pod都会重新拉取一次镜像;
IfNotPresent: 镜像在宿主机上不存在时才拉取;
Never: 永远不会主动拉取镜像,使用本地镜像,需要你手动拉取镜像下来;

2、pod使用资源限制配置

我们知道,集群中的节点都是有一定的配置的,比如CPU,内存等信息,总不能因为创建的某个pod把节点的资源给打满了,因此可以在配置文件中进行配置,以使用apply -f 的方式创建一个pod,配置文件中关键配置如下:

resources:
	requests:
		memory:"内存大小"
		cpu:"cpu占用大小"
	limits:	
		memory:"内存占用大小"
		cpu:"cpu占用大小"

下面是一段完整的标签配置和说明

spec:  
  containers: 
  - name: string   #必选,容器名称
    image: string  #必选,容器的镜像名称
  
    resources: #资源限制和请求的设置
      limits:  #资源限制的设置
        cpu: string     #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数
        memory: string  #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
      requests: #资源请求的设置
        cpu: string    #Cpu请求,容器启动的初始可用数量
        memory: string #内存请求,容器启动的初始可用数量

如下为一段实际使用中的配置

更多配置,请参考文档:k8s文档

3、关于pod的创建流程

以通过kubectl apply -f xxx.yaml 这种方式创建的pod进行说明,结合本文开头的k8s架构图:

  • kubectl向apiserver发送创建pod的请求;
  • apiserver把pod的创建信息存储到etcd进行保存;
  • scheduler监听到未绑定node的pod资源,通过调度算法对该pod资源选定一个合适的node进行绑定,然后响应给apiserver,更新pod状态并存储到etcd中;
  • 在绑定的node中,Controller-Manager通知kubelet收到分配到自身节点上的pod,调用容器引擎api创建容器,并把容器状态响应给apiserver;

4、Pod调度策略

默认情况下,一个Pod在哪个Node节点上运行,是由Scheduler组件采用相应的算法计算出来的,这个过程是不受人工控制的。但是在实际使用中,这并不满足的需求,因为很多情况下,我们想控制某些Pod到达某些节点上,那么应该怎么做呢?这就要求了解k8s对Pod的调度规则 。

下面列举几个影响pod调度的因素:

pod资源限制

scheduler根据requests找到足够大小的node进行调度

使用节点选择器标签(nodeSelector)

节点选择器可以将节点分开,比如k8s集群中有多个节点,为了区分生产,开发和测试环境,就可以利用节点选择器标签进行划分;

例如,当前需要把pod调度到开发环境中,则可以通过scheduler将pod调度到标签选择器中为env_role:dev的node中 ,对应的yaml核心配置如下:

nodeSelector: 
  env_role:dev/prod

关于节点选择器,后续还会通过一文详细讲解其使用。

到此这篇关于k8s中pod使用详解(云原生kubernetes)的文章就介绍到这了,更多相关k8s中pod使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

k8s中pod使用详解(云原生kubernetes)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

k8s中pod使用详解(云原生kubernetes)

这篇文章主要介绍了k8s中pod使用详解(云原生kubernetes),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-01-17

k8s Ingress使用详解(云原生kubernetes)

k8s提供了Ingress这种资源对象,Ingress只需要一个NodePort或者一个LB就可以满足暴露多个Service的需求,接下来通过本文讲解下k8s Ingress使用详解(云原生kubernetes),需要的朋友可以参考下
2023-02-23

k8sservice使用详解(云原生kubernetes)

这篇文章主要介绍了k8sservice使用详解(云原生kubernetes),一个Service可以看作一组提供相同服务的Pod的对外访问接口,作用于哪些Pod是通过标签选择器来定义的,Service是一个概念,主要作用的是节点上的kube-proxy服务进程,本文结合示例代码详解,需要的朋友参考下
2023-02-14

【云原生】Kubernetes CRD 详解(Custom Resource Definition)

定义 CRD 对象的操作会使用你所设定的名字和模式定义(Schema)创建一个新的定制资源, Kubernetes API 负责为你的定制资源提供存储和访问服务。 CRD 对象的名称必须是合法的 DNS 子域名。

K8S中Pod重启策略及重启可能原因详细讲解

在k8s集群中当某个pod资源需要重启时,我们只会对其进行删除,由其pod控制器进行重新构建,下面这篇文章主要给大家介绍了关于K8S中Pod重启策略及重启可能原因的相关资料,需要的朋友可以参考下
2023-05-20

Kubernetes 云原生存储 OpenEBS 中文使用指南

OpenEBS 是一组存储引擎,允许您为有状态工作负载 (StatefulSet) 和 Kubernetes 平台类型选择正确的存储解决方案。在高层次上,OpenEBS 支持两大类卷——本地卷和复制卷。

云原生 | K8s中VolumeMounts.subPath的巧妙用法

subPath其实就是volumes挂载的子目录或单个文件,是不是目录和单文件,取决于subPath在volumes挂载的目录下是否存在subPath定义的文件(文件或目录),如果不存在,则会volumes对应的目录下创建一个subPath

K8s使用率达72%,CNCF中国云原生调查公布

Kubernetes的使用率呈现逐渐上升的趋势,尤其是2019年使用率提升至72%。此外,公有云的使用率降低,未来,将有更多的企业、组织选择混合云。

[云原生] Kubernetes(k8s)健康检查详解与实战演示(就绪性探针 和 存活性探针)

liveness probes​ 在线检查机制,检查应用是否可用,如死锁,无法响应,异常时将根据restartPolicy来设置 Pod 状态会自动重启容器,如果容器不提供存活探针,则默认状态为 Success。

详解C++中普通旧数据(POD)的使用

普通旧数据就是内存中的连续字节序列,是能够被“仅当作数据”处理的对象。这篇文章主要带大家了解一下C++中普通旧数据的定义与使用,感兴趣的可以了解下
2023-03-03

k8s中job与cronjob使用实例详解

k8s中的job,主要用于批量处理的业务场景,比如像那种短暂的一次性任务(每个任务仅运行一次就结束),这篇文章主要介绍了k8s中job与cronjob使用详解,需要的朋友可以参考下
2023-03-06

详解Rainbond云原生平台简化Kubernetes业务问题排查

这篇文章主要介绍了详解Rainbond云原生平台简化Kubernetes业务问题排查,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-23

编程热搜

目录