pod
pod管理包括但不限于:
- 创建、删除、更新、查询
- 资源限制
- 调度约束
- 重启策略
- 健康检查
- 问题定位
概述
pod是k8s集群中最小的单元,一个pod可以包含一个容器,也可以包含多个容器。
创建/查询/更新/删除
创建pod对象
通过pod.yaml
来创建pod对象。
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
APP: nginx
spec:
containers:
- name: nginx
image: nginx
然后通过命令kubectl create -f pod.yaml
执行创建pod对象。
通过kubectl get pod -o wide
查看到刚创建的pod:
查询pod信息
查询pod就通过下面的命令查看:
// 查看pod信息
kubectl get pod
// 详细查看pod信息
kubectl get pod -o wide
// 查看指定namespace的pod(默认default不需要指定)
kubectl get pod -n [namespace]
// 查看pod描述
kubectl describe pod [podname]
删除pod
kubectl delete pod [podname]
还可以指定创建pod时的yaml文件进行删除指定的pod:
kubectl delete -f pod.yaml
更新pod
更新pod必须先删除pod然后创建新的。
这里在上一步删除之后,先修改pod.yaml
文件,将镜像升级到1.12:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.12
然后重复开始创建的一部执行命令:
kubectl create -f pod.yaml
更新成功了。
还有一个方法是修改yaml文件后执行命令kubectl replace -f pod.yaml --force
来用新的yaml生成的pod替换原有的pod。这里使用--force
参数是因为在替换的时候可能会失败,所以使用这个参数表示强制替换。
这个命令的原理也是先删除原有pod,再创建新的pod
资源限制
限制pod的资源是为了防止异常的情况下导致资源占用过多使得宿主机甚至服务响应慢或者不可用的情况。
在创建pod的时候指定pod资源,编辑pod_res.yaml
文件:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
其中resources字段就是限制资源的,requests是保证最小使用的情况,limits保证容器使用资源不超过这个限制。上边的配置就表示:内存最小64M最大不超过128M,CPU最小250m最大不超过500m。这种限制是交给docker进行限制的。
现在创建这个具有限制条件的pod:
kubectl create -f pod_res.yaml
然后通过kubectl describe pod nginx-pod
查看这个pod的详细信息,其中可以看到这个资源限制部分的内容:
调度约束
例如在一个集群中拥有两套环境,假设想要让pod跑在某一个节点上就需要对pod进行调度约束:
调度约束的方式有两种:
Pod.spec.nodeName 强制约束Pod调度到指定Node节点上
Pod.spec.nodeSelector 通过lable-selector机制选择节点
Pod.spec.nodeName方式
编辑pod_direct.yaml
文件:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
nodeName: 10.10.99.228
containers:
- name: nginx
image: nginx
其中nodeName就指定pod部署节点位置。
然后创建这个pod:
kubectl create -f pod_direct.yaml
查看是否部署在了指定的节点上:
Pod.spec.nodeSelector方式
这个方式是通过匹配节点的标签来将pod部署在指定的node上的,所以节点必须先打好标签:
kubectl label node 10.10.99.228 env_role=dev
查看刚打的标签:
更改pod_direct.yaml
文件:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod2
labels:
app: nginx
spec:
nodeSelector:
env_role: dev
containers:
- name: nginx
image: nginx
创建这个pod(注意这个pod名字叫nginx-pod2)
kubectl create -f pod_direct.yaml
查看分配情况:
重启策略
重启策略有三种:
Always:当容器停止,总是重建容器,默认策略。
OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
Never:当容器终止退出,从不重启容器。
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
restartPolicy: OnFailure
只需要在yaml文件中的containers这一级指定restartPolicy就可以了。
健康检查
在k8s集群中,如果容器出现异常,那么默认情况下k8s会重建这个容器。但是如果容器中的程序出现异常,k8s则还会认为这个容器是正常的,依旧将请求转发到这个容器。
Probe检查机制
提供Probe机制,有以下两种类型:
livenessProbe:如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。
readinessProbe:如果检查失败,Kubernetes会把Pod从service endpoints中剔除。
Probe检查方法
Probe支持以下三种检查方法:
httpGet:发送HTTP请求,返回200-400范围状态码为成功。
exec:执行Shell命令返回状态码是0为成功。
tcpsocket:发起TCP Socket建立成功。
实例
在创建pod的时候指定健康检查方式(pod_healthcheck.yaml):
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /index.html
port: 80
这里是采用了httpGet方式,判断服务80端口的http返回结果,首先创建容器:
kubectl create -f pod_healthcheck.yaml
pod已经建立
通过命令kubectl describe pod nginx-pod
可以看到健康检查的配置:
他就会不断请求这个web服务的页面,判断返回值。
也可以通过观察这个pod服务的日志来查看检查请求:
kubectl log nginx-pod
通过命令进入容器删除检测的页面:
kubectl exec -it nginx-pod bash
rm -f /usr/share/nginx/html/index.html
检查返回404错误状态
通过pod的事件可以看到整个过程:检测到404后删除pod并重建:
问题定位
一般是通过常用的三个指令:
// 查看pod具体信息
kubectl describe pod [podname]
// 查看pod日志
kubectl log [podname]
// 连接pod
kubectl exec -it [podname] bash
相关阅读
iPod是全球知名品牌苹果推出的一款优秀音乐播放器,不过很多小白朋友购买iPod后,不知道如何往iPod里边添加音乐,下面seo实验室小编就
每当我们听到兴趣是成功的先导、有了兴趣,就成功了一半等哲言时,总无法深刻的领会到其中的含义,因为有时候我们往往因为背负太大的社
苹果AirPods致癌? 苹果:可以放心使用,不用担心辐射问题
A5创业网(公众号:iadmin5)3月15日消息,近日有媒体报道称,来自全球40个国家的250名科学家联名向世卫组织和联合国发出请愿书,警告不要大
2019新款iPod Touch配置如何 2019款iPod Touch配置及
2019新ipodtouch怎么样?配置如何?值得入手吗?下面小编带来2019款iPod Touch配置及售价介绍,希望对大家有所帮助。2019年5月28日苹果推
小问智能耳机增强版TicPods Free Pro拆解全过程图解评
小问智能耳机增强版TicPods Free Pro是一款TWS真无线耳机,真正能做到随时在线、智能交互和跨设备联动。相比AirPods的蓝牙属性,出门