Kubernetes 入门指南

举报
yd_231037148 发表于 2026/11/04 10:03:47 2026/11/04
【摘要】 本文从 Pod、Deployment、Service 等核心概念入手,结合最小部署示例、常用 kubectl 命令和新手常见问题,带初学者跑通 Kubernetes 的第一个应用。

一、Kubernetes 是什么

Kubernetes(常简写为 K8s)是一个开源的容器编排平台,用来自动完成容器的部署、扩缩容、滚动更新和故障恢复。

只用一台机器跑一个容器时,我们可以直接用容器命令启动它;但当应用变成几十个服务、几百个容器,并且需要 7×24 小时稳定运行时,手工管理就很难了。Kubernetes 把“希望达到的状态”写成一份声明,平台会持续对照这份声明,把实际状态调整到期望状态。例如声明“这个 Web 应用始终保持 3 个副本”,即使某个副本崩溃,Kubernetes 也会自动再启动一个。

对初学者来说,不必一开始就记住所有对象,先理解一个思路:你描述目标,平台负责实现并维持目标。

二、核心概念:先记住这几个对象

1. 集群、节点与控制平面

一个 Kubernetes 集群由一组机器组成。每台机器叫一个节点(Node)。控制平面(Control Plane)负责调度、记录状态和接收指令;工作节点负责真正运行容器。

2. Pod:最小的运行单元

Pod 是 Kubernetes 中最小的可部署单元,一个 Pod 里通常运行一个主容器,特殊情况下也可以运行几个需要紧密配合的容器。同一 Pod 内的容器共享网络和存储卷,生命周期也相同。Pod 本身是短暂的:它可能因为节点故障或更新而被重建,因此不要把 Pod 当作一台固定不变的服务器。

3. Deployment:管理无状态应用的副本

Deployment 用来声明“某种 Pod 要保持多少个副本、用哪个镜像、如何更新”。修改镜像版本后,Deployment 会按滚动更新的方式逐步替换旧 Pod,让服务在更新过程中尽量不中断。

4. Service:给一组 Pod 一个稳定的访问入口

Pod 的地址会随重建而变化,Service 则为一组标签相同的 Pod 提供一个固定不变的访问入口,并在多个 Pod 之间做负载均衡。前端调用后端时,应该访问 Service,而不是直接记住某个 Pod 的地址。

5. Namespace:逻辑上的隔离空间

Namespace 把集群内的资源划分到不同的逻辑空间,例如把开发、测试和生产环境分开,避免名称冲突,也方便按空间分配权限和资源配额。

6. ConfigMap 与 Secret:配置与敏感信息分开存放

应用的普通配置放在 ConfigMap 中,密码、令牌等敏感信息放在 Secret 中,再以环境变量或文件的方式挂载给 Pod。敏感信息不要写进代码仓库,也不要直接写进容器镜像。

三、一个最小示例:部署一个 Web 应用

下面是一份最简 Deployment 示例,它声明运行 2 个副本:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web-demo
  template:
    metadata:
      labels:
        app: web-demo
    spec:
      containers:
        - name: web
          image: nginx:1.25
          ports:
            - containerPort: 80

再用一个 Service 把它暴露出来:

apiVersion: v1
kind: Service
metadata:
  name: web-demo
spec:
  type: ClusterIP
  selector:
    app: web-demo
  ports:
    - port: 80
      targetPort: 80

常用操作如下:

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl get pods
kubectl get svc
kubectl describe pod <Pod 名称>

在本地学习时,可以用端口转发快速验证:

kubectl port-forward svc/web-demo 8080:80

然后在浏览器访问本地 8080 端口,就能看到 Web 页面。

四、Service 的三种常见类型

  • ClusterIP:只在集群内部访问,是默认类型,适合内部服务之间调用。
  • NodePort:在每个节点上打开一个固定端口,适合学习和小规模对外访问。
  • LoadBalancer:借助云厂商的负载均衡器对外提供访问,适合生产环境。

初学时先用 ClusterIP 理解内部调用,再用 NodePort 或端口转发验证效果,生产选型再考虑 LoadBalancer。

五、常用 kubectl 命令速查

  • kubectl get pods:查看 Pod 列表和状态。
  • kubectl get deployments:查看 Deployment 列表。
  • kubectl get svc:查看 Service 列表。
  • kubectl logs <Pod 名称>:查看容器日志。
  • kubectl describe pod <Pod 名称>:查看 Pod 的事件和配置细节。
  • kubectl delete -f <文件>:删除按文件创建的资源。

排查问题时,先看 get 的状态,再看 describe 的事件,最后看 logs 的输出,这个顺序能帮你快速定位大多数入门问题。

六、新手常见问题

  1. Pod 一直处于 Pending:多数是节点资源不足或调度条件不满足,先用 describe 查看事件提示。
  2. Pod 反复重启(CrashLoopBackOff):多半是程序启动就退出,查看日志确认是配置错误还是端口冲突。
  3. 镜像拉取失败(ImagePullBackOff):检查镜像名称、标签和网络访问,确认镜像确实存在。
  4. Service 访问不到:检查 Service 的 selector 标签是否与 Pod 标签一致,端口映射是否正确。

遇到问题时不要急着删除重建,先保留现场看事件和日志,养成“先观察、再修改”的习惯。

七、给初学者的学习路线

  1. 在本地用 minikube 或 kind 搭建一个单节点集群,先跑通上面的最小示例。
  2. 练习修改副本数、镜像版本和环境变量,观察滚动更新的过程。
  3. 学习 Namespace、ConfigMap、持久化存储卷等概念,再做一个带配置和数据的练习。
  4. 了解 Ingress、资源限制(requests/limits)和健康检查,再考虑把练习项目部署到云上。

结语

Kubernetes 的概念看起来多,但核心始终是“声明期望状态、平台持续维持”。从一个 Pod、一个 Deployment、一个 Service 开始动手,边做边看状态变化,比只看文档更快建立直觉。先把最小示例跑通,再逐步扩展,你就已经迈出了容器编排的第一步。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。