Pod(容器组)是k8s创建和调度的最小单元。一个Pod封装多个容器(container)、存储资源(volume)、一个独立网络ip和管理控制容器运行方式。
Pod可以单独运行一个容器,也可以兼容多个容器运行,多个容器共享资源。
yaml示例:创建一个名为nginx的Pod,这个Pod中包含一个名为container-0的容器,使用nginx:alpine镜像,使用的资源为100m core CPU、200Mi内存。
?Pod定义好后就可以使用kubectl创建,如果上面YAML文件名称为nginx.yaml,则创建命令如下所示,-f表示使用文件方式创建。
$ kubectl create -f nginx.yaml
pod/nginx created
Pod创建完成后,使用命令查询Pod状态
?$ kubectl get pods
NAME ? ? ? ? ? READY ? STATUS ? ?RESTARTS ? AGE
nginx? ? ? ? ? ? ? 1/1? ? ? ? ? ? ?Running? ? ? ? ? ? ?0 ? ? ? ? ?40s
READY为1/1,表示这个Pod中有1个容器,其中1个容器的状态为Ready。
-o 表示输出形式
name:仅打印资源名称而不打印其他内容。
wide:以纯文本格式输出额外信息,对于 Pod 来说,输出中包含了节点名称。
示例
kubectl get pods -A -o=wide:获取所有 Pod 的详细信息,包括节点名称。
kubectl get pods -A -o=yaml:获取所有 Pod 的 YAML 格式信息。
kubectl get pods --sort-by=.metadata.name:按名称排序输出所有 Pod。
kubectl get pods -o custom-columns=NAME:.metadata.name,RESC:.metadata.resourceVersion:根据自定义列名输出 Pod 的名称和资源版本。
使用kubectl describe命令查看Pod的详情。
$ kubectl describe pod nginx?
????????删除pod时,Kubernetes终止Pod中所有容器。 Kubernetes向进程发送SIGTERM信号并等待一定的秒数(默认为30)让容器正常关闭。如果它没有在这个时间内关闭,Kubernetes会发送一个SIGKILL信号杀死该进程。?
按名删除Pod
$ kubectl delete po nginx pod1 pod 2
pod "nginx" deleted删除所有Pod。
$ kubectl delete po --all
pod "nginx" deleted根据Label删除Pod
$ kubectl delete po -l app=nginx
pod "nginx" deleted
配置spec.containers.env字段
?查询环境变量
启动容器就是启动主进程,启动前需要的前置操作可以通过,CMD或ENTRYPOINT完成,示例使用Dockerfile中设置ENTRYPOINT ["top", "-b"]
FROM ubuntu
ENTRYPOINT ["top", "-b"]
实际使用时,只需配置Pod的containers.command参数,该参数是list类型,第一个参数为执行命令,后面均为命令的参数。?
容器生命周期钩子,完成容器前后命令操作处理。
?实际使用时,只需配置Pod的lifecycle.postStart或lifecycle.preStop参数,如下所示。
? ? ? ? k8s的自愈能力只能保证Pod崩溃后重启,但是如内存泄漏,JVM进程存活,但是容器进程不可用,无法自愈,提供存活探针完成容器健康检查。分成三种探测机制:
????????
Pod过多时管理起来不方便,通过Label可以进行标记分类。
标签管理分类前:
标签管理分类后:
Label 是key-Value形式,示例如下:
--show-labels 查询时展示Label信息
-L只查询固定标签
?对已存在的Pod,直接使用kubectl label命令直接添加Label。
修改Label
使用NameSpace主要是可以把资源进行分组。组织上划分,对运行的对象来说,它不能做到真正的隔离。举例来说,如果两个Namespace下的Pod知道对方的IP,而Kubernetes依赖的底层网络没有提供Namespace之间的网络隔离的话,那这两个Pod就可以互相访问。
coredns是用于做服务发现、everest-csi是用于对接存储服务、icagent是用于对接监控系统。
kube-system这个命名空间中,能够做到与其他Pod之间隔离。
apiVersion: v1?
kind: Namespace?
metadata:?
? name: custom-namespace?使用kubectl命令创建。
$ kubectl create -f custom-namespace.yaml
namespace/custom-namespace created您还可以使用kubectl create namespace命令创建。
$ kubectl create namespace custom-namespace?
namespace/custom-namespace created在指定Namespace下创建资源。
$ kubectl create -f nginx.yaml -n custom-namespace?
pod/nginx created
?