kubectl explain pods #详细POD参数
vi pod-demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
namespace: default
labels:
app: myapp
tier: frontend
spec:
containers:
- name: myapp
image: ikubernets/myapp:v1
- name: busybox
image: busybox:latest
command:
- "/bin/sh"
- "-c"
- "echo $(date) >> /usr/share/nginx/html/index.html; sleep 5"
kubectl create -f pod-demo.yaml
kubectl describe pods pod-demo
kubectl logs pod-demo myapp
kubectl exec -it pod-demo -c myapp -- /bin/sh
kubectl delete pod pod-demo
kubectl get pods -w
kubectl delete -f pod-demo.yaml #删除pod,如果控制器控制的删除可以自动创建
命令,配置清单(命令式),配置清单(声明式)
资源配置清单:
自主式Pod资源
资源的清单格式:
一级字段: apiVersion(group/version) 有稳定版就不用公测版,
kind,metadata(name,namespace,labels,annotations(都有)),spec
status(只读)
spec字段,使用控制器管理POD依然有用
Pod资源:
spec.containers<[object]>
kubectl explain pods.spec.containers
容器参数:
name <string>
image <string> quay.io/coreos/flannel(仓库/用户/镜像)
imagePullPolicy <string> #镜像获取策略
Always, Never, IfNotPresent(总是下载,总是不下载,本地不存在则下载)
下载完后,有些字段不能改,除非删了重建,如NODEPORT可以改。
imagePullPolicy: IfNotPresent
ports 暴露端口
args <[]string> 参数
command <[]string> 命令(命令作为参数传递给args)
args和command什么时候生效:
https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/
1: 如果kubernetes没有提供command 和args 则使用docker 的 Entrypoint 和Cmd
2: command 没有args 只运行command 忽略docker的Entrypint cmd
3: args 默认使用镜像当中的Entrypoint 把args作为参数传递给Entrypoint,镜像中cmd没用了
4: 如果使用了 args command 完全自定义 命令,忽略Entrypoing cmd
给任何资源使用标签,可以用标签来操作,标签(键值对)
一个资源可以使用多个标签,一个标签可以对应多个资源
可以创建时指定,也可以创建之后使用命令管理
查看POD标签 LABELS
标签: key=value
key: 字母 数字 _ - .
value: 可以为空,只能字母 数字开头及结尾,中间可使用
kubectl get pods --show-labels
kubectl get pods -l app --show-labels #拥有app标签
kubectl get pods -L app,run
kubectl label --help #打标签帮助
kubectl label pods pod-demo release=canary #打标签
已有标签,打标会报错
kubectl label pods pod-demo release=stable --overwrite #覆盖
kubectl get pods -l app --show-labels #查看
kubectl get pods -l release,app #即有release标签,又有app标签
标签选择器:
等值关系: = == !=
集合关系:
key in (value1,value2.......)
key not in (value1,value2,............)
!key
kubectl get pods -l release=stable --show-labels
kubectl label pods nginx-deployment-5cb87c9ddc-z2w7cash=1764375887 release=canary #打标签
kubectl label pods nginx-deployment-5cb87c9ddc-z2w7c release=canary
kubectl get pods -l release=stable --show-labels
kubectl get pods -l release
kubectl get pods -l release=stable,app=myapp
kubectl get pods -l release!=stable,app!=myapp
等值关系
----------------------------------------------------------------------
集合关系
kubectl get pod -l "release in (canary,beta,alpha)"
kubectl get pod -l "release not in (canary,beta,alpha)"
许多资源支持内嵌字段定义其使用的标签选择器 :
matchLabels: 直接给定键值
matchExpressions: 基于给定的表达式来定义使用标签选择器 {key:"KEY",operator:"OPERATOR",
values:[VAL1,VAL2,................]}
操作符: In NotIn; values字段的值必须为非空列表
Exists NotExists: values字段的值必须为空列表
kubectl get nodes --show-labels
kubectl get nodes --show-labels
beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=node1
kubectl label nodes node1 disktype=ssd
kubectl get nodes --show-labels
kubectl explain pods.spec
nodeSelector <map[string]string>
节点标签选择器,
kubectl delete -f pod-demo.yaml
kubectl get nodes --show-labels
nodeName: 直接指定node
kubectl describe pods pod-demo
nodeName <string>
annotations: 资源注解
与label不同的地方在于,它不能用于挑选资源对象,仅用于为对象提供“元数据”。
一个容器一个进程
一个POD可以运行多个容器,但一般只运行一个
主容器一退出,POD就结束了,
主程序结束前: pre stop
主程序结束后: post start
对Pod的检测:
存活状态检测: liveness probe
就绪状态检测: readiness probe
Pod的生命周期:
-状态: pending(挂起) - Running,Failed,Succeeded,Unkown
创建Pod: apiserver-->schuelder-->etcd pod-->node 清单-->etcd-->apiserver
直接执行命令 HTTP/tcp 应用请求
liveness probe: 容器状态存活探测
readiness probe: 容器状态
Pod的生命周期: 状态 容器探测
Pod生命周期中的重要行为:
初始化容器
容器探测:
LIVENESS
readliness
restartPolicy:
Always,OnFailure,Never,Default to Always
300秒不断重启,最长时间
容器一般停止30秒,然后KILL
探针类型有三种:
ExecAction TCPSockerAction HTTPGetAction
存活性探针
就绪性探针
探的容器,不是POD
kubectl explain pods.spec.containers.livenessProbe
探针,只要定义一个就好了
exec <Object>
httpGet <Object>
tcpSocket <Object>
failureThreshold <integer> 失败几次才算失败 3
每次多长时间:
periodSeconds <integer> 默认10秒
超时多久算没响应:
timeoutSeconds <integer> 默认1秒
initialDelaySeconds <integer>: 初始化延迟探测:
kubectl explain pods.spec.containers.livenessProbe.exec:
command <[]string> 返回成功,就是存活的
vi liveness-exec.yaml
kubectl create -f liveness-exec.yaml
kubectl get pods -w
kubectl descript pods liveness-exec-pod
kubectl explain pods.spec.containers.livenessProbe.tcpSocket #Socker探测
kubectl explain pods.spec.containers.livenessProbe.httpGet
kubectl create -f liveness-exec.yaml
kubectl get pods -w
kubectl descript pods liveness-exec-pod
kubectl explain pods.spec.containers.livenessProbe.tcpSocket #Socker探测
kubectl explain pods.spec.containers.livenessProbe.httpGet
vi readiness-httpget.yaml
kubectl exec -it readiness-httpget-pod -- /bin/sh
kubectl describe pods readiness-httpget-pod
kubectl explain pods.spec.containers.lifecycle
vi poststart-pod.yaml
vi poststart-pod.yaml
回顾: Pod
apiVersion kind metadata spec status(只读)
spec:
containers:
nodeSelector
nodename
restartPolicy:
Always, Nerver Onfailure
containers:
name
image
imagePullPolicy: Always Nerver IfNotPresent
ports:
name:
containerPort:
livenessProbe
readinessProbe
liftcycle
内嵌探测:
ExecAction: exec
TCPSockerAction: tcpSocker
HTTPGetAction: httpGet