pod详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pod详解相关的知识,希望对你有一定的参考价值。

pod基本概念

pod是一个逻辑抽象概念,k8s的创建和管理的最小单元

一个pod由一个或多个容器组成

pod详解_k8s

pod的特点

  • 一个pod可以理解为一个应用实例提供服务
  • pod中的容器始终部署在一个Node上
  • pod中容器共享网络和存储资源

pod存在的意义

pod主要用法:

运行单个容器:最常见的用法,在这种情况下可以将pod看作是单个容器的抽象封装。

运行多个容器:边车模式(sideCar),通过在pod中定义专门容器,来执行主业务容器需要的辅助工作,这样的好处是将辅助功能同主业务容器解耦,实现独立发布和能力重用。

例如:日志收集、应用监控

pod详解_k8s_02

pod内的容器资源共享

网络共享

pod的网络共享是默认的。每一个pod都有一个Infra Container容器,这个容器我们称之为网络容器,他负责一个pod内的所有容器的网络共享

pod详解_k8s_03

所以,在一个pod中,所有容器的网络是共享的,即在多容器中,我们的辅助容器可能会有通过端口来访问主容器的需求,但每个容器在每次重启都会启动不同的ip,但因为网络共享,我们在复制容器中可以用127.0.0.1的ip来访问主容器的服务。

存储共享

与网络共享不同,pod内的存储共享不是默认的。他是需要在pod的yaml文件去设置的。通过创建数据卷的方式。






pod重启策略和健康检查

重启策略

  • Always: 当容器终止后,总是重启容器,默认策略。
  • OnFailure: 当容器异常退出后(退出状态码非0),才会重启容器。
  • Never: 当容器终止退出后,从不重启容器。

健康检查有以下3种类型

  • livenessProbe (存活检查):如果检查失败,将杀死容器,根据pod的restartPolicy来操作。
  • readinessProbe (就绪检查): 如果检查失败,k8s会把pod从service endponints中剔除。
  • startupProbe (启动检查): 检查启动成功后才由存活检查接手,用于保护慢启动容器。

支持以下三种检查方法

  • httpGet发送http请求,返回200-400返回状态码为成功。
  • exec: 执行shell命令返回状态码为0成功。
  • tcpSocket: 发起Tcp Socket建立成功。
[root@k8s-master ~]# cat prob.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
name: prob
namespace: default
spec:
replicas: 3
selector:
matchLabels:
project: ec
app: portal
template:
metadata:
labels:
project: ec
app: portal
spec:
containers:
- name: nginx
image: nginx:1.21
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5 # 启动多久后开始检查
periodSeconds: 10 # 每隔多久检查一次
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5 # 启动多久后开始检查
periodSeconds: 10 # 每隔多久检查一次
# 加了 -w 就相当于监听,有啥变化就会输出
[root@k8s-master ~]# kubectl get ep -w
NAME ENDPOINTS AGE
demo3 10.244.169.148:80,10.244.169.149:80,10.244.169.161:80 + 3 more... 9h
demo4 10.244.169.152:80,10.244.169.153:80,10.244.36.75:80 6h45m
kubernetes 192.168.18.125:6443 21h
prob 10.244.169.148:80,10.244.169.149:80,10.244.169.161:80 + 3 more... 9m19s
demo3 10.244.169.148:80,10.244.169.149:80,10.244.169.162:80 + 2 more... 9h
prob 10.244.169.148:80,10.244.169.149:80,10.244.169.162:80 + 2 more... 11m
prob 10.244.169.148:80,10.244.169.149:80,10.244.169.161:80 + 3 more... 11m
demo3 10.244.169.148:80,10.244.169.149:80,10.244.169.161:80 + 3 more... 9h

pod命令

针对一个pod中有多个容器的pod命令需要加 -c 指定容器名称

# 查看日志
kubectl logs <pod名称> -c <容器名称> -f
# 进入容器终端
kubectl exec -it <pod名称> -c <容器名称> -- ba





以上是关于pod详解的主要内容,如果未能解决你的问题,请参考以下文章

kubernetes Pod 异常排错

攻坚克难详解k8s持久化存储数据pvpvc存储问题

攻坚克难详解k8s持久化存储数据pvpvc存储问题

pod详解

Pod概念详解

K8s pod详解