author:魏静崎
2025年4月25日
K8s了解学习
基础概念
特性:容器编排、高可用、可扩展性
核心组件
Node:一个物理节点。
pod:最小的调度单元或者多个容器(一般建议一个pod只有一个容器)的组合。有自己的内部IP地址,不是一个稳定的实体(创建销毁会改变IP)。
Sidecar:辅助容器,因为耦合度高可以和其他容器放在一个pod中。
Service:一组pod可以封装为一个Service,其中的pod可以通过一个统一的入口来访问。可以通过节点的IP和端口访问Service(测试阶段),生产环境通常通过域名来访问。
内部服务:不想暴露给外界的服务,如数据库、缓存等。
外部服务:需要暴漏给外部的,如API接口。
Ingress:可以用于配置不同的转发规则来访问集群内部不同的Service(包括配置域名代替IP和端口号)
ConfigMap:封装配置信息,可以保持容器化应用程序的可移植性(即便数据库配置发生变化,不需要重新编辑程序,只需要重新加载pod就可以),以此实现数据库和应用的解耦合。
Secret:封装不适合存在于ConfigMap中的敏感信息,在程序中读取使用,是使用base64进行编码,因此也不是完全安全。
Volumes:将需要持久化存储的资源挂在到本地磁盘上,或者外部。
Deployment:定义和管理应用程序的副本数量以及更新策略,以达到高可用的性质。但是因为数据问题,因此数据库和缓存一般不采用。
StatefulSet:用于定义和管理应用程序的副本数量以及更新策略,并且每个副本都有各自稳定的网络标识符和持久化存储,因此有状态的应用会使用。
结构:Master-Worker
Worker:每一个都包含三个组件
kubelet:管理和维护pod。
kube-proxy:为pod对象提供网络代理和负载均衡服务(负责node到node,而ingress负责pod到pod)。
container-runtime:负责创建、启动或者停止容器。
Master:包含四个组件
api-server:负责提供集群的接口服务,并分发请求,进行访问控制 。
Scheduler:负责监控集群节点的资源使用情况,进行pod调度。
etcd:高可用的键-值存储系统,存储集群中所有资源对象的状态信息
controller-manager:负责管理集群中各种资源对象的状态,然后根据状态来做出相应的响应。
kubectl常用命令
kubectl get + 资源对象名(nodes、services、replicaset等):可以查看状态。
kubectl run nginx –image=nginx:创建一个nginx的pod,使用Nginx的镜像
kubectl create + 资源对象:也可以创建资源对象,但是不包含pod,一般是Service、deployment等,这些资源对象会自动创建pod
kubectl edit deployment + 资源:用于编辑配置文件
kubectl logs + pod名称:查看pod的日志
kubectl exec + 参数:进入容器
kubectl delete + 资源对象:删除资源对象
配置文件
kubectl expose + 资源对象:可以用于 公开一个服务
面试题
什么是k8s?说出你的理解
K8s是kubernetes的简称,k8s就是一个编排容器的系统,一个可以管理容器应用全生命周期的工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且还可以做到故障自愈,所以,k8s是一个非常强大的容器编排系统。
kube-api-server的端口是多少?各个pod是如何访问kube-api-server的?
kube-api-server的端口是8080和6443,前者是http的端口,后者是https的端口,(注意:有些8080是k8s低版本的才有的端口,高版本中不开放此端口了)
其他pod访问kube-api-server的整个流程就是:pod创建后嵌入了环境变量,pod获取到了kubernetes这个服务的ip和443端口,请求到kubernetes这个服务其实就是转发到了master节点上的6443端口的kube-api-server这个pod里面。
k8s中命名空间的作用是什么?
namespace是kubernetes系统中的一种非常重要的资源,namespace的主要作用是用来实现多套环境的资源隔离,或者说是多租户的资源隔离。
k8s通过将集群内部的资源分配到不同的namespace中,可以形成逻辑上的隔离,以方便不同的资源进行隔离使用和管理。不同的命名空间可以存在同名的资源,命名空间为资源提供了一个作用域。
pod是什么?
在kubernetes的世界中,k8s并不直接处理容器,而是使用多个容器共存的理念,这组容器就叫做pod。pod是k8s中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,其他的资源对象都是用来支撑pod对象功能的。
pod的重启策略有哪些?(经常问)
pod的重启策略(RestartPolicy)决定了当容器异常退出或健康检查失败时,kubelet将如何响应。(注意是kubelet重启容器,因为是kubelet负责容器的健康检测)
Always: 当容器终止退出后,总是重启容器,默认策略就是Always。
OnFailure: 当容器异常退出,退出状态码非0时,才重启容器。
Never: 当容器终止退出,不管退出状态码是什么,从不重启容器。
service是如何与pod关联的?
答案:通过标签选择器。每一个由deployment创建的pod都带有标签,这样,service就可以定义标签选择器来关联哪些pod是作为其后端了,就是这样,service就与pod关联在一起了。
deployment怎么扩容或缩容?
直接修改pod副本数即可
主节点从节点如何通信
Master通过apiserver和pod上kubelet的进行通信
Mastered是如何将Pod调度到指定的Node上的
该工作通过scheduler来完成,通过算法为每个Pod计算出最佳的Node目标,该过程由scheduler进程自动完成。
各节点、Pod的信息都是统一维护在哪里的,由谁来维护
维护在etcd中
外部用户如何访问集群内运行的Pod
Pod如何动态扩容和缩放
各个组件之间是如何相互协作的
kube-controller-manager
- 本文作者: 魏静崎
- 本文链接: https://slightwjq.github.io/2025/04/25/K8S面试题/
- 版权声明: 该文章来源及最终解释权归作者所有