k8s核心技术-Pod篇

栏目: IT技术 · 发布时间: 4年前

内容简介:每个Pod都有一个特殊的被称为“根容器”的Pause容器Pause容器对应的镜像属于k8s平台的一部分,除了Pause容器还包含一个或多个紧密相关的业务容器Pod图示:

Pod详解

Pod介绍

Pod 是k8s的重要概念,要掌握

每个Pod都有一个特殊的被称为“根容器”的Pause容器

Pause容器对应的镜像属于k8s平台的一部分,除了Pause容器还包含一个或多个紧密相关的业务容器

Pod图示:

k8s核心技术-Pod篇

  • Pod VS 应用

    每个Pod都是应用的一个实例,有专用的IP

  • Pod VS 容器

    一个Pod可以有多个容器,彼此间共享网络和存储资源

    每个Pod中有一个Pause容器保存所有的容器状态,通过管理Pause容器,达到管理Pod中所有容器的效果

  • Pod VS 节点

    同一个Pod中的容器总会被调用到相同的Node节点,不同节点Pod的通信基于虚拟二层网络技术实现

  • Pod VS Pod

    普通的Pod 和静态Pod

Pod 定义

通过yaml文件格式定义pod

yaml格式校验工具

Pod使用

在k8s中对运行的容器要求为:

容器的主程序需要一直在前台运行,而不是后台运行

所以应用需要改造成前台运行的方式

如果我们创建的 docker 镜像的启动命令是后台执行程序,则kubelet创建包含这个容器的pod

之后运行该命令,即认为Pod已经结束,将立刻销毁该Pod.

如果该Pod定义了RC,则创建、销毁会陷入一个无限循环的过程中

Pod可以由1个或多个容器组合而成

  • 一个容器组成的pod

    demo1.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: mytomcat
      labels: 
        name: mytomcat
    spec:
      containers:
      - name: mytomcat
        image: tomcat
        ports:
创建pod:

[root@laptop tmp]# kubectl create -f demo1.yaml

pod/mytomcat created

查看pod:

[root@laptop tmp]# kubectl get pods //或者kubectl get po

NAME READY STATUS RESTARTS AGE

mytomcat 0/1 ContainerCreating 0 2m30s

[root@laptop tmp]# kubectl describe po mytomcat //查看特定的name

删除pod:

[root@laptop tmp]# kubectl delete -f demo1.yaml

[root@laptop tmp]# kubectl delete pod --all/[pod_name]

* 多个容器组成的pod

demo2.yaml

apiVersion: v1

kind: Pod

metadata:

name: myweb
labels: 
  name: tomcat-redis

spec:

containers:
- name: tomcat
  image: tomcat
  ports:
  - containerPort: 8000
- name: redis
  image: redis
  ports:
  - containerPort: 6379
## Pod分类

### 普通Pod 

普通pod 一旦被创建,就会被放入到etcd中存储,随后会被k8s master调度到某个具体的Node上并进行绑定,随后该pod对应的Node上的kubelet进程实例化成一组相关的docker容器并启动起来

在默认情况下,当pod里某个容器停止时,k8s会自动检测到这个问题并且重新启动这个pod里所有容器。

如果该pod所在的Node当机,则会将这个Node上所有的pod重新调度到其他节点上



### 静态Pod

静态pod是由kubelet进行管理的仅存在于特定Node上的pod,它们不能通过API Server进行管理。

无法与RC(replicationController)、Deployment和DaemonSet进行关联,并且kubelet也无法对它们进行健康检测



## Pod生命周期和重启策略



### Pod状态

| 状态值    | 说明                                                                                 |
| --------- | ------------------------------------------------------------------------------------ |
| Pending   | API Server已经创建了该pod,但Pod中的一个或多个容器的镜像还没有创建,包括镜像下载过程 |
| Running   | Pod 内所有容器已创建,且至少一个容器处于运行状态,正在启动状态或正在重启状态         |
| Completed | Pod内所有容器均成功执行退出,且不会再重启                                            |
| Failed    | Pod内所有容器均已退出,但至少一个容器退出失败                                        |
| Unknown   | 由于某种原因无法获取Pod状态,例如网络通信不通                                        |



### Pod重启策略

重启策略包括Always, OnFailure和Never , 默认是Always

| 重启策略  | 说明                                                   |
| --------- | ------------------------------------------------------ |
| Always    | 当容器失效时,由kubelet自动重启该容器                  |
| OnFailure | 当容器终止运行且退出码不为0时,由kubelet自动重启该容器 |
| Never     | 不论容器运行状态如何,kubelet都不会重启该容器          |



## Pod资源配置

每个Pod都可以对其能使用的服务器上的计算资源设置限额,

**`k8s中可以设置限额的计算资源有CPU和Memory两种`**

其中CPU的资源单位是CPU数量,是一个绝对值而非相对值

Memory配置也是一个绝对值,它的单位是字节数

k8s中,一个计算资源进行配置需要设定两个参数:

* requests 表示该资源最小申请数量,系统必须满足要求
* limits表示该资源最大允许使用的量,不能突破,该容器使用超过这个量的资源时,会被k8s kill并重启



看一个例子:

spec:

container:

  • name: db

    image: mysql

    resources:

    requests:
      memory: "64Mi"
      cpu: "250m"
    limits:
      memory: "128Mi"
      cpu: "500m"
上面的代码表示 mysql 容器申请至少0.25个cpu和64MiB内存

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Modeling the Internet and the Web

Modeling the Internet and the Web

Pierre Baldi、Paolo Frasconi、Padhraic Smyth / Wiley / 2003-7-7 / USD 115.00

Modeling the Internet and the Web covers the most important aspects of modeling the Web using a modern mathematical and probabilistic treatment. It focuses on the information and application layers, a......一起来看看 《Modeling the Internet and the Web》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具