k8spod

pod基本概念 (几种容器)

pod 是k8s最小的创建和运行单元

一个pod包含几个容器,1个根容器/父容器/基础容器,一个或者多个应用容器/业务容器,pause容器

pod里面容器共享 network UTS IPC命令空间

k8s 创建的Pod 分为两种:

自主式/静态pod:不被控制器管理的pod,没有自愈能力,一旦pod挂掉,不会被重新拉起。而且副本数量也不会因为达不到期望值而创建新的pod。

控制器管理的pod:被控制器管理的pod,有自愈能力,一旦pod挂掉,会被重新拉起。而且副本数量会因为达不到期望值而创建新的pod。

三种容器

pause容器 两大功能

给pod中的所有应用容器提供网络 (共享IP)和存储(共享存储)资源共享,作为PID-1的进程 (intit进程),管理整个pod中容器组生命周期。

初始化容器 (init容器)

阻塞或者延迟应用容器的启动,可以为应用容器事先提供好运行环境和工具,多个init容器时串行启动的,每个init容器都必须在下一个init容器启动前完成启动和退出。

应用容器 (main 容器)

在所有init容器成功启动和退出后应用容器才会启动 并行启动的,提供应用程序的业务。

pod 存在的意义

在一组容器作为一个单元的情况下,难以对整体的容器简单地进行判断及有效地进行行动。比如,一个容器死亡了 那么引入与业务无关的Pause容器作为Pod的基础容器,以它的状态代表着整个容器组的状态,这样就可以解决该问题。

Pod里的多个应用容器共享Pause容器的IP,共享Pause容器挂载的Volume,这样简化了应用容器之间的通信问题,也解决了容器之间的文件共享问题。

镜像拉取的策略

pod镜像拉取策略(imagePullPolicy)三种

1、IfNotPresent: 优先使用本地已存在的仓库,如本地没有,则从仓库镜像拉取。

2、Always:总是从仓库拉取镜像,无论本地是否已存在镜像。

3、Never:总是不从仓库拉取镜像,仅使用本地镜像。

pod 容器重启策略(restartPolicy) 三种 container在同一层

1、Always:容器退出总是重启容器,不管返回状态码如何,默认的Pod容器重启策略。

2、Never:容器退出时从不重启容器,不管返回状态码如何

3、OnFailure:仅在容器异常退出时(状态码非0时),会重启容器。

命令

应用容器

创建yaml文件

k8spod_第1张图片

 执行后查看pod状态

kubectl describe pod myapp-pod -n qq

kubectl logs myapp-pod -c init-myservice -n qq

k8spod_第2张图片

显示缺失文件

添加service文件
apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376

apiVersion: v1
kind: Service
metadata:
  name: mydb
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9377
(加命名空间)

k8spod_第3张图片

k8spod_第4张图片

查看pod状态

k8spod_第5张图片

 镜像拉取

创建yaml文件

k8spod_第6张图片

 查看pod状态k8spod_第7张图片

发现 Pod 中的容器在生命周期结束后,由于 Pod 的重启策略为 Always,容器再次重启了,并且又重新开始拉取镜像。

k8spod_第8张图片

 修改yaml 文件

k8spod_第9张图片

 查看pod状态k8spod_第10张图片

k8spod_第11张图片

资源限制(cpu 内存)

spec.containers[].resources.requests.cpu //定义创建容器时预分配的CPU资源

spec.containers[].resources.requests ,memory //定义创建容器时预分配的CPU资源

spec.containers[].resources.limits.cpu //定义创建容器时预分配的内存资源

spec.containers[].resources.limits .memory //定义 cpu 的资源上限//定义内存的资源上限

k8spod_第12张图片

k8spod_第13张图片

kubectl describe nodes node01     查看资源占用

k8spod_第14张图片

探针 (健康检查),存活,就绪,启动

存活探针:判断容器是否运行正常,如果探测失败则杀掉容器 (不是pod),容器会根据容器策略决定时否重启。

就绪探针:判断pod是能够进入ready状态,做好就收请求的准备,如果探测失败就会进入notready状态并且service资源的endpoints中剔除,service将不会把访问请求转发给这个pod。

启动探针:判断容器是否会成功,在探测成功转变为success之前,其他探针都会处于失效状态。

三种探测方式

exec:通过command设置执行在容器内执行的linux 命令来探测,如果返回码为0,则为探测成功。

httpget:通过http get 请求范文指定的容器端口和url路径,如果返回状态为>=200且< 400,则认为探测成功。

tcpsocket:通过指定的端口发送TCP 连接,如果端口无误 且三次握手成功 (tcp连接成功),则认为探测成功

你可能感兴趣的:(kubernetes,容器,云原生)