pod详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pod详解相关的知识,希望对你有一定的参考价值。
pod基本概念
pod是一个逻辑抽象概念,k8s的创建和管理的最小单元
一个pod由一个或多个容器组成
pod的特点
- 一个pod可以理解为一个应用实例提供服务
- pod中的容器始终部署在一个Node上
- pod中容器共享网络和存储资源
pod存在的意义
pod主要用法:
运行单个容器:最常见的用法,在这种情况下可以将pod看作是单个容器的抽象封装。
运行多个容器:边车模式(sideCar),通过在pod中定义专门容器,来执行主业务容器需要的辅助工作,这样的好处是将辅助功能同主业务容器解耦,实现独立发布和能力重用。
例如:日志收集、应用监控
pod内的容器资源共享
网络共享
pod的网络共享是默认的。每一个pod都有一个Infra Container容器,这个容器我们称之为网络容器,他负责一个pod内的所有容器的网络共享
所以,在一个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详解的主要内容,如果未能解决你的问题,请参考以下文章