⾯试题—Kubernetes(⼆)
1.K8S三种⽅式
K8S三种⽅式
专有版 Kubernetes
托管版 Kubernetes
Serverless Kubernetes
2.Master选择
1-5个节点 4核8G(不建议2核4G)
6-20个节点 4核16G
21-100个节点 8核32G
100-200个节点 16核64G
3.Service 有四种类型
Service 有四种类型:
ClusterIP
NodePort
LoadBalancer
公⽹IP
4.POD健康检查
容器存活检查
容器就绪检查
#⽅式
TCP 端⼝探测
HTTP 请求探测
执⾏命令检查
5.镜像拉取策略
⽀持三种 ImagePullPolicy
Always:不管镜像是否存在都会进⾏⼀次拉取
Never:不管镜像是否存在都不会进⾏拉取
IfNotPrent:只有镜像不存在时,才会进⾏镜像拉取
6.节点维护
1.封锁节点
封锁(cordon)节点后,将不接受新的 Pod 调度到该节点,您需要⼿动取消封锁的节点。封锁节点有以下两种⽅法:
2.取消封锁节点
取消封锁(uncordon)节点后,将允许新的 Pod 调度到该节点。
3.驱逐节点
在节点上执⾏维护之前,您可以通过驱逐(drain)节点安全地从节点中逐出 Pod。节点驱逐后,⾃动将节点内的所有 Pod(不包含 DaemonSet 管理的 Pod)驱逐到集群内其他节点上,并将驱逐的节点设置为封锁状态
禁⽌pod调度到该节点上
kubectl cordon <node>
驱逐该节点上的所有pod
kubectl drain <node>
7.核⼼组件
etcd
apirver
controller manager
scheduler
kubelet
Container runtime;
kube-proxy
8.PV和PVC
PV和PVC
PersistentVolume(PV):集群内的存储资源,例如节点是集群的资源。PV 独⽴于 Pod 的⽣命周期,根据不同的 StorageClass 类型创建不同类型的 PV。PersistentVolumeClaim(PVC):集群内的存储请求。例如,PV 是 Pod 使⽤节点资源,PVC 则声明使⽤ PV 资源。当 PV 资源不⾜时,PVC 也可以动态创建PV
9.QoS(服务质量等级)
Guaranteed:Pod ⾥的每个容器都必须有内存/CPU 限制和请求,⽽且值必须相等。
Burstable:Pod ⾥⾄少有⼀个容器有内存或者 CPU 请求且不满⾜ Guarantee 等级的要求,即内存/CPU 的值设置的不同。
BestEffort:容器必须没有任何内存或者 CPU 的限制或请求。
10.K8S架构图
核⼼层:Kubernetes 最核⼼的功能,对外提供 API 构建⾼层的应⽤,对内提供插件式应⽤执⾏环境
应⽤层:部署(⽆状态应⽤、有状态应⽤、批处理任务、集群应⽤等)和路由(服务发现、DNS 解析等)
管理层:系统度量(如基础设施、容器和⽹络的度量),⾃动化(如⾃动扩展、动态 Provision 等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy 等)接⼝层:kubectl 命令⾏⼯具、客户端 SDK 以及集群联邦
⽣态系统:在接⼝层之上的庞⼤容器集群管理调度的⽣态系统,可以划分为两个范畴
Kubernetes 外部:⽇志、监控、配置管理、CI、CD、Workflow等
Kubernetes 内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群⾃⾝的配置和管理等
11.创建⼀个pod过程
⽤户通过 REST API 创建⼀个 Pod
apirver 将其写⼊ etcd
scheduluer 检测到未绑定 Node 的 Pod,开始调度并更新 Pod 的 Node 绑定
kubelet 检测到有新的 Pod 调度过来,通过 container runtime 运⾏该 Pod
kubelet 通过 container runtime 取到 Pod 状态,并更新到 apirver 中
12.什么是Ingress⽹络,它是如何⼯作的
Ingress 是允许访问到集群内 Service 的规则的集合,您可以通过配置转发规则,实现不同 URL 可以访问到集群内不同的 Service
A.Ingress controller 有很多,⽐如 traefik、nginx-controller
B.ingress 对象
13.排错汇总
a.kubectl:⽤于查看 Kubernetes 集群以及容器的状态,如 kubectl describe pod
b.journalctl:⽤于查看 Kubernetes 组件⽇志,如 journalctl -u kubelet -l
e.Weave Scope 是另外⼀款可视化容器监控和排错⼯具
Probe 负责收集容器和宿主的信息,并发送给 App
App 负责处理这些信息,并⽣成相应的报告,并以交互界⾯的形式展⽰
参考:/p/a43f63af3df5
kubectl apply -f "cloud.weave.works/k8s/scope.yaml?k8s-version=$(kubectl version | ba64 | tr -d '\n')&k8s-rvice-type=NodePort" kubectl get pod -n weave
kubectl get svc -n weave
kubectl get deploy -n weave
f.Kubernetes诊断信息⼯具
参考:/document_detail/86761.html
在 master/worker节点下载诊断脚本,并增加运⾏权限。
curl -o /usr/local/bin/diagno_k8s.sh aliacs-k8s-cn-hangzhou./public/diagno/diagno_k8s.sh chmod u+x /usr/local/bin/diagno_k8s.sh
diagno_k8s.sh
14.指定 Node 节点调度
指定 Node 节点调度
有三种⽅式指定 Pod 只运⾏在指定的 Node 节点上
nodeSelector:只调度到匹配指定 label 的 Node 上
nodeAffinity:功能更丰富的 Node 选择器,⽐如⽀持集合操作
podAffinity:调度到满⾜条件的 Pod 所在的 Node 上
15.常见端⼝
管理好以下端⼝。
端⼝进程描述
4149/TCP kubelet ⽤于查询容器监控指标的cAdvisor端⼝
10250/TCP kubelet 访问节点的API端⼝
10255/TCP kubelet 未认证的只读端⼝,允许访问节点状态
10256/TCP kube-proxy kube-proxy的健康检查服务端⼝
9099/TCP calico-felix calico的健康检查服务端⼝(如果使⽤calico/canal)
6443/TCP kube-apirver Kubernetes API端⼝
16.Kubernetes中的⽹络插件与⽅案
flannel
calico
contiv
weave net
kube-router
cilium
canal
17.授权管理
RAM IAM CAM /RBAC⾓⾊权限管理员/运维/开发/受限⽤户
18.K8S集群联邦
在联邦集群的帮助下,可以将多个Kubernetes集群作为单个集群进⾏管理。因此,您可以在数据中⼼/云中创建多个Kubernetes集群,并使⽤联邦来在⼀个位置控制/管理它们
19.K8S的对象管理
对象分类
Kubernetes 常⽤对象主要分为以下类型:
⼯作负载
Deployment:⽤于管理指定调度规则的 Pod。
StatefulSet:管理应⽤程序的⼯作负载 API 对象,且该应⽤程序为有状态的应⽤程序。
DaemonSet:确保所有或部分节点上运⾏ Pod,例如⽇志采集程序。
Job:⼀个 Job 创建⼀个或多个 Pod,直⾄运⾏结束。
CronJob:定时运⾏的 Job 任务。
服务
Service:提供 Pod 访问的 Kubernetes 对象,可以根据业务需求定义不同类型。
Ingress:管理集群中 Services 的外部访问的 Kubernetes 对象。
配置
ConfigMap:⽤于保存配置信息。
Secret:⽤于保存敏感信息,例如密码、令牌等。
存储
Volume:可以存储容器访问相关的数据。
Persistent Volumes(PV):Kubernetes 集群中配置的⼀块存储。
Persistent Volumes Claim(PVC):请求存储的声明。如果把 PV ⽐作 Pod,那么 PVC 相当于⼯作负载。
StorageClass:⽤于描述存储的类型。创建 PVC 时,通过 StorageClass 创建指定类型的存储,即存储的模板。
Kubernetes 对象还包括 Namespaces、HPA、Resource Quotas等数⼗种,您可以根据业务需要使⽤不同的 Kubernetes 对象
20.K8S核⼼组件
Kubernetes 主要由以下⼏个核⼼组件组成:
etcd 保存了整个集群的状态,就是⼀个数据库;
apirver 提供了资源操作的唯⼀⼊⼝,并提供认证、授权、访问控制、API 注册和发现等机制;
controller manager 负责维护集群的状态,⽐如故障检测、⾃动扩展、滚动更新等;
scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
kubelet 负责维护容器的⽣命周期,同时也负责 Volume(CSI)和⽹络(CNI)的管理;
Container runtime 负责镜像管理以及 Pod 和容器的真正运⾏(CRI);
kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡;
当然了除了上⾯的这些核⼼组件,还有⼀些推荐的插件:
kube-dns 负责为整个集群提供 DNS 服务
Ingress Controller 为服务提供外⽹⼊⼝
Heapster 提供资源监控
Dashboard 提供 GUI
21.K8S核⼼组件
负载均衡器是暴露服务的最常见和标准⽅式之⼀。根据⼯作环境使⽤两种类型的负载均衡器,即*内部负载均衡器*或*外部负载均衡器*。内部负载均衡器⾃动平衡负载并使⽤所需配置分配容器,⽽外部负载均衡器将流量从外部负载引导⾄后端容器。
22.什么是ETCD?
Etcd是⽤Go编程语⾔编写的,是⼀个分布式键值存储,⽤于协调分布式⼯作。因此,Etcd存储Kubernetes集群的配置数据,表⽰在任何给定时间点的集群状态。
23.kube-apirver和kube-scheduler的作⽤是什么?
kube -apirver遵循横向扩展架构,是主节点控制⾯板的前端。这将公开Kubernetes主节点组件的所有API,并负责在Kubernetes节点和Kubernetes主组件之间建⽴通信。
kube-scheduler负责⼯作节点上⼯作负载的分配和管理。因此,它根据资源需求选择最合适的节点来运⾏未调度的pod,并跟踪资源利⽤率。它确保不在已满的节点上调度⼯作负载
24.Kubernetes⽹络问题
25. 简要说下Kubernetes有哪些核⼼组件以及这些组件负责什么⼯作?
etcd:提供数据库服务保存了整个集群的状态
kube-apirver:提供了资源操作的唯⼀⼊⼝,并提供认证、授权、访问控制、API注册和发现等机制
kube-controller-manager:负责维护集群的状态,⽐如故障检测、⾃动扩展、滚动更新等
cloud-controller-manager:是与底层云计算服务商交互的控制器
kub-scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
kubelet:负责维护容器的⽣命周期,同时也负责Volume和⽹络的管理
kube-proxy:负责为Service提供内部的服务发现和负载均衡,并维护⽹络规则
container-runtime:是负责管理运⾏容器的软件,⽐如docker
26. 你对 Kubernetes 的负载均衡器有什么了解?
负载均衡器是暴露服务的最常见和标准⽅式之⼀。
根据⼯作环境使⽤两种类型的负载均衡器,即内部负载均衡器或外部负载均衡器。内部负载均衡器⾃动平衡负载并使⽤所需配置分配容器,⽽外部负载均衡器将流量从外部负载引导⾄后端容器。
27.经典pod的⽣命周期