023、深入理解Pod对象
本文最后更新于 68 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

深入理解Pod对象

  • 最小部署单元
  • 一组容器的集合
  • 一个Pod中的容器共享网络命名空间
  • Pod是短暂的

一、Pod容器分类

  • Infrastructure Container:基础容器

    • 维护整个Pod网络空间
  • InitContainers:初始化容器

    • 先于业务容器开始执行
  • Containers:业务容器

    • 并行启动

二、镜像拉取策略(imagePullPolicy)

  • IfNotPresent:默认值,镜像在宿主机上不存在时才拉取
  • Always:每次创建 Pod 都会重新拉取一次镜像
  • Never: Pod 永远不会主动拉取这个镜像
apiVersion: v1  
kind: Pod  
metadata:
  name: foo
  namespace: awesomeapps  
spec:
  containers:
    - name: foo
      image: janedoe/awesomeapp:v1  
      imagePullPolicy: IfNotPresent

需认证的Docker仓库镜像拉取

#添加用户名密码

kubectl create secret docker-registry myregistrykey --docker-username=admin --docker-password=Harbor12345 --docker-email=admin@163.com --docker-server="192.168.1.27"

kubectl get secret 
apiVersion: v1
kind: Pod
metadata:
  name: foo
  namespace: awesomeapps
spec:
  containers:
    - name: foo
      image: janedoe/awesomeapp:v1
  imagePullSecrets:
    - name: myregistrykey

三、资源限制(resources)

Pod和Container的资源请求和限制:

  • spec.containers[].resources.limits.cpu
  • spec.containers[].resources.limits.memory
  • spec.containers[].resources.requests.cpu
  • spec.containers[].resources.requests.memory
apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
  - name: db
    image: mysql
    env:
    - name: MYSQL_ROOT_PASSWORD
     value: "password"
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
  - name: wp
    image: wordpress
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

四、重启策略(restartPolicy)

  • Always:当容器终止退出后,总是重启容器,默认策略。
  • OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
  • Never:当容器终止退出,从不重启容器。
apiVersion: v1
kind: Pod
metadata:
  name: foo
  namespace: awesomeapps
spec:
  containers:
  - name: foo
    image: janedoe/awesomeapp:v1
  restartPolicy: Always
kubectl explain pods.spec

五、健康检查

1、Probe有以下两种类型:

  • livenessProbe

    ​ 如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。

  • readinessProbe

    ​ 如果检查失败,Kubernetes会把Pod从service endpoints中剔除。

2、Probe支持以下三种检查方法:

  • httpGet

    ​ 发送HTTP请求,返回200-400范围状态码为成功。

  • exec

    ​ 执行Shell命令返回状态码是0为成功。

  • tcpSocket

    ​ 发起TCP Socket建立成功。

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

官网实例:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#

六、调度约束

1572967425344

1、nodeName用于将Pod调度到指定的Node名称上

apiVersion: v1 
kind: Pod  
  metadata:
    name: pod-example  
    labels:
      app: nginx 
spec:
  nodeName: 192.168.31.65  
  containers:
  - name: nginx  
    image: nginx:1.15

2、nodeSelector用于将Pod调度到匹配Label的Node上

apiVersion: v1 
kind: Pod  
metadata:
  name: pod-example 
spec:
  nodeSelector:  
    env_role: dev
  containers:
  - name: nginx  
    image: nginx:1.15

3、给node打标签方法

kubectl label nodes 192.168.1.246 env_role=dev
kubectl label nodes 192.168.1.247 env_role=prod

#验证
kubectl get nodes --show-labels

七、故障排查

描述
Pending Pod创建已经提交到Kubernetes。但是,因为某种原因而不能顺利创建。例如下 载镜像慢,调度不成功。
Running Pod已经绑定到一个节点,并且已经创建了所有容器。至少有一个容器正在运行 中,或正在启动或重新启动。
Succeeded Pod中的所有容器都已成功终止,不会重新启动。
Failed Pod的所有容器均已终止,且至少有一个容器已在故障中终止。也就是说,容器 要么以非零状态退出,要么被系统终止。
Unknown、Terminating 由于某种原因apiserver无法获得Pod的状态,通常是由于Master与Pod所在主机kubelet通信时出错。
CrashLoopBackOff 状态说明容器曾经启动了,但又异常退出了。此时可以先查看一下容器的日志
ImagePullBackOff 通常是镜像名称配置错误或者私有镜像的密钥配置错误导致
kubectl describe TYPE/NAME
kubectl logs TYPE/NAME [-c CONTAINER]
kubectl exec POD [-c CONTAINER] --COMMAND [args...]
kubectl delete pods <pod> --grace-period=0 --force   #强制删除 Pod

官方文档:https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/

谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇