如何在 Kubernetes 集群上部署应用程序

KubernetesKubernetesBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

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 和容器编排领域获得理想的工作。