ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

6. POD 配置1

2021-03-12 12:00:25  阅读:178  来源: 互联网

标签:容器 name 配置 探针 POD spec containers


文章目录

1. POD 的基本用法

1.1 POD运行说明

K8S 对容器运行的要求是主程序一直要在前台执行,如果使用 nohup 后台运行的话, 在nohup 执行完毕后则认为POD已经执行结束。接下来会立刻销毁POD。
如果这个时候陪配置了 ReplicationController, 监控到POD已经停止,就又有启动一个新的,这样就会陷入不断启动销毁的循环。所以对要求对制作的docker镜像必须以一个前台的命令作为启动命。

1.2 POD封装容器的用法

关于POD对于容器的封装要不要把多个耦合度较高的容器封装到一个POD,还没有定论,两种方式各有优劣。这里只是讲POD如何封装使用一个或容器。
容器定义在POD对象yaml的spec.containers下面。
单个容器示例:

apiVersion: v1
kind: Pod
metadata:
  labels:
    pod-template-hash: 74f56b7695
    workload.user.cattle.io/workloadselector: deployment-pa-dev-haep
  name: haep-74f56b7695-h442r
  namespace: pa-dev
spec:
  containers:
  - name: haep
    image: registry.com/test:2.2.0
    env:
    - name: JAVA_TOOL_OPTIONS
      value: -Xmx512m 
    imagePullPolicy: Always
    ports:
    - containerPort: 8080
      hostPort: 80
      name: 80tcp8080
      protocol: TCP

简单说明:

  • apiVersion(String) ,k8s中 APIServer的版本版本号
  • kind(String), K8S 资源对象的类型,这里是 Pod对象
  • metadata(Object), 定义资源对象的基础属性,对应的label,name和所属的命名空间等
  • spec(Object), 对象的详细属性定义,这里是Pod的详细信息
    下面的就是pod对象的一些详细属性了
  • containers(Object), pod对象的容器定义
  • env (List),表示POD容器使用的环境变量,name表示变量名称,value表示变量值
  • image (String),表示容器所使用的镜像
  • imagePullPolicy (Boolean),表示Pod创建的时候是否总是拉去镜像
  • name (String),表示容器名称
  • ports (List) , 容器需要暴露的端口
  • containerPort(int),暴露容器的端口
  • hostPort (int)暴露所在主机的端口,(每个主机只能暴露一个端口,不然端口冲突)
  • protocol(String) 使用的协议默认TCP
    使用如上的 ports定义则表示把容器的 8080 映射到主机的80

1.3 镜像拉取策略

spec.containers[].imagePullPolicy 有三种

配置含义
Always总是拉取
IfNotPresent镜像不存在才拉取, 这个是默认值
Never永远不拉取, 本地没有镜像就会报错

示例:
本地不存在镜像, 使用 IfNotPresent

1.4 资源限制

主要由有下面几个配置

配置含义
spec.containers[].resources.limits.cpu资源运行过程中需要给的最大的CPU
spec.containers[].resources.limits.memory资源运行过程中需要给的最大的内存
spec.containers[].resources.request.cpu资源运行至少要满足的CPU, 是在Node之间调度的基准
spec.containers[].resources.request.memory资源运行至少要满足的内存, 是在Node之间调度的基准

此处CPU分配单位是 m , 可以理解 1c = 1000m, 既 500m 为 0.5c

1.5 重启机制

spec.restartPolicy 重启机制配置如下

配置含义
Never从不重启
Alway总是重启
onFailure异常退出才重启, 例如一个批量任务正常结束后就不再重启了

2. POD健康检查

K8S提供了对容器进行应用层面的健康检查, 主要是通过探针实现
主要是以下两种检查

2.1 就绪探针

检查POD是否就绪, 就绪的话就加入Service的负载中, 否则将其移除, 会在POD的整个生命周期运行
spec.containers[].readnessProbe

    spec:
      containers:
      - env:
        - name: JAVA_TOOL_OPTIONS
          value: -Xmx512m
        image: xxxx
        imagePullPolicy: Always
        name: livenessTest
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /actuator/health
            port: 15010
            scheme: HTTP
          initialDelaySeconds: 10
          periodSeconds: 10
          successThreshold: 2
          timeoutSeconds: 5

配置说明:

参数说明
spec.containers[].readnessProbe.failureThreshold失败后连续尝试的次数, 最小1, 最大 3, 达到最大次数还是失败, 那么POD就会被标记为为就绪
spec.containers[].readnessProbe.successThreshold探针需要通过的最小连续成功检查数量。比如上面的配置连续两次成功, 就会把 POD标记为就绪
spec.containers[].readnessProbe.initialDelaySecondsPOD启动多少秒之后开始探针检查
spec.containers[].readnessProbe.periodSeconds检查探针的频率。等待多少秒之后进行下一次检查
          httpGet:
            path: /actuator/health
            port: 15010
            scheme: HTTP

这里表示是使用 http 请求的方式,
使用 HTTP 协议请求 15010 端口的 /actuator/health

2.2存活探针

检查POD是否是存活状态, 为否的话, 将按照重启机制执行
spec.containers[].livenessProbe
示例:

    spec:
      containers:
      - env:
        - name: JAVA_TOOL_OPTIONS
          value: -Xmx512m
        envFrom:
        - configMapRef:
            name: app-nacos-env
            optional: false
        image: xxxx
        imagePullPolicy: Always
        name: livenessTest
        liveinessProbe:
          failureThreshold: 3
          httpGet:
            path: /actuator/health
            port: 15010
            scheme: HTTP
          initialDelaySeconds: 60
          periodSeconds: 10
          successThreshold: 2
          timeoutSeconds: 5

和就绪探针区别的配置

配置说明:

参数说明
spec.containers[].readnessProbe.failureThreshold达到最大次数还是失败, 那么POD就会被标记为为未存活, 走重启策略
spec.containers[].readnessProbe.successThreshold探针需要通过的最小连续成功检查数量。比如上面的配置连续两次成功, 就会把 POD标记为存活

2.3 探针方式的配置

2.3.1 http

  • host:要连接的主机名(默认值:pod 的 IP)。
  • scheme:HTTP(默认)或 HTTPS。
  • path:HTTP/S 服务器上的路径 。
  • httpHeaders:自定义标头(如果需要标头用于身份验证、CORS 设置等) 。
  • port:访问服务器的端口名称或端口号

上面就是使用的案例

2.3.2 TCP

检查是否可以建立TCP链接
示例如下:

        liveinessProbe:
          tcpSocket:
            path: /actuator/health
            port: 21

2.3.3 Command

通过执行Shell命令的结果检查, 如果命令返回的退出代码为 0,则检查通过
示例:

        liveinessProbe:
          exec:
            command:
            	- cat
            	- /temp/health

标签:容器,name,配置,探针,POD,spec,containers
来源: https://blog.csdn.net/qq_21047625/article/details/114692270

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有