k8s-pod
Pod
k8s集群中部署的最小单元。Pod最主要的功能管理是将一个业务或者一个调用链的所有服务(容器)
pod生命周期
主容器作用:
1.提供pod中基础网络(基础命名空间)
2.提供共享储存
3.监控业务容器
pod生命周期:
1.创建pod
2.创建主容器
3.依次创建业务容器
4.执行回调钩子
5.进行探测(监控容器是否活着,和监控是否能被外网访问,容器挂了会自动创建新的)
6.执行结束回调钩子
7.终止容器
test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
- name: redis
image: redis
查看创建流程
kubectl describe pod test-6799fc88d8-42gkv
k8s配置清单
apiVersion :指定k8s部署的api版本号
kind : 指定资源类型(pod)
metadata : 记录部署应用的基础信息
spec : 指定部署详情
status # 部署状态(),不可编辑
# k8s部署一个yaml的应用:kubectl apply -f [配置清单]
string : 跟字符串
Object : key:value
[]Object :
- name:value
pod清单初体验
# kubectl explain Pod
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: nginx
image: nginx
- name: tomcat
image: tomcat
容器状态
Pending:挂起
Running:运行中
compland:成功,pod中所有容器都成功终止并且不会被重启
Failed:失败,至少有一个容器失败终止,即容器以非0状态推出或者被系统禁止
Unknown:未知,aip server无法正常回去到pod对象状态信息,通常由于无法与所在工作节点的kubelet通信所致
ImgPullErr : 镜像拉取失败
ContainerCreating : 容器创建中
Pod重启策略
当某个容器异常退出或者健康检查失败, kubelet将根据RestartPolicy的设置来进行相应的操作, 重启策略有Always , OnFailure, Never
1.Always: 当容器失效时, 由kubelet自动重启该容器
2.OnFailure: 当容器终止运行且退出码不为0时, 由kubelet自动重启该容器
3.Never: 不论容器运行状态如何, kubelet都不会重启该容器
kubelet重启失效容器的时间间隔以sync-frequency乘以2n来计算, 例如1丶2丶4丶8倍等, 最长延时5min, 并且在重启后的10min后重置该时间
pod的重启策略与控制方式息息相关
1.RC和DeamonSet必须设置为Always,需要保证该容器持续运行
2.Job: OnFailure或Never, 确保容器执行完成后不再重启
3.kubelet:在pod失效时自动重启它,不论将restartPolicy设置什么值,也不会对pod进行健康检查
# 查看pod文件,restartPolicy值默认Always
kubectl edit pod test-6799fc88d8-42gkv
[root@sg-14 k8s_yaml]# kubectl get pod -o json |grep restartPolicy
Pod删除
kubectl delete pod test-tag
删除master的pod之后,容器不会自动下载重启
Pod指定部署在某一台机器
[root@sg-14 ~]# kubectl get nodes ## 查看机器名字
nodeName: XXX机器名字
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
nodeName: sg-15
containers:
- name: nginx
image: nginx
pod配置清单详解
apiVersion: v1 # 必选,API的版本号
kind: Pod # 必选,类型Pod
metadata: # 必选,元数据
name: nginx # 必选,符合RFC 1035规范的Pod名称
namespace: web-testing # 可选,不指定默认为default,Pod所在的命名空间
labels: # 可选,标签选择器,一般用于Selector
- app: nginx
annotations: # 可选,注释列表
- app: nginx
spec: # 必选,用于定义容器的详细信息
containers: # 必选,容器列表
- name: nginx # 必选,符合RFC 1035规范的容器名称
image: nginx:v1 # 必选,容器所用的镜像的地址
imagePullPolicy: Always # 可选,镜像拉取策略
workingDir: /usr/share/nginx/html # 可选,容器的工作目录
volumeMounts: # 可选,存储卷配置
- name: webroot # 存储卷名称
mountPath: /usr/share/nginx/html # 挂载目录
readOnly: true # 只读
ports: # 可选,容器需要暴露的端口号列表
- name: http # 端口名称
containerPort: 80 # 端口号
protocol: TCP # 端口协议,默认TCP
env: # 可选,环境变量配置
- name: TZ # 变量名
value: Asia/Shanghai
- name: LANG
value: en_US.utf8
resources: # 可选,资源限制和资源请求限制
limits: # 最大限制设置
cpu: 1000m
memory: 1024MiB
requests: # 启动所需的资源
cpu: 100m
memory: 512MiB
readinessProbe: # 可选,容器状态检查
httpGet: # 检测方式
path: / # 检查路径
port: 80 # 监控端口
timeoutSeconds: 2 # 超时时间
initialDelaySeconds: 60 # 初始化时间
livenessProbe: # 可选,监控状态检查
exec: # 检测方式
command:
- cat
- /health
httpGet: # 检测方式
path: /_health
port: 8080
httpHeaders:
- name: end-user
value: jason
tcpSocket: # 检测方式
port: 80
initialDelaySeconds: 60 # 初始化时间
timeoutSeconds: 2 # 超时时间
periodSeconds: 5 # 检测间隔
successThreshold: 2 # 检查成功为2次表示就绪
failureThreshold: 1 # 检测失败1次表示未就绪
securityContext: # 可选,限制容器不可信的行为
provoleged: false
restartPolicy: Always # 可选,默认为Always
nodeSelector: # 可选,指定Node节点
region: subnet7
imagePullSecrets: # 可选,拉取镜像使用的secret
- name: default-dockercfg-86258
hostNetwork: false # 可选,是否为主机模式,如是,会占用主机端口
volumes: # 共享存储卷列表
- name: webroot # 名称,与上述对应
emptyDir: {} # 共享卷类型,空
hostPath: # 共享卷类型,本机目录
path: /etc/hosts
secret: # 共享卷类型,secret模式,一般用于密码
secretName: default-token-tf2jp # 名称
defaultMode: 420 # 权限
configMap: # 一般用于配置文件
name: nginx-conf
defaultMode: 420
pod配置清单图解
选择了IT,必定终身学习