pod结构和定义
文章目录
- 一、Pod结构
- 二、Pod定义
- 三、Pod配置
-
- (一)启动命令
- (二)环境变量
- (三)端口设置
- (四)资源配额
一、Pod结构
在kubernetes中,按照pod的创建方式可以将其分为两类:
- 自主式pod:kubernetes直接创建出来的pod,这种pod删除后就没有了,也不会重建
- 控制器创建的pod:通过控制器创建的pod,这种pod删除了之后还会自动重建
每个pod都可以包含一个或者多个容器,这些容器可以分为两类:
- 用户程序所在的容器,数量可多可少
- pause容器,这是每个pod都会有的一个
根容器
,它的作用是两个:- 可以根据它作为依据,评估整个pod的健康状态
- 可以在根容器上设置ip地址,其他容器共享此ip(Pod Ip)以实现 pod内部的网络通信 (这里是pod内部的通信,pod的之间的通讯采用虚拟二层网络技术来实现,我们当前环境用的是flannel)
二、Pod定义
yaml配置文件(资源清单):
apiVersion: v1 //必选,版本号,例如 v1
kind: pod //必选,创建的资源类型,例如 pod
metadata: //必选,元数据
name: String //必选,pod名称
namespace: String //所创建的资源的pod所属命名空间,默认为default
labels: //自定义标签列表
- name: String //标签键值对
annotations: //元数据,自定义注解列表
- name: String //元数据,自定义注解名字
spec: //pod中容器的详细定义
containers: //pod中的容器列表,可以有多个容器
- name: String //容器名称
image: String //容器中的镜像名
imagesPullPolicy: [Always|Never|IfNotPresent]//获取镜像的策略,一直拉取,从不拉取,本地有镜像不拉取
command: [String] //容器的启动命令列表(不配置的话使用镜像打包时使用的启动命令)
args: [String] //容器启动参数列表
workingDir: String //容器的工作目录
volumeMounts: //挂载到到容器内部的存储卷设置
- name: String //应用Pod定义的共享存储卷名称,需要使用volumes[]部分定义的共享存储卷名称
mountPath: String //存储卷在容器内Mount的绝对路径,应少于512个字符
readOnly: boolean //是否为只读模式,默认为读写模式
ports: //容器需要暴露的端口号列表
- name: String //端口的名称
containerPort: int //容器要暴露的端口
hostPort: int //容器所在主机监听的端口(容器暴露端口映射到宿主机的端口),默认与containerPort相同,设置hostPort时,同一台主机将无法启动该容器的第二个副本
protocol: String //端口协议,支持TCP和UDP,默认为TCP
env: //容器运行前要设置的环境列表
- name: String //环境变量的名称
value: String //环境变量的值
resources: //资源限制和资源请求的设置
limits: //资源限制的设置
cpu: Srting //CPU限制,单位为core数,将用于docker run --cpu-shares参数
memory: String //内存限制,单位可以为MiB,GiB等,将用于docker run --memory参数
requests: //资源请求设置
cpu: String //cpu请求,单位为core数,容器启动的初始可用数量
memory: String //内存请求,单位为MiB或GiB,容器启动的初始可用数量
livenessProbe: //pod内容器健康检查的设置,探测几次无反应后,将自动重启该容器,探测方式包括:exec,httpGet,tcpSocket
exec: //exec探测方式
command: [String] //exec方式需要指定的命令或脚本
httpGet: //通过httpget检查健康,需要指定path,port
path: String //网址URL路径(去除对应的域名或IP地址的部分)
port: number //对应端口
host: String //域名或IP地址
scheme: Srtring //对应的检测协议,如http
httpHeaders: //指定报文头部信息
- name: Stirng //头部信息名称
value: String //头部信息值
tcpSocket: //通过tcpSocket检查健康
port: number //探测端口的端口号
initialDelaySeconds: 0//容器启动完成后首次探测的时间,单位为s
timeoutSeconds: 0 //探测等待响应超时时间,单位为s,默认为1,超时认为容器不健康,容器将重启
periodSeconds: 0 //定期探测时间设置,单位为s,默认为10
successThreshold: 0 //探测几次成功后认为成功
failureThreshold: 0 //探测几次失败后认为失败
securityContext: //安全配置
privileged: falae //
restartPolicy: [Always|Never|OnFailure]//重启策略,终止定会重启,除正常结束(退出码为0)外其他非0退出码终止才重启,Pod终止后退出码报告给master不重启Pod;always:当容器退出时,总是重启容器,默认策略,onfailure:当容器异常退出(退出状态码非0)时,重启容器,nerver:当容器退出时,从不重启容器(k8s中不支持重启pod资源,这里说的重启指的是删除重建pod)
nodeSelector: object //设置Node的Label,key:value格式指定,Pod将被调度到具有这些Label的Node上
imagePullSecrets: //pull镜像时使用Secrets名称,以name:sercretkey格式指定
- name: String //参照物名称
hostNetwork: false //是否使用主机网络模式,默认为false,设置为true,表示使用宿主机网络,不使用docker网桥,此Pod无法在同一台机上启动第2个副本
volumes: //在该pod上定义共享存储卷列表
- name: String //共享存储卷名称,一个Pod内,每个存储卷定义一个名称,供spec[].containers[].volumeMounts[].name应用,其类型很多,如:emptyDir,hostPath等
emptyDir: {
} //emptyDir类型的存储卷,零时目录,与Pod同生命周期,空对象
hostPath: //hostPath类型的存储卷,表示挂载Pod所在主机的目录,通过volumes[].hostNetwork.path指定
path: string //Pod所在主机的目录,将用于容器中的mount的目录
secret: /
qq_37523370: 这图太形象了,理解的透透的
起嘛名啊: 可以用ab命令来测试: ab -n100 -c100 -k http://yoursit/limit.html 1 注意:ab命令的-n -c都是指的发送多少请求,即-n一共发送多少请求,-c同时发送多少请求,他并不关心需要多少连接来发送,默认情况下是每个请求都建立一个连接来发送。上面这个命令,由于默认是一个连接发送一个请求,那么这将会同时建立100个连接,而这样的话,就会导致限制超过(对于一个ip最多只能一个连接)。99个请求都会失败。 而如果你只开一个连接: ab -n100 -c100 -k http://yousit/limt.html 1 这里的-k选项就是表示keepalive,只开一个连接来发送这100个请求,即使是同时发送,那么server也不会认为你超过了,因为在一个时间你只是建立一个连接,这样这100个请求都会干净利落的处理完成。 你这两个命令不是一样的吗?
Heng_Java: 拿不到72这个值,返回的是空。
callmeconquer: 我发了个帖子,解决了,企业微信的问题需要设置白名单
JinLiJiuHao: 我也是同样的问题,你解决了吗?