一.kubectl的三种资源管理方式:
二. kubectl资源介绍:
1.namespace:实现多套环境的资源隔离或者多租户的资源隔离。k8s中的pod默认可以相互访问,如果不想让两个pod之间相互访问,就将其划分到不同ns下。
2.pod:k8s集群管理的最小单元,程序运行在容器中,容器则存在于pod中,一个pod可以存在一个或者多个容器。
3.label:以key/value键值对的形式添加到各种对象上,一个资源对象可以定义任意数量的label,一个label也可以被添加到任意数量的资源对象上。通过label实现资源的多维度分组,可以方便灵活的进行资源分配,调度,配置,部署等管理工作。
4.service:service是一组同类pod对外的访问接口,通过service方便的实现服务发现和负载均衡。
三. pod
pod的五种状态:
a. 挂起(Pending):pod已经被kubernetes系统接收,apiserver已经完成了pod资源对象的创建,但还有一个或多个容器未被创建(但pod尚未被调度完成或者还在下载镜像等),可用kubectl describe查看原因。
b. 运行中(Running):pod已经被调度至某个节点,并且所有容器都已经被
kubelet
创建完成,至少有一个容器处于运行状态(或是启动,重启),可用kubectl logs查看日志 。
c. 成功(Succeeded):pod中的所有容器都已经成功终止并且不会被重启,可用kubectl logs查看日志 。
d. 失败(Failed):所有容器都已经终止,但至少有一个容器终止失败,即容器终止时出现了异常,可用kubectl describe和kubectl logs查看日志 。
e. 状态 未知(Unknown):apiserver无法正常获取到
pod
对象的状态信息,通常由网络通信失败所导致。
其他情况:
a. 镜像获取不到(ImagePullBackOff、ErrorImagePull):镜像拉取失败,一般是由于镜像不存在,网络不通或者需要登录认证引起,可用kubectl describe查看原因。
b. 容器启动失败(CrashLoopBackOff):容器启动失败,一般是启动命令不正确,健康检查不通过等,可用kubectl logs查看日志 。
c. 容器内存溢出(OMMKilled):容器内存溢出,一般是容器的内存limit设置得过小或者程序本身存在内存溢出,可用kubectl logs查看日志 。
d. 容器终止(Terminating):pod正在被删除,可用kubectl describe查看原因。
e.SysctlForbidden:pod定义了内核配置,但是kubelet没有添加内核配置或者配置的内核参数不支持,可用kubectl describe查看原因。
f.Completed:容器内部主进程退出,一般计划任务执行结束会显示该状态,可用kubectl logs查看日志 。
g.ContainerCreating:pod正在创建,一般为正在下载镜像,或者有配置不当的地方,可用kubectl describe查看原因。
pod内容器镜像拉取的三种方式:
a. Always:总是从远程仓库拉取镜像
b. IfNotPresent:优先从本地获取镜像,本地没有则从远程仓库拉取镜像
c. Never:只使用本地镜像,本地没有就报错
pod的探针:
a. liveness probes:存活性探针,用于检测应用实例当前是否处于正常运行状态,如果不正常,则重启容器。
b. readiness probes:就绪性探针,用于检测应用实例是否可以接收请求,如果不能,k8s不会将业务流程发送到此实例。
探针支持三种探测方式,分别是exec命令,TCPSocket,HTTPSocket。Exec命令指在容器内执行一次命令,如果命令执行的退出码为0,则认为程序正常,否则不正常; TCPSocket会尝试访问一个用户容器的端口,如果能够建立这条连接,则认为程序正常,否则 不正常;HTTPGet会调用容器内Web应用的URL,如果返回的状态码在200和399之间,则认为程序正常,否 则不正常。
pod的重启策略:
a. Always:容器失效时,自动重启容器,容器重启的默认策略。
b. OnFailure: 容器终止运行且退出码不为0时重启。
c. Never:不论状态如何,都不重启容器
pod的调度方式:
a. 自动调度:运行在哪个节点上完全由Scheduler经过一系列的算法计算得出
b. 定向调度:NodeName、
NodeSelector
c. 亲和性调度:NodeAw inity、
PodAw inity
、
PodAntiAw inity
d. 污点(容忍)调度:Taints、
Toleration