k8s学习笔记——基础篇——基本概念
![/k8s-%D0%B1%D0%BA-%D1%8E/featured-image.png /k8s-%D0%B1%D0%BA-%D1%8E/featured-image.png](/k8s-%D0%B1%D0%BA-%D1%8E/featured-image.png)
简介:k8s常用组件的介绍。
Kubernetes基础
Kubernetes是谷歌以Borg为前身,基于谷歌15年生产环境经验的基础上开源的一个项目,Kubernetes致力于提供跨主机集群的自动部署、扩展、高可用以及运行应用程序容器的平台。
Master节点
整个集群的控制中枢。
-
Kube-APIServer
:集群的控制中枢,各个模块之间信息交互都需要经过Kube-APIServer,同时它也是集群管理、资源配置、整个集群安全机制的入口。 -
Controller-Manager
:集群的状态管理器,保证Pod或其他资源达到期望值,也是需要和APIServer进行通信,在需要的时候创建、更新或删除它所管理的资源。 -
Scheduler
:集群的调度中心,它会根据指定的一系列条件,选择一个或一批最佳的节点,然后部署我们的Pod。 -
Etcd
:键值数据库,保存一些集群的信息,一般生产环境中建议部署三个以上节点(奇数个)。
Node节点
工作节点。又称Worker、node节点、minion节点
-
Kubelet
:负责监听节点上Pod的状态,同时负责上报节点和节点上面Pod的状态,负责与Master节点通信,并管理节点上面的Pod。 -
Kube-proxy
:负责Pod之间的通信和负载均衡,将指定的流量分发到后端正确的机器上。-
查看Kube-proxy工作模式:curl 127.0.0.1:10249/proxyMode
-
Ipvs:监听Master节点增加和删除service以及endpoint的消息,调用Netlink接口创建相应的IPVS规则。通过IPVS规则,将流量转发至相应的Pod上。
-
Iptables:监听Master节点增加和删除service以及endpoint的消息,对于每一个Service,他都会创建一个iptables规则,将service的clusterIP代理到后端对应的Pod。
-
-
-
其他组件
-
Calico
:符合CNI标准的网络插件,给每个Pod生成一个唯一的IP地址,并且把每个节点当做一个路由器。Cilium -
CoreDNS
:用于Kubernetes集群内部Service的解析,可以让Pod把Service名称解析成IP地址,然后通过Service的IP地址进行连接到对应的应用上。 -
Docker
:容器引擎,负责对容器的管理。
-
Pod
Pod是Kubernetes中最小的单元,它由一组、一个或多个容器组成。每个Pod还包含了一个Pause容器。
Pause容器
是Pod的父容器,主要负责僵尸进程的回收管理,通过Pause容器可以使同一个Pod里面的多个容器共享存储、网络、PID、IPC等。
![image-20220815204649925](img/image-20220815204649925.png)
定义一个Pod
|
|
添加以下内容:
|
|
常用命令
|
|
Pod探针
-
StartupProbe
:k8s1.16版本后新加的探测方式,用于判断容器内应用程序是否已经启动。如果配置了startupProbe,就会先禁止其他的探测,直到它成功为止,成功后将不在进行探测。-
用于程序启动特别慢的情况下。
-
只启动一次,就不再检查了。
-
-
LivenessProbe
:用于探测容器是否运行,如果探测失败,kubelet会根据配置的重启策略进行相应的处理。若没有配置该探针,默认就是success。 -
ReadinessProbe
:一般用于探测容器内的程序是否健康,它的返回值如果为success,那么久代表这个容器已经完成启动,并且程序已经是可以接受流量的状态。
Pod探针的检测方式
-
ExecAction:在容器内执行一个命令,如果返回值为0,则认为容器健康。
-
TCPSocketAction:通过TCP连接检查容器内的端口是否是通的,如果是通的就认为容器健康。
-
HTTPGetAction:通过应用程序暴露的API地址来检查程序是否是正常的,如果状态码为200~400之间,则认为容器健康。(用的最多)
探针检查参数配置
|
|
问题:计算pod的重启时间:
答:
每次检查的间隔是10秒,最长超时时间是5秒,也就是单次检查应该是10 + 5 = 15秒。
所以最长的重启时间为(10 + 5)* 5 。
此时又分为了两种情况:
首次启动时:最长重启时间需要加上initialDelaySeconds,因为需要等待initialDelaySeconds秒后才会执行健康检查。最长重启时间:(periodSeconds + timeoutSeconds) × failureThreshold + initialDelaySeconds 。
程序启动完成后:此时不需要计入initialDelaySeconds,最长重启时间:(periodSeconds + timeoutSeconds) × failureThreshold 。
注意:
- 若
initialDelaySeconds
时长小于程序启动时间,会导致程序未启动就被重启,导致死循环。 - 若
LivenessProbe
检查通过,而ReadinessProbe
一直未通过,则会导致pod一直无法工作,却又不能杀死。
pod退出
Prestop
:进行pod结束前的收尾工作。比如在JavaCloud项目中:先去请求eureka接口,把自己的IP地址和端口号,进行下线,eureka从注册表中删除该应用的IP地址。然后容器执行:
|
|
![image-20220815205037507](img/image-20220815205037507.png)
注:如果超过了k8s预留的时间,即使sleep没有结束,pod也会被杀掉。
|
|