kubernetes pod

1、pod 基本用法

  1. pod要求其主程序一直在前台运行,如该无法改造为前台执行程序,可以使用开源工具supervisor辅助进行前台运行的功能。
  2. pod中可以包含多个容器,在spec的containers下定义多个容器。
  3. 静态pod是由kubelet管理,进存在与特定node上的pod,他们不能通过apd、rcdaemonset等进行管理。通过node节点上的yaml文件定义,如果想删除该pod必须删除yaml文件。

2、pod共享volume

  1. 同一个pod中的容器共享pod界别的存储卷volume。
  2. spec.volumes:定义volmes:
  volumes:
  - name: postgresql-dev
    persistentVolumeClaim:
      claimName: postgres-dev-2
  - emptyDir: {}
  1. spec.containers.volumeNounts定义挂载点:
    volumeMounts:
    - mountPath: /var/lib/pgsql/data
      name: postgresql-dev
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: default-token-28szx
      readOnly: true

3、pod中使用configmap

configmap 概述:

  • 生成为容器内的环境变量
  • 设置容器启动命令的启动参数,需设置环境变量
  • 以volume的形式挂载为容器内部的文件和目录

configmap创建:

  • 通过yaml文件创建key:value键值对形式的configmap,key:value为典型字符串
  • 通过yaml文件创建key:value键值对,key为文件别名,value为文件内容
  • kubectl命令创建,指定配置文件目录,目录中的文件名为key,文件内容为value

pod中使用configmap

  • 通过环境变量使用pod:
  containers:
  - env:
    - name: DB_PASSWORD
      valueFrom:
        configMapKeyRef:
          key: database-password
          name: postgres-svc
  • 通过volumeMount使用configmap
  containers:
    volumes:
      - configMap:
      defaultMode: 420
        name: console-configmap
        name: volume-iris

使用configmap的限制条件

  • configmap必须在pod之前创建
  • configmap受namespace的限制,相同namespace下可以使用。
  • configmap中的配额管理未实现。
  • 静态pod无法使用configmap
  • pod挂载configmap只能挂载为目录,不能挂载为文件。

4、pod生命周期和重启策略

pod状态如下:

  1. Pending
  2. Running
  3. Succeeded
  4. Failed
  5. Unknow

    pod 重启策略 RestartPolicy

    Always:容器失效是,kubelet自动重启容器
    OnFailure :容器终止运行,退出代码不为0时,kubelet自动重启
    Never :不管什么状态,都不会重启

5、Pod健康检查

  1. LivenessProbe:用于判断容器是否running。如该容器不包含此探针,LivenessProbe永远返回success。
  2. ReadinessProbe:用于判断容器是否启动完成ready,如该该探针检测到失败,将在service的endpoint中删除该pod。

    LivenessProbe三种实现方式:
    1.ExecAction:执行一个命令来检测。

"readinessProbe": {
    "exec": {
        "command": [
            "/bin/sh",
            "-i",
            "-c",
            "psql -h 127.0.0.1 -U $POSTGRESQL_USER -q -d $POSTGRESQL_DATABASE -c 'SELECT 1'"
        ]
    },

2.TCPSocketAction:通过IP地址和端口号检查

"livenessProbe": {
    "failureThreshold": 3,
    "initialDelaySeconds": 30,
    "periodSeconds": 10,
    "successThreshold": 1,
    "tcpSocket": {
        "port": 5432
    },
    "timeoutSeconds": 1
},

3.HTTPGetAction:通过IP地址、端口号、路径来调用http get方法检查

"livenessProbe": {
    "httpGet": {
        "path": "/health",
        "port": 8000,
        "scheme": "HTTP"
    },

6、pod 调度

  1. 全自动调度 RC、Depolyment
    自动部署一个容器的多个副本,并维持副本数量,经过master上的scheduler调度到合适的node上面。

  2. 定向调度 nodeselector
    通过node的标签和pod的nodeselector属性匹配,指定pod运行在特定的node上
    在spec下,添加nodeselector

  3. node亲和性调度:nodeAffinity
    用于替换nodeselector的全新调度策略,目前有两种亲和性表达:
    RequiredDuringSchedulingIgnoredDuringExecution:功能与nodeselector相似,相当于硬限制。
    PreferredDuringSchedulingIgnoredDuringExecution:强制优先满足指定规则。

  4. pod亲和性与互斥调度策略
    根据节点上正在运行的pod的标签而不是节点上的标签来调度。

  5. 污点和容忍 Taints,Tolerations
    Taints:在node上设置taints,效果是noschedule,除非pod明确声明可以容忍这个taints,否则不会调度到该node。
    Tolerations:pod中的Tolerations声明key和value需要与taints保持一致,可以容忍并调度到node。

  6. DaemonSet,每个node上调度一个pod
    适用于存储、日志采集、监控等需求

  7. job 批处理调度

  8. Cronjob 定时任务

  9. 自定义调度器

  10. 初始化容器 init container

  11. pod 升级和回滚

  12. pod扩容和缩容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值