zoukankan      html  css  js  c++  java
  • Pod系列 (一) Pod简介

    一、基本概念

    总的来说Pod包括以下几个方面:

    • 最小的部署单元
    • 一个Pod中可以包含一个或者多个容器
    • 一个Pod中的容器共享网络命令空间
    • Pod是短暂的

    在k8s集群中最小的管理和部署单元是Pod而非容器,这是为什么呢?

      使用docker创建容器,一个容器起一个进程并且在一个容器中运行着一个应用程序;而Pod是多进程设计,运行多个应用程序(一个Pod可由多个容器组成,每个容器运行一个应用程序)。这样也方便管理。

    一个Pod中的容器时共享网络的,这是基于Pod中的Pause容器来实现的,下面会对此详细说明。共享网络也带来了同一个Pod中应用交互的方便性。

    Pod声明周期时短暂的,因为当Pod所在节点发生故障,该Pod会被转移到其它节点,而新的Pod与之前的Pod无任何关系。

    二、Pod实现机制

    基于Pod实现的功能,Pod有两个重要的实现机制:

    • 共享网络
    • 共享存储

      同一个Pod之间容器之间共享网络时如何实现的呢?另外就是如果一个Pod所在的节点发生故障,该Pod转移到其它节点,而此时Pod是全新的,那么之前的数据如何获取呢?

    1、共享网络

    我们知道容器本身通过namespace和group实现相互隔离的,如果想实现共享网络那么必须在同一个namespace中,而Pod就是基于此来实现的。

      在一个Pod中可以将容器分为两大部分:Pause容器以及用户的业务容器(container1、container2...),其中Pause是一个特殊的容器,Pod中首先创建的就是Pause容器,当其它的业务容器加入Pod后,会将其加入到Pause中,这样Pause将保留所有容器的状态,通过Pause容器来管理所有Pod中的容器,并且加入到Pause后会共享同一个namespace,也就是多个容器共享Pod的ip和的端口。

     2、共享存储

    当一个Pod从一个节点调度到另一个节点,它需要读取到之前的数据,那么就需要有一个持久化数据的地方称之为数据卷(volume)。

     如上所示,使用数据卷持久化数据,这样就算Pod被重新调配到其它节点也可以获取原来的数据。

    三、镜像拉取策略

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod 
    spec:
        containers:
          - name: nginx
            image: nginx:1.14
            imagePullPolicy: Always
        

    可以看到在上面的yaml文件中有imagePullPolicy参数,这个参数表示镜像拉取的策略,有三个选项:

    • IfNotPresent 默认值,镜像在宿主机上不存在时才拉取
    • Always 每次创建Pod都会重新拉取一次镜像
    • Never Pod永远不会主动拉取这个镜像

    四、Pod资源限制

    Pod的创建需要消耗资源,那么Pod调度过程中如果规定了对应的资源限制,就会调度到符合资源限制的节点上。

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod 
    spec:
        containers:
        - name: db
          image: mysql
          env:
          - name: MYSQL_ROOT_PASSWORD
            value: "password"
          resources:
            requests:
              memory: "64Mi"
              cpu: "250m"
            limits:
              memory: "128Mi"
              cpu: "500m"
        

    Pod中requests和limits的限制调度到符合的节点上。

    五、Pod重启机制

    apiVersion: v1
    kind: Pod
    metadata:
      name: test 
    spec:
        containers:
        - name: busybox
          image: busybox:1.28.4
          args:
          - /bin/sh
          - -c
          -sleep 36000
        restartPolicy: Never
        

    在该Pod的yaml文件中存在restartPolicy参数,表示Pod的重启策略,有三个值可供选择:

    • Always 当容器终止退出后,总是重启容器,默认策略
    • OnFailure 当容器异常退出时,才重启容器
    • Never 当容器终止退出,从不重启容器

    六、Pod健康检查

    apiVersion: v1
    kind: Pod
    metadata:
      labels: 
        test: liveness
      name: liveness-exec
    spec:
        containers:
        - name: liveness
          image: busybox
          args:
          - /bin/sh
          - -c
          - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy
          livenessProbe:
            exec:
              command:
              - cat
              - /tmp/healthy
            initialDelaySeconds: 5
            periodSeconds: 5
        

    Pod中的健康检查有:

    • livenessProbe 存活检查,如果检查失败,将杀死容器,根据Pod的restartPolicy来进行操作
    • readinessProbe 就绪检查,k8s会把Pod从serice endpoints中剔除掉

    支持的检查方法有三种:

    • http请求 返回200-400范围状态码为成功
    • exec 执行shell命令返回状态码是0为成功
    • tcpSocket 发起TCP Socket建立成功
    作者:iveBoy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Django-模板系统、session、web框架、内置分页
    Django-中间件、csrf(跨站请求伪造)、auth认证模块
    Django-orm数据库查询语句
    Django视图函数
    Django-URL路由配置
    Django基础介绍
    JavaScript、jQuery操作页面
    JavaScript基础
    css属性设置-显示与隐藏、盒子阴影、固定定位
    css高级选择器
  • 原文地址:https://www.cnblogs.com/shenjianping/p/14892100.html
Copyright © 2011-2022 走看看