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内存

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

查看所有标签

猜你喜欢:

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

算法图解

算法图解

[美] Aditya Bhargava / 袁国忠 / 人民邮电出版社 / 2017-3 / 49.00元

本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。书中的前三章将帮助你打下基础,带你学习二分查找、大O表示法、两种基本的数据结构以及递归等。余下的篇幅将主要介绍应用广泛的算法,具体内容包括:面对具体问题时的解决技巧,比如,何时采用贪婪算法或动态规划;散列表的应用;图算法;K最近邻算法。一起来看看 《算法图解》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具