简介
Kubernetes,强大的容器编排平台,已成为许多 IT 专业人员必备的技能。在本全面教程中,我们将涵盖你应该准备好回答的顶级 Kubernetes 面试问题。从理解 Kubernetes 的基础知识到探索其高级特性,本指南将为你提供知识和信心,助你在下次与 Kubernetes 相关的工作面试中脱颖而出。
Kubernetes 基础
Kubernetes 简介
Kubernetes(简称 K8s)是一个开源的容器编排平台,旨在自动化容器化应用程序的部署、扩展和管理。作为一个云原生平台,它为跨分布式系统的容器管理提供了强大的解决方案。
核心概念
容器编排
容器编排能够高效管理容器化应用程序,解决复杂的部署挑战:
| 特性 | 描述 |
|---|---|
| 自动部署 | 管理容器生命周期 |
| 扩展 | 动态调整应用实例数量 |
| 负载均衡 | 分配网络流量 |
| 自我修复 | 自动重启失败的容器 |
集群架构
graph TD
A[主节点] --> B[API 服务器]
A --> C[控制器管理器]
A --> D[调度器]
A --> E[etcd]
F[工作节点] --> G[Kubelet]
F --> H[容器运行时]
实际示例:部署一个简单应用
## 创建一个部署
kubectl create deployment nginx-demo --image=nginx:latest
## 将部署暴露为服务
kubectl expose deployment nginx-demo --port=80 --type=LoadBalancer
## 扩展部署
kubectl scale deployment nginx-demo --replicas=3
关键组件
- Pod:最小的可部署单元
- 节点:物理或虚拟机
- 部署:描述所需的应用状态
- 服务:Pod 的网络抽象
Kubernetes 的优势
Kubernetes 为现代云原生应用开发提供了强大的功能,实现了:
- 高效的资源利用
- 高可用性
- 无缝扩展
- 复杂应用管理
集群架构
Kubernetes 集群概述
Kubernetes 集群是一组用于运行容器化应用程序的节点机器。该架构由在容器管理中具有特定角色的主节点和工作节点组成。
集群组件
graph TD
A[Kubernetes 集群] --> B[主节点]
A --> C[工作节点]
B --> D[API 服务器]
B --> E[控制器管理器]
B --> F[调度器]
B --> G[etcd]
C --> H[Kubelet]
C --> I[容器运行时]
节点类型及职责
| 节点类型 | 主要职责 |
|---|---|
| 主节点 | 管理集群状态、调度、扩展 |
| 工作节点 | 运行容器化应用程序 |
主节点组件
API 服务器
所有集群操作的中央管理点:
## 检查 API 服务器状态
systemctl status kube-apiserver
控制器管理器
监控集群状态并维护所需配置:
## 验证控制器管理器
kubectl get componentstatuses
调度器
根据资源需求将 Pod 分配到工作节点:
## 查看调度器日志
journalctl -u kube-scheduler
工作节点组件
Kubelet
管理每个工作节点上的 Pod 生命周期:
## 检查 Kubelet 服务
systemctl status kubelet
容器运行时
运行和管理容器:
## 验证容器运行时
crictl version
Pod 结构
Pod 是 Kubernetes 中最小的可部署单元:
## 创建一个简单的 Pod
kubectl run nginx --image=nginx
网络与通信
Kubernetes 使用覆盖网络进行 Pod 间通信,实现跨节点的无缝容器连接。
部署技术
Kubernetes 中的部署策略
Kubernetes 提供了多种部署技术,用于高效管理容器化应用程序,确保高可用性和无缝更新。
部署类型
graph TD
A[部署技术] --> B[重新创建]
A --> C[滚动更新]
A --> D[蓝绿部署]
A --> E[金丝雀部署]
基本部署配置
| 策略 | 描述 | 用例 |
|---|---|---|
| 重新创建 | 在创建新 Pod 之前终止所有现有 Pod | 维护窗口 |
| 滚动更新 | 逐步替换 Pod 实例 | 最小停机时间更新 |
| 蓝绿部署 | 在两个相同的环境之间切换流量 | 零停机时间部署 |
| 金丝雀部署 | 逐步将流量路由到新版本 | 降低风险的发布 |
创建基本部署
## 创建 nginx 部署
kubectl create deployment nginx-app --image=nginx:1.19 --replicas=3
## 查看部署状态
kubectl get deployments
扩展应用程序
## 将部署扩展到 5 个副本
kubectl scale deployment nginx-app --replicas=5
## 根据 CPU 利用率自动扩展
kubectl autoscale deployment nginx-app \
--min=2 --max=10 --cpu-percent=70
滚动更新策略
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
服务发现与负载均衡
## 将部署暴露为服务
kubectl expose deployment nginx-app \
--port=80 --type=LoadBalancer
高级网络
graph LR
A[客户端请求] --> B[负载均衡器]
B --> C[服务]
C --> D[Pod 1]
C --> E[Pod 2]
C --> F[Pod 3]
部署验证
## 检查滚动更新状态
kubectl rollout status deployment/nginx-app
## 查看部署历史记录
kubectl rollout history deployment/nginx-app
总结
在本教程结束时,你将对 Kubernetes 生态系统有扎实的理解,包括其架构、网络、部署、存储、安全等等。掌握了这些顶级 Kubernetes 面试问题的答案,你将有充分的准备来展示你的专业知识,并在 Kubernetes 和容器编排领域获得理想的工作。


