Pod的资源浅析(一)
Pod
- K8s核心资源,用于运行容器
- 简称:po
- 一个Pod可以运行多个容器
- Pod中的容器可以共享网络和存储
这是关于k8s中pod资源的一些相关的属性设定
Pod的常用命令
- 查看Pod的yaml文件的书写方式
命令:kubectl explain pods.spec - 创建一个Pod
命令:
1.kubectl create -f nginx_pod.yml
2.kubectl apply-f nginx_pod.yml(如已存在Pod,则修改)
nginx_pod.yml
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
name: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
hostPort: 80
- 获取Pod列表
命令:kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx 0/1 ContainerCreating 0 4m18s
- 获取Pod信息,以yaml格式显示
命令:kubectl get pod -o yaml
apiVersion: v1
items:
- apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2020-05-08T02:46:49Z"
labels:
name: nginx
name: nginx
......
- 获取Pod详细状态信息
命令:kubectl describe pod nginx
命令注解:
nginx:pod名
Name: nginx
Namespace: default
Priority: 0
Node: oss-centos76-1/172.28.87.106
Start Time: Fri, 08 May 2020 10:46:49 +0800
Labels: name=nginx
Annotations: <none>
Status: Running
IP: 10.244.1.24
IPs:
IP: 10.244.1.24
......
- 修改Pod中的相关信息
命令:kubectl edit pod nginx - 删除一个Pod
命令:kubectl delete pod nginx - 通过标签(labels)筛选Pod
命令:kubectl get pod -l name=nginx
命令注解:
name=nginx:标签
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 3m6s
-
给pod打标签(labels)
命令:kubectl label pod nginx env=dev -
删除pod标签(labels)
命令:kubectl label pod nginx env- -
给Pod添加注解(annotate)
命令:kubectl annotate pod nginx dev=dev -
删除Pod注解(annotate)
命令:kubectl annotate pod nginx dev- -
进入Pod内部
命令:kubectl exec -it nginx /bin/bash -
查看Pod日志
命令:kubectl logs nginx -
从Pod中拷贝文件
命令:kubectl cp default/nginx:/etc/nginx/nginx.conf ./my.conf
命令注解:
default:命名空间(namespace)
nginx:Pod名
/etc/nginx/nginx.conf:拷贝文件的源地址
./my.conf:拷贝文件目标地址 -
从本机拷贝文件到Pod中
命令:kubectl cp ./my.conf default/nginx:/etc/nginx/nginx.conf
Pod生命周期
Pod重启策略
- Pod的重启策略RestartPolicy可能的值为Always、OnFailure和Never,默认为Always
Always:当容器失效时,有kubelet自动重启
OnFailure:当容器终止运行且退出码不为0时,由kubelet自动启动
Never:不论容器运行状态如何都不会重启
设定方式:
apiVersion: v1
kind: Pod
metadata:
name: busybox
labels:
name: busybos
spec:
restartPolicy: Always
containers:
- name: busybox
image: busybox
当运行上述Pod时,Pod会无限重启
Pod健康检查
健康检查的方式可以配置为以下的三种实现方式:
- ExecAction:在容器内执行指定命令。如果命令退出时返回码为0则表示容器健康
- TCPSocketAction:对指定端口上的容器的IP地址进行TCP检查。如果能够建立连接,则表明容器健康。
- HTTPGetAction:对指定的端口和路径上的容器的IP地址执行HTTP Get请求。如果响应的状态码大于等于200且小于等于400则表明容器健康
其他参数:
initialDelaySeconds:首次检查等待时间
timeoutSeconds:命令运行超时时间
periodSeconds:检查间隔时间
failureThreshold:最大失败次数
successThreshold:失败后测试成功的最小连接成功次数
LivenessProbe:存活性检查
- 设置exec探针yaml文件示例
livenessProbe:
exec:
command:
- cat
- /tmp/health
initialDelaySeconds: 15
timeoutSeconds: 1
- 设置TCP探针yaml文件示例
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 30
timeoutSeconds: 1
- 设置TCP探针yaml文件示例
livenessProbe:
httpGet:
path: /_status/healthz
port: 80
initialDelaySeconds: 30
timeoutSeconds: 1
ReadnessProbe:就绪性检查
- 设置exec探针yaml文件示例
readinessProbe:
exec:
command:
- cat
- /tmp/health
initialDelaySeconds: 15
timeoutSeconds: 1
- 设置TCP探针yaml文件示例
readinessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 30
timeoutSeconds: 1
- 设置TCP探针yaml文件示例
readinessProbe:
httpGet:
path: /_status/healthz
port: 80
initialDelaySeconds: 30
timeoutSeconds: 1
镜像拉取策略(imagePullPolicy)
每次启动时检查和更新(从registery)images的策略
Always:每次都检查
Nerver:每次都不检查(不管本地是否存在)
IfNotPresent:如果本地存在则不检查,如果没有就拉取
使用示例:
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
hostPort: 80
imagePullPolicy: Always
未完待续