很多人第一次接触 Kubernetes, 都会有一种感觉:
集群好像搭起来了, 但接下来不知道该干什么。
概念看了不少, 命令也敲过, 可真要用在项目里,还是心里没底。
这篇文章不讲晦涩定义, 只站在 运维工程师的实际使用角度, 把 Kubernetes 真正会用到的东西 一次讲清楚。
Kubernetes 到底在解决什么问题?
在没有 Kubernetes 之前, 我们部署服务往往是这样的:
手动启动容器
手动分配端口
容器挂了再手动重启
扩容只能多起几个容器
这种方式的问题很明显:
不稳定、不可控、无法规模化。
而 Kubernetes 的思路非常简单:
你只需要告诉它“我想要什么状态”剩下的交给它自己完成。
这也是 Kubernetes 最核心的设计理念:声明式管理。

一个 Kubernetes 集群,里面都在忙什么?
很多人觉得 Kubernetes 复杂, 其实只是角色多,分工清晰。
Master 节点,可以理解为指挥中心。
它负责:
接收所有操作请求
决定 Pod 应该跑在哪个节点
维护整个集群的期望状态
其中最重要的只有一个组件需要记住:
kube-apiserver
所有命令、所有控制, 最终都会经过它。
Node 节点的工作反而很简单。
只做三件事:
运行容器
上报状态
执行调度结果
Node 不做决策, 只负责执行。
用 Kubernetes,方式其实只有三种
这是很多人用不好 K8s 的根本原因。
第一种:纯命令式(不推荐)
kubectl run nginx --image=nginx
快是快, 但只适合临时测试, 不适合长期维护。
第二种:配置文件 + create
kubectl create -f nginx.yaml
比命令好, 但对频繁变更并不友好。
第三种:声明式(生产首选)
kubectl apply -f nginx.yaml
你只关心一件事:
最终状态是不是我想要的
至于中间怎么变化, Kubernetes 会自己处理。
kubectl 这些命令,日常一定会用
不需要死记, 真正常用的就这几个:
查看资源
kubectl get pod
查看详细信息
kubectl describe pod nginx
查看日志
kubectl logs nginx
进入容器
kubectl exec -it nginx -- /bin/bash
删除资源
kubectl delete -f nginx.yaml
Pod 并不是你真正部署应用的方式
很多新手一开始就直接创建 Pod, 但在真实环境中,几乎不会这样做。
原因很简单:
Pod 挂了不会自动重建
Pod 没有副本控制
Pod 不支持升级和回滚
Pod 更像是一个最小运行单元, 而不是一个部署单元。
真正用来部署应用的,是 Deployment
Deployment 才是生产环境的主角。
它能帮你解决:
应用副本数量控制
Pod 异常自动拉起
滚动升级
版本回滚
创建一个 Nginx 服务:
kubectl create deployment nginx --image=nginx --replicas=3
你会发现:
Pod 自动创建
分布在不同节点
异常会自动恢复
Pod IP 会变,服务怎么访问?
这是几乎每个新手都会问的问题。
答案只有一个:Service。
Service 提供了一个稳定入口, 即使 Pod 重建、IP 改变, 也不会影响访问。
最常见的一种用法:
kubectl expose deployment nginx \
--port=80 --target-port=80 --type=NodePort
扩容和缩容,其实就是一条命令
kubectl scale deployment nginx --replicas=5
不用重启, 不用停服务, Service 会自动分流。
滚动升级和回滚,是 Kubernetes 的精华
升级镜像版本:
kubectl set image deployment nginx nginx=nginx:1.19 --record
查看历史版本:
kubectl rollout history deployment nginx
回滚只需要一条命令:
kubectl rollout undo deployment nginx
这就是 Kubernetes 能真正用在生产环境的原因。
YAML,才是 Kubernetes 的最终形态
在生产环境里, 你一定会大量使用 YAML。
apiVersion: apps/v1
kind:Deployment
metadata:
name:nginx
spec:
replicas:1
selector:
matchLabels:
app:nginx
template:
metadata:
labels:
app:nginx
spec:
containers:
-name:nginx
image:nginx:1.17
一条命令即可生效:
kubectl apply -f deployment.yaml
Dashboard:看一眼就好,不要依赖
Dashboard 可以帮你:
看状态
查日志
简单排错
但真正稳定、可控的运维, 永远离不开 命令行 + YAML。

参与讨论
(Participate in the discussion)
参与讨论