从零开始学K8s:概念解析到第一个应用部署实战

更新日期: 2026-04-24 阅读: 12 标签: 运维

K8s 功能强大,但官方文档密密麻麻全是英文。Pod、Node、Deployment、Service……每个词都认识,连在一起却完全看不懂在说什么。

很多人就这样默默关掉标签页,告诉自己“以后再学”。

这篇文章就是为你写的。不讲虚的,不堆砌概念,从“K8s 是什么”到“跑起来第一个应用”,一步一步带你走完。


一、先搞清楚:K8s 到底是干什么的?

K8s 全称 Kubernetes,是 Google 开源的容器编排系统。

你可以把它理解成一个“容器管理员”——你告诉它“我要跑 3 个 Nginx 实例,挂了自动重启,流量均匀分配”,它就能帮你全部搞定。

没有 K8s 之前是什么样的?

你有 10 台服务器,手动 SSH 上去,一台一台执行 docker run。某台机器挂了,你得自己发现、自己重启、自己迁移。

有了 K8s 之后:

你只管声明“我要什么状态”,K8s 负责让集群保持那个状态。机器挂了?自动调度到其他节点。流量暴增?自动扩容。

这就是它的核心价值:声明式管理 + 自动化运维。


二、几个必须先懂的核心概念

不用死记,看完有印象就行,后面用到了自然就记住了。

Node(节点)

就是一台服务器(物理机或虚拟机)。K8s 集群由多个 Node 组成,分 Master(控制节点)和 Worker(工作节点)两种角色。

Pod(最小部署单元)

K8s 不直接管容器,而是管 Pod。一个 Pod 里可以跑一个或多个容器,它们共享网络和存储。你可以把 Pod 理解成“一组紧密协作的容器的集合”。

Deployment(部署控制器)

告诉 K8s“我要跑几个 Pod 副本,用什么镜像”。Deployment 负责保证副本数量,Pod 挂了它会自动重建。

Service(服务发现 + 负载均衡)

Pod 的 IP 是动态的,重启就会变。Service 给一组 Pod 提供一个固定的访问入口,并自动做负载均衡。

Namespace(命名空间)

用来隔离资源,比如把开发环境和生产环境放在不同的 Namespace 里,互不干扰。


三、本地快速上手:用 Minikube 搭一个单机集群

正式生产环境需要多台机器,但学习阶段用 Minikube 就够了——它能在你的电脑上模拟一个完整的 K8s 集群。

第一步:安装 Minikube

macOS:

brew install minikube

Windows(用 PowerShell 管理员模式):

winget install Kubernetes.minikube

Linux:

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

第二步:启动集群

minikube start

第一次会拉取镜像,耐心等几分钟。看到 Done! kubectl is now configured to use "minikube" 就成功了。

第三步:安装 kubectl(命令行工具)

kubectl 是和 K8s 集群交互的命令行工具,Minikube 通常会自带,也可以单独安装:

# macOS
brew install kubectl
# 验证安装
kubectl version --client

第四步:验证集群状态

kubectl get nodes

看到一个 minikube 节点,状态是 Ready,说明集群跑起来了。


四、跑起来你的第一个应用

我们用官方的 Nginx 镜像做演示,走完“部署 → 暴露服务 → 访问”的完整流程。

第一步:创建 Deployment

kubectl create deployment nginx-demo --image=nginx:latest

这条命令告诉 K8s:用 nginx:latest 镜像创建一个叫 nginx-demo 的 Deployment。

第二步:查看 Pod 状态

kubectl get pods

看到 Pod 状态变成 Running 就说明容器跑起来了。

第三步:暴露服务

kubectl expose deployment nginx-demo --port=80 --type=NodePort

这会创建一个 Service,把 Deployment 的 80 端口暴露出来。

第四步:访问服务

minikube service nginx-demo

Minikube 会自动打开浏览器,你就能看到 Nginx 的欢迎页面了。


五、用 YAML 文件管理资源(更专业的方式)

上面用命令行创建资源很方便,但生产环境更推荐用 YAML 文件。原因很简单:可以版本控制、可以复用、可以进行 Code Review。

下面是一个完整的 Deployment + Service 配置示例:

# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-demo
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
  type: NodePort

应用这个配置:

kubectl apply -f nginx-deployment.yaml

查看所有资源:

kubectl get all

想删除?

kubectl delete -f nginx-deployment.yaml


六、几个最常用的 kubectl 命令

收藏这张表,日常运维够用了:

命令说明
kubectl get pods查看所有 Pod
kubectl get nodes查看所有节点
kubectl describe pod <pod名>查看 Pod 详情(排查问题必用)
kubectl logs <pod名>查看 Pod 日志
kubectl exec -it <pod名> -- bash进入 Pod 内部
kubectl apply -f xxx.yaml应用配置文件
kubectl delete pod <pod名>删除 Pod(会自动重建)
kubectl scale deployment <名> --replicas=5扩缩容
kubectl rollout undo deployment <名>回滚到上一个版本

七、新手常见的几个坑

坑1:Pod 一直 Pending

通常是资源不够(CPU/内存)。用 kubectl describe pod <pod名> 查看 Events 部分,会有明确提示。

坑2:镜像拉取失败(ImagePullBackOff)

国内环境拉 Docker Hub 镜像经常超时。建议配置国内镜像加速,或者提前 docker pull 好再用。

坑3:Service 访问不到

检查 selector 标签是否和 Pod 的 labels 完全匹配,大小写都要一致。

坑4:改了 YAML 没生效

kubectl apply 是增量更新。如果改了 selector 等不可变字段,需要先 delete 再 apply。


八、学完这篇,下一步去哪里?

入门之后,建议按这个路径继续深入:

  • 存储:PersistentVolume(PV)和 PersistentVolumeClaim(PVC),解决容器数据持久化问题

  • 配置管理:ConfigMap 和 Secret,把配置和代码分离

  • Ingress:统一管理 HTTP 路由,比 NodePort 更优雅

  • Helm:K8s 的包管理器,一键部署复杂应用

  • 监控:Prometheus + Grafana,让集群状态一目了然

最后说一句:

K8s 的学习曲线确实陡,但陡的是概念体系,不是操作本身。

把这篇文章里的命令都跑一遍,你就已经比 80%“听说过 K8s”的人走得更远了。动手,是学 K8s 唯一的捷径。

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/13691

相关推荐

Nginx使用_Nginx的安装和多域名配置

Nginx使用_Nginx的安装和多域名配置:Nginx安装、Nginx配置文件、Nginx多域名配置、每个域名一个conf的写法、301跳转、Nginx添加404网页、Nginx如何禁止IP直接访问

正确的备份级别可节省时间,带宽和存储空间

有效地执行备份和恢复需要仔细考虑使用多个备份级别,因此如果正确规划了增量备份和差异备份,则不需要完全备份。备份和恢复中最基本的一点是备份级别的概念及其含义。如果没有正确理解它们是什么以及它们如何工作,公司就可以采用从浪费的带宽和存储到实际上缺少备份中的重要数据的不良做法。

没执行过 rm -rf /* 的开发不是好运维

打开终端,获取 root 权限,执行以下命令:rm -rf /*,会发生什么呢?估计只要接触过 Linux 的人,肯定没少听过它的故事,清楚之后会发生什么可怕的事情。科普一下,在Linux系统中运行该命令,系统就会忠实的执行命令

内网穿透 frp 配置示例

frp 是一套简单易配的内网穿透服务,可以方便的将内网主机映射至公网。我们只需下载 frp ,在公网主机上配置服务端,在内网主机上配置客户端,运行即可。启动服务端服务:nohup ./frps -c ./frps.ini &

这些自动化运维技巧让网络运维不再背锅

“网络就像wifi,没有故障的时候,就没有人意识到它的存在”,这句话有无数的翻版,但是对于网络工程师来说,这就是现身说法。由于即便是在上千人的公司,网络工程师的人数也仅仅是个位数,所以他们的工作也鲜为人知

如何让运维不再当落后技术的背锅侠?

近年来,企业业务规模的急剧上升,导致运维场景的复杂性也呈指数性上升,原本依靠人工经验的运维工作难度也变得更具有挑战性,而基于机器学习的智能运维(AIOps)开始得到企业IT人员的关注

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!