k8s中pod部分词条解释

基本内容

pod中文翻译是豆荚
描述docker容器就像是豆荚中的豆子一样
一组豆荚中包夹着一个或者多个的docker容器
pod为这些容器提供统一存储空间,网络

docker中的基本单位是container
k8s中的基本单位则是pod

kubelet启动一个Pod,会准备两个容器
一个是Pod声明的应用容器(例:nginx),另外一个是Pause。
Pause给当前应用容器设置好网络空间各种的环境

Pod的形式

  • Pod对容器有自恢复能力(Pod自动重启失败的容器)
  • Pod自己不能恢复自己,Pod被删除就真的没了
    还是希望k8s集群能自己在其他地方再启动这个Pod
  • 单容器Pod
  • 多容器协同Pod。我们可以把另外的容器称为**SideCar(为应用赋能)**
  • Pod 天生地为其成员容器提供了两种共享资源:[网络]和 [存储]
pod的yaml方式创建
vi podtest.yaml
---apiVersion: v1kind: Podmetadata:name: podtestspec:containers:- name: helloimage: busyboxcommand: ['sh', '-c', 'echo "Helloworld!" && sleep 3600']restartPolicy: OnFailure
---
[root@master01 ~]kubectl apply -f vi podtest.yaml

探针

每个容器三种探针(Probe)

  • 启动探针

    • kubelet 使用启动探针,来检测应用是否已经启动。如果启动就可以进行后续的探测检查。慢容器一定是指定启动探针。一直后台在等待启动
    • 启动探针 成功以后就不再看了,剩下存活探针和就绪探针持续运行
    •  一次性成功探针。
      
  • 存活探针

    • kubelet 使用存活探针周期性来检测容器是否正常存活。(有些容器可能产生死锁【应用程序在运行,但是无法继续执行后面的步骤】),如果检测失败就会重新启动这个容器
  • 就绪探针

    • kubelet 使用就绪探针,来检测容器是否准备可以接收流量。当一个 Pod 内的所有容器都准备好了,才能把这个 Pod 看作就绪了等待Service后端负载均衡多个Pod,如果某个Pod还没就绪,就会从service负载均衡里面剔除(暂时不能访问pod资源)

【Probe】配置项
三个指针里的

  • initialDelaySeconds:容器启动后要等待多少秒后存活和就绪探测器才被初始化,默认是 0 秒,最小值是 0。设置 3600(长了导致应用一段时间不可用) 设置5(短了陷入无限启动循环)

  • periodSeconds:执行探测的时间间隔(单位是秒)。默认是 10 秒。最小值是 1

  • successThreshold:探测器在失败后,被视为成功的最小连续成功数。默认值是 1

    • 存活和启动探针的这个值必须是 1。最小值是 1。
  • failureThreshold:当探测失败时,Kubernetes 的重试次数。 存活探针探测失败要重新启动容器。 就绪探测情况下的放弃 Pod 会被打上未就绪的标签。默认值是 3。最小值是 1。

  • timeoutSeconds:探测的超时后等待多少秒。默认值是 1 秒。最小值是 1。

-以nginx镜像写一份启动文件

apiVersion: v1
kind: Pod
metadata:name: "nginx-prob"namespace: defaultlabels:app: "nginx-prob"
spec:volumes:- name: nginx-volumehostPath: path: /tsui- name: nginx-htmlhostPath: path: /htmlcontainers:- name: nginximage: "nginx"ports:- containerPort: 80volumeMounts:- name: nginx-volumemountPath: /tsui- name: nginx-htmlmountPath: /usr/share/nginx/htmlstartupProbe:exec:command:  ["/bin/sh","-c","cat /tsui/abc"]  ## ($?)返回不是0,那就是探测失败  需要在tsui目录下创建abc目录# initialDelaySeconds: 20 ## 指定的这个秒以后才执行探测periodSeconds: 5  ## 每隔几秒来运行这个timeoutSeconds: 5  ##探测超时,到了超时时间探测还没返回结果说明失败successThreshold: 1 ## 成功阈值,连续几次成才算成功failureThreshold: 3 ## 失败阈值,连续几次失败才算真失败livenessProbe:   ## nginx容器有没有 /index.html,就绪探针httpGet:path: /index.html   ## 给容器发请求  需要在/usr/share/nginx/html下存在这个文件port: 80scheme: HTTPperiodSeconds: 5 successThreshold: 1 failureThreshold: 5 readinessProbe:exec:command:  ["/bin/sh","-c","cat /usr/share/nginx/html/abc.html"] initialDelaySeconds: 2 periodSeconds: 5  timeoutSeconds: 5  successThreshold: 3 failureThreshold: 5 

一些其他问题

httpget字段内的host不能使用127.0.0.1 http请不到

pod中的网络端口是1:1的,所以pod中的容器不能同时占用同一个端口

liveness探针探测失败,不能进入到改容器中

/etc/kubernetes/manifests 位置放的所有Pod.yaml文件,机器启动kubelet自己就把他启动起来。不能删除(除非文件删除),静态Pod一直守护在他的这个机器上


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部