K8s
Kubernetes 基础知识
- Kubernetes 介绍:
- Kubernetes 是一个开源的容器编排平台,用于自动化容器化应用程序的部署、扩展和管理。它最初由 Google 开发,现在由 Cloud Native Computing Foundation(CNCF)维护。
- 核心概念:
- Pod:Kubernetes 中的基本部署单元,包含一个或多个容器,通常共享存储和网络。
- Node:Kubernetes 集群中的工作机器,可以是物理机或虚拟机,运行 Pod。
- Cluster:由多个 Node 组成的集合,提供容器化应用程序的运行环境。
- Service:定义一组 Pod 的访问策略,提供负载均衡和服务发现。
- Deployment:用于声明和管理 Pod 的副本,支持滚动更新和回滚。
- Namespace:用于将集群资源分组和隔离的机制,适用于多租户环境。
- Kubernetes 的优势:
- 自动化:自动化容器的部署、扩展和管理。
- 可扩展性:支持水平扩展和负载均衡。
- 自愈能力:自动重启、替换和重新调度失败的容器。
- 服务发现:通过 Service 提供负载均衡和服务发现。
常见面试题
- 什么是 Kubernetes?
- Kubernetes 是一个开源的容器编排平台,用于自动化容器化应用程序的部署、扩展和管理。
- Kubernetes 的主要组件有哪些?
- 主要组件包括 API Server、etcd、Controller Manager、Scheduler 和 Kubelet。
- 什么是 Pod?
- Pod 是 Kubernetes 中的基本部署单元,包含一个或多个容器,通常共享存储和网络。
- 什么是 Node?
- Node 是 Kubernetes 集群中的工作机器,可以是物理机或虚拟机,运行 Pod。
- 什么是 Service?
- Service 是 Kubernetes 中用于定义一组 Pod 的访问策略,提供负载均衡和服务发现。
- 什么是 Deployment?
- Deployment 是 Kubernetes 中用于声明和管理 Pod 的副本,支持滚动更新和回滚。
- 如何在 Kubernetes 中实现负载均衡?
- 通过使用 Service 对象,Kubernetes 可以自动将流量分配到多个 Pod,实现负载均衡。
- 什么是 Namespace?
- Namespace 是 Kubernetes 中用于将集群资源分组和隔离的机制,适用于多租户环境。
- 如何在 Kubernetes 中进行配置管理?
- 可以使用 ConfigMap 和 Secret 对象来管理应用程序的配置和敏感信息。
- 什么是 Helm?
- Helm 是 Kubernetes 的包管理工具,允许用户定义、安装和管理 Kubernetes 应用程序。
- 什么是 Kubelet?
- Kubelet 是运行在每个 Node 上的代理,负责管理 Pod 的生命周期和状态。
- 什么是 StatefulSet?
- StatefulSet 是 Kubernetes 中用于管理有状态应用程序的对象,提供稳定的网络身份和持久存储。
- 如何在 Kubernetes 中实现自愈能力?
- Kubernetes 通过监控 Pod 的状态,自动重启、替换和重新调度失败的容器来实现自愈能力。
- 什么是 Ingress?
- Ingress 是 Kubernetes 中用于管理外部访问服务的 API 对象,提供 HTTP 和 HTTPS 路由功能。
- 如何在 Kubernetes 中进行监控?
- 可以使用 Prometheus、Grafana 等工具监控 Kubernetes 集群和应用程序的性能。
- 什么是 DaemonSet?
- DaemonSet 是 Kubernetes 中用于确保所有(或特定)Node 上运行一个 Pod 的对象,适用于日志收集、监控等场景。
- 如何在 Kubernetes 中进行资源限制?
- 可以在 Pod 的定义中使用资源请求和限制来管理 CPU 和内存的使用。
- 什么是 Job 和 CronJob?
- Job 是 Kubernetes 中用于一次性任务的对象,CronJob 是用于定期调度任务的对象。
- 如何在 Kubernetes 中进行服务发现?
- Kubernetes 通过 DNS 和环境变量提供服务发现,允许 Pod 通过服务名称访问其他服务。
- 什么是 Kubernetes 的控制平面?
- 控制平面是 Kubernetes 集群的管理层,负责调度、监控和管理集群状态,主要组件包括 API Server、etcd、Controller Manager 和 Scheduler。
- 什么是 Kube-Proxy?
- Kube-Proxy 是 Kubernetes 中的网络代理,负责为 Service 提供负载均衡和服务发现功能,管理网络流量。
- 如何在 Kubernetes 中管理持久化存储?
- 可以使用 Persistent Volumes (PV) 和 Persistent Volume Claims (PVC) 来管理持久化存储,确保数据在 Pod 重启或迁移时保持不变。
- 什么是容器编排?
- 容器编排是管理多个容器的过程,包括部署、扩展、负载均衡和故障恢复,Kubernetes 是一种流行的容器编排工具。
- 如何在 Kubernetes 中进行滚动更新?
- 通过更新 Deployment 的 Pod 模板,Kubernetes 会逐步替换旧的 Pod 为新的 Pod,实现无缝的滚动更新。
- 什么是 Kubernetes 的调度器(Scheduler)?
- Kubernetes 调度器负责将新创建的 Pod 分配到合适的 Node 上,基于资源需求、亲和性和反亲和性等策略进行调度。
- 如何在 Kubernetes 中实现多集群管理?
- 可以使用工具如 Rancher、KubeSphere 或者通过 API Gateway 和 Service Mesh(如 Istio)来管理多个 Kubernetes 集群。
- 什么是 Kubernetes 的自定义资源(Custom Resource)?
- 自定义资源是用户定义的 API 对象,允许用户扩展 Kubernetes 的功能,通常与自定义控制器一起使用。
- 如何在 Kubernetes 中使用 Secrets 管理敏感信息?
- Secrets 是 Kubernetes 中用于存储和管理敏感信息(如密码、API 密钥)的对象,可以在 Pod 中以环境变量或挂载文件的方式使用。
- 什么是 Kubernetes 的网络策略(Network Policy)?
- 网络策略是 Kubernetes 中用于控制 Pod 之间网络流量的规则,允许用户定义哪些 Pod 可以与其他 Pod 通信。
- 如何在 Kubernetes 中进行日志管理?
- 可以使用 ELK Stack(Elasticsearch, Logstash, Kibana)、Fluentd 或其他日志收集工具来集中管理和分析 Kubernetes 集群的日志。
- 什么是 Kubernetes 的 API 资源?
- Kubernetes 的 API 资源是集群中可管理的对象,如 Pod、Service、Deployment、ConfigMap 等,用户通过 API 与这些资源进行交互。
- 如何在 Kubernetes 中实现服务的蓝绿部署?
- 通过创建两个独立的环境(蓝色和绿色),用户可以在不影响现有服务的情况下进行新版本的部署和测试。
- 什么是 Kubernetes 的 Pod 亲和性和反亲和性?
- Pod 亲和性和反亲和性是调度策略,允许用户指定 Pod 应该或不应该与哪些其他 Pod 一起调度。
- 如何在 Kubernetes 中使用 Helm Charts?
- Helm Charts 是用于打包和管理 Kubernetes 应用程序的工具,用户可以通过 Helm CLI 安装、升级和管理应用程序。
- 什么是 Kubernetes 的资源配额(Resource Quota)?
- 资源配额是 Kubernetes 中用于限制 Namespace 中资源使用的机制,确保资源的公平分配。
- 如何在 Kubernetes 中进行故障恢复?
- Kubernetes 通过自动重启、替换和重新调度失败的 Pod 来实现故障恢复,确保应用程序的高可用性。
- 什么是 Kubernetes 的 Sidecar 模式?
- Sidecar 模式是将辅助容器与主应用容器一起运行在同一个 Pod 中,提供额外的功能,如日志收集、监控等。
- 如何在 Kubernetes 中使用 Init Containers?
- Init Containers 是在主容器启动之前运行的特殊容器,通常用于执行初始化任务,如数据库迁移或配置设置。
- 什么是 Kubernetes 的 API Aggregation Layer?
- API Aggregation Layer 允许用户将多个 API 服务器聚合到一个 Kubernetes API 服务器中,扩展 Kubernetes 的功能。
- 如何在 Kubernetes 中进行性能优化?
- 通过合理配置资源请求和限制、使用水平自动扩展、优化 Pod 的启动时间和使用合适的存储类型等方式进行性能优化。
- 什么是 Kubernetes 的控制器(Controller)?
- 控制器是 Kubernetes 中的一个组件,负责管理集群状态,确保实际状态与期望状态一致。例如,Deployment Controller 负责管理 Deployment 的 Pod 副本。
- 如何在 Kubernetes 中使用 ConfigMap?
- ConfigMap 是 Kubernetes 中用于存储非敏感配置信息的对象,可以将配置数据注入到 Pod 中,作为环境变量或挂载为文件。
- 什么是 Kubernetes 的容器运行时(Container Runtime)?
- 容器运行时是负责管理容器生命周期的组件,Kubernetes 支持多种容器运行时,如 Docker、containerd 和 CRI-O。
- 如何在 Kubernetes 中实现 API 版本控制?
- Kubernetes 通过 API 组和版本(如 v1、v1beta1)来管理 API 的版本控制,允许用户在不同版本之间进行迁移。
- 什么是 Kubernetes 的 Pod 生命周期?
- Pod 生命周期包括 Pending、Running、Succeeded、Failed 和 Unknown 等状态,用户可以通过事件和状态监控 Pod 的生命周期。
- 如何在 Kubernetes 中使用 Persistent Volume (PV) 和 Persistent Volume Claim (PVC)?
- PV 是集群中的存储资源,PVC 是用户对存储的请求,Kubernetes 通过 PVC 绑定到 PV,实现持久化存储。
- 什么是 Kubernetes 的调度策略(Scheduling Policy)?
- 调度策略是 Kubernetes 中用于决定 Pod 应该被调度到哪个 Node 的规则,包括资源需求、亲和性、反亲和性和污点等。
- 如何在 Kubernetes 中进行安全性管理?
- 可以通过使用 Role-Based Access Control (RBAC)、Network Policies、Pod Security Policies 和 Secrets 等机制来管理 Kubernetes 的安全性。
- 什么是 Kubernetes 的 Service Mesh?
- Service Mesh 是一种用于管理微服务之间通信的基础设施层,提供流量管理、服务发现、负载均衡和安全性等功能,常见的有 Istio 和 Linkerd。
- 如何在 Kubernetes 中进行集群监控和日志管理?
- 可以使用 Prometheus 和 Grafana 进行集群监控,使用 ELK Stack(Elasticsearch, Logstash, Kibana)或 Fluentd 进行日志管理。
- 什么是 Kubernetes 的 Operator?
- Operator 是一种用于管理 Kubernetes 应用程序的控制器,能够自动化应用程序的部署、管理和扩展。
- 如何在 Kubernetes 中使用 Helm 进行应用管理?
- Helm 是 Kubernetes 的包管理工具,用户可以使用 Helm Charts 来定义、安装和管理 Kubernetes 应用程序。
- 什么是 Kubernetes 的资源限制和请求?
- 资源请求是容器启动时所需的最低资源,而资源限制是容器可以使用的最大资源,Kubernetes 通过这两者来管理资源分配。
- 如何在 Kubernetes 中实现蓝绿部署和金丝雀发布?
- 蓝绿部署通过创建两个独立的环境(蓝色和绿色)来实现,而金丝雀发布则通过逐步将新版本流量引入到生产环境中。
- 什么是 Kubernetes 的 API Server?
- API Server 是 Kubernetes 控制平面的核心组件,负责处理 API 请求并与 etcd 存储集群状态。
- 如何在 Kubernetes 中使用 Node Affinity?
- Node Affinity 是一种调度策略,允许用户指定 Pod 应该被调度到哪些 Node 上,基于 Node 的标签进行调度。
- 什么是 Kubernetes 的 Taint 和 Toleration?
- Taint 是 Node 上的标记,表示该 Node 不接受某些 Pod;Toleration 是 Pod 上的标记,允许 Pod 被调度到带有特定 Taint 的 Node。
- 如何在 Kubernetes 中进行故障转移?
- Kubernetes 通过自动重启、替换和重新调度失败的 Pod 来实现故障转移,确保应用程序的高可用性。
- 什么是 Kubernetes 的 Admission Controller?
- Admission Controller 是 Kubernetes 中的一个插件,负责在请求被持久化之前对 API 请求进行拦截和处理。
- 如何在 Kubernetes 中使用 Custom Resource Definition (CRD)?
- CRD 允许用户扩展 Kubernetes API,定义自定义资源类型,并通过控制器管理这些资源的生命周期。