2026/5/18 21:50:02
网站建设
项目流程
做慕墙上什么网站好找事做,纳税服务平台,高端手机网站建设,百度指数十年一、核心概念理解
1. 什么是Kubernetes#xff1f;它解决了什么问题#xff1f;
答案#xff1a;
Kubernetes#xff08;K8S#xff09;是一个开源的容器编排平台#xff0c;用于自动化部署、扩展和管理容器化应用程序。
解决的核心问题#xff1a;
服务发现与负载…一、核心概念理解1. 什么是Kubernetes它解决了什么问题答案KubernetesK8S是一个开源的容器编排平台用于自动化部署、扩展和管理容器化应用程序。解决的核心问题服务发现与负载均衡自动分配IP地址和DNS名称实现流量负载均衡自动化部署与回滚声明式配置支持滚动更新和快速回滚自动装箱根据资源需求和约束自动调度容器到最优节点自我修复自动重启失败容器替换不健康节点上的容器配置管理集中管理敏感信息和配置数据水平扩展通过简单命令或UI实现应用的自动扩缩容深入理解在微服务架构下传统的部署方式面临诸多挑战服务实例众多、部署复杂、资源利用率低、故障恢复困难。K8S通过容器编排技术将基础设施抽象化让开发者专注于业务逻辑而非底层运维。2. 请详细解释K8S的架构组件答案Kubernetes采用Master-Worker架构分为控制平面和数据平面。控制平面组件Master NodeAPI Server (kube-apiserver)集群的统一入口所有操作都通过RESTful API进行负责认证、授权、准入控制是唯一直接操作etcd的组件支持水平扩展以提高可用性etcd分布式键值存储保存集群所有数据使用Raft协议保证数据一致性是集群状态的唯一数据源Single Source of Truth建议部署奇数个节点3/5/7保证高可用Controller Manager (kube-controller-manager)运行控制器进程的守护进程包含多个控制器Node Controller、Replication Controller、Endpoints Controller、Service Account Controller等通过控制循环监控集群状态确保实际状态与期望状态一致Scheduler (kube-scheduler)负责Pod调度决策根据资源需求、亲和性规则、污点容忍等因素选择最优节点调度过程分为预选Predicates和优选Priorities两个阶段数据平面组件Worker NodeKubelet运行在每个节点上的主要代理负责维护Pod生命周期确保容器运行在Pod中向API Server报告节点和Pod状态执行容器健康检查Kube-proxy维护节点上的网络规则实现Service的虚拟IP功能支持三种代理模式userspace、iptables、IPVSContainer Runtime负责运行容器的软件支持CRIContainer Runtime Interface标准常见实现containerd、CRI-O、Docker通过dockershim已废弃3. Pod是什么为什么需要Pod而不是直接使用容器答案Pod是Kubernetes中最小的可部署单元是一个或多个容器的集合。设计理念共享网络命名空间Pod内所有容器共享同一个网络栈通过localhost相互通信简化容器间通信共享相同的IP地址和端口空间共享存储卷Pod可以定义一组共享的Volume容器可以挂载这些Volume实现数据共享适合需要紧密协作的容器组合生命周期管理单元Pod作为调度、部署、扩缩容的原子单位简化了管理复杂度保证了容器组的一致性典型使用场景# Sidecar模式示例apiVersion:v1kind:Podmetadata:name:web-appspec:containers:-name:web-serverimage:nginx:1.21ports:-containerPort:80-name:log-collectorimage:fluent/fluent-bit:1.8volumeMounts:-name:logsmountPath:/var/log/nginxvolumes:-name:logsemptyDir:{}为什么不直接使用容器容器是进程级别的隔离Pod提供了更高层次的抽象多容器协作场景下Pod确保它们始终调度到同一节点Pod提供了统一的生命周期管理和资源配额符合云原生的最佳实践支持微服务架构4. Namespace的作用是什么答案Namespace是Kubernetes用于实现多租户资源隔离的机制。核心功能逻辑隔离将集群资源划分为多个逻辑组不同团队或项目使用独立的命名空间避免资源命名冲突资源配额管理通过ResourceQuota限制命名空间的资源使用防止某个团队占用过多集群资源实现资源的公平分配访问控制结合RBAC实现细粒度权限控制用户只能访问授权的命名空间提高集群安全性默认命名空间default默认命名空间未指定时使用kube-systemK8S系统组件使用kube-public所有用户可读通常用于集群信息kube-node-lease节点心跳信息提高性能实践示例# 创建命名空间并设置资源配额apiVersion:v1kind:Namespacemetadata:name:dev-team---apiVersion:v1kind:ResourceQuotametadata:name:dev-quotanamespace:dev-teamspec:hard:requests.cpu:10requests.memory:20Gipods:50最佳实践按环境划分dev、staging、production按团队划分team-a、team-b、team-c按应用划分app1、app2、app3避免过度细分增加管理复杂度5. Label和Selector的作用机制是什么答案Label是附加到Kubernetes对象上的键值对Selector用于筛选具有特定Label的对象。Label设计原则灵活性键值对形式支持多维度标记可以随时添加、修改、删除不影响对象的核心功能标识信息环境标识envproduction、envdev版本标识versionv1.2.3层级标识tierfrontend、tierbackend团队标识teamplatform、teambusinessSelector类型基于等值的Selectorselector:env:productiontier:frontend基于集合的Selectorselector:matchLabels:app:nginxmatchExpressions:-key:envoperator:Invalues:-production-staging-key:tieroperator:NotInvalues:-cache实际应用场景# Service通过Selector选择PodapiVersion:v1kind:Servicemetadata:name:web-servicespec:selector:app:webtier:frontendports:-protocol:TCPport:80targetPort:8080---# Deployment管理具有特定Label的PodapiVersion:apps/v1kind:Deploymentmetadata:name:web-deploymentspec:replicas:3selector:matchLabels:app:webtier:frontendtemplate:metadata:labels:app:webtier:frontendversion:v2.0spec:containers:-name:nginximage:nginx:1.21最佳实践使用有意义的标签键名遵循命名规范关键标签应该稳定避免频繁变更组合使用多个标签实现精确筛选预留扩展标签支持未来需求变化二、对象与资源管理6. Deployment、ReplicaSet、Pod之间的关系是什么答案三者形成层级管理关系Deployment管理ReplicaSetReplicaSet管理Pod。关系图解Deployment ├── ReplicaSet (version 1) │ ├── Pod 1 │ ├── Pod 2 │ └── Pod 3 └── ReplicaSet (version 2) - 滚动更新时创建 ├── Pod 4 ├── Pod 5 └── Pod 6各自职责Pod最小部署单元封装容器、存储、网络配置短暂的可替换的ReplicaSet确保指定数量的Pod副本运行通过Label Selector识别管理的Pod自动替换失败的Pod支持Pod模板定义Deployment声明式更新ReplicaSet和Pod支持滚动更新和回滚管理多个ReplicaSet版本提供发布策略控制滚动更新过程apiVersion:apps/v1kind:Deploymentmetadata:name:nginx-deploymentspec:replicas:3strategy:type:RollingUpdaterollingUpdate:maxSurge:1# 超出期望Pod数的最大值maxUnavailable:1# 不可用Pod的最大数量selector:matchLabels:app:nginxtemplate:metadata:labels:app:nginxspec:containers:-name:nginximage:nginx:1.21ports:-containerPort:80版本管理示例# 查看滚动更新状态kubectl rollout status deployment/nginx-deployment# 查看历史版本kubectl rollouthistorydeployment/nginx-deployment# 回滚到上一版本kubectl rollout undo deployment/nginx-deployment# 回滚到指定版本kubectl rollout undo deployment/nginx-deployment --to-revision2使用建议生产环境优先使用Deployment不直接创建ReplicaSetDeployment提供了完整的版本控制和发布管理ReplicaSet主要由Deployment自动管理直接操作Pod仅用于调试和临时任务7. StatefulSet和Deployment的区别是什么答案StatefulSet用于管理有状态应用Deployment用于管理无状态应用。核心差异对比特性StatefulSetDeploymentPod命名有序且稳定pod-0, pod-1随机生成网络标识稳定的网络ID动态分配存储稳定的持久化存储通常使用临时存储启动顺序有序创建和删除并行创建和删除更新策略支持分区更新支持滚动更新使用场景数据库、消息队列Web应用、API服务StatefulSet关键特性稳定的网络标识符# 每个Pod获得稳定的DNS名称pod-name.service-name.namespace.svc.cluster.local# 示例mysql-0.mysql-service.default.svc.cluster.local有序部署和扩缩容Pod按顺序创建0, 1, 2, …必须等待前一个Pod Ready才创建下一个删除时逆序进行…, 2, 1, 0持久化存储绑定apiVersion:apps/v1kind:StatefulSetmetadata:name:mysqlspec:serviceName:mysql-servicereplicas:3selector:matchLabels:app:mysqltemplate:metadata:labels:app:mysqlspec:containers:-name:mysqlimage:mysql:8.0ports:-containerPort:3306volumeMounts:-name:datamountPath:/var/lib/mysqlvolumeClaimTemplates:# 每个Pod独立的PVC-metadata:name:dataspec:accessModes:[ReadWriteOnce]resources:requests:storage:10Gi典型应用场景StatefulSet适用于数据库MySQL、PostgreSQL、MongoDB分布式系统ZooKeeper、Kafka、Elasticsearch需要稳定网络标识的应用Deployment适用于无状态Web应用微服务API批处理任务可以随时替换的服务最佳实践为StatefulSet创建Headless Service实现稳定网络使用volumeClaimTemplates自动创建PVC设置合理的更新策略RollingUpdate或OnDelete谨慎处理StatefulSet的删除避免数据丢失8. DaemonSet的使用场景有哪些答案DaemonSet确保所有或某些节点上运行一个Pod副本主要用于集群级别的系统服务。典型使用场景日志收集apiVersion:apps/v1kind:DaemonSetmetadata:name:fluentdnamespace:kube-systemspec:selector:matchLabels:name:fluentdtemplate:metadata:labels:name:fluentdspec:tolerations:-key:node-role.kubernetes.io/mastereffect:NoSchedulecontainers:-name:fluentdimage:fluent/fluentd-kubernetes-daemonset:v1volumeMounts:-name:varlogmountPath:/var/log-name:varlibdockercontainersmountPath:/var/lib/docker/containersreadOnly:truevolumes:-name:varloghostPath:path:/var/log-name:varlibdockercontainershostPath:path:/var/lib/docker/containers监控代理Prometheus Node Exporter采集节点指标Datadog Agent性能监控每个节点运行监控Agent收集本地数据网络插件Calico、Flannel、Weave Net为每个节点配置网络策略实现跨节点Pod通信存储插件Ceph、GlusterFS客户端在每个节点上挂载分布式存储为Pod提供持久化存储能力节点选择与调度apiVersion:apps/v1kind:DaemonSetmetadata:name:monitoring-agentspec:selector:matchLabels:app:monitoringtemplate:metadata:labels:app:monitoringspec:nodeSelector:monitoring:true# 仅在标记的节点运行containers:-name:agentimage:monitoring-agent:latestresources:limits:memory:200Mirequests:cpu:100mmemory:100Mi更新策略spec:updateStrategy:type:RollingUpdaterollingUpdate:maxUnavailable:1# 逐个更新节点上的Pod关键特性自动在新节点上部署Pod节点删除时自动清理Pod可通过nodeSelector或nodeAffinity控制部署范围支持滚动更新策略三、总结本文档涵盖了Kubernetes基础概念的核心面试问题包括K8S的本质、架构和组件Pod、Namespace、Label等基础对象Deployment、StatefulSet、DaemonSet等控制器掌握这些基础概念是深入学习K8S的前提建议结合实际操作加深理解。