一、Kubernetes 常用命令(集群操作)
1. 查看集群信息
bash
kubectl cluster-info
- 显示当前 k8s 集群的主节点、API 服务器地址、etcd 地址等。
2. 查看节点
bash
kubectl get nodes
- 查看所有节点状态和资源使用情况。
3. 查看 pod 状态
bash
kubectl get pods -o wide
- 查看你所有 pod 的状态、IP 地址、运行状态等。
二、服务部署与管理命令
1. 创建 deployment
bash
kubectl create deployment <deployment-name> --image=<image-name>
- 用于部署一个应用,支持滚动更新等特性。
2. 查看 deployment 详情
bash
kubectl describe deployment <deployment-name>
- 显示详细的 deployment 信息,包括 replicas、rolling update 等。
3. 编辑 deployment 配置
bash
kubectl edit deployment <deployment-name>
- 进入配置文件编辑模式(常用在 YAML 中直接修改)。
三、升级和回滚(Deployment)
1. 升级 Deployment(滚动更新)
bash
kubectl set image deployment/<deployment-name> <container-name>=<new-image>
- 修改指定 deployment 中某容器的镜像,触发滚动更新。
或者使用 kubectl apply 来更新(适合 YAML 内容修改):
bash
kubectl apply -f <deployment-yaml-file>
2. 查看 rollout 状态
bash
kubectl rollout status deployment/<deployment-name>
- 显示当前 rollout 的状态(是否完成、wait 状态等)。
3. 回滚 Deployment
bash
kubectl rollout undo deployment/<deployment-name>
- 回退到上一个版本的 deployment。
或者回滚到指定 revision:
bash
kubectl rollout undo deployment/<deployment-name> --to-revision=<revision-number>
4. 查看 rollout 历史
bash
kubectl rollout history deployment/<deployment-name>
- 显示 deployment 的 rollout 历史,包括各个版本的 revision 和 commit 信息。
5. 查看特定 revision 的 pod
bash
kubectl rollout history deployment/<deployment-name> --revision=<revision-number>
- 查看某个版本的 deployment 的详细信息,包括 pod 的状态。
6. 查看 replicas 分布
bash
kubectl get rs
- 查看 ReplicaSet(用于 Deployment 的 rollouts)信息。
四、流量控制(Deployment 和服务)
1. 使用 Service 的流量控制
- 轮询(Round Robin):默认的流量分发策略,每个请求依次分配给每个 pod。
- 加权流量分发(Weighted Round Robin) :可以在
Service中设置spec.sessionAffinity或使用Ingress控制。
示例:设置服务流量策略
bash
kubectl create service clusterip my-service --tcp=80:8080
2. 使用 Ingress 控制流量
bash
kubectl get ingress
- 查看当前 Ingress 路由规则。
bash
kubectl describe ingress <ingress-name>
- 查看 Ingress 的状态和规则详情。
3. 流量拆分(灰度发布、A/B 测试)
-
使用 Istio(Service Mesh)进行流量控制:
bashkubectl apply -f <virtual-service.yaml>-
示例中的
VirtualService含有流量拆分策略:yamlapiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: my-virtual-service spec: hosts: - my-app gateways: - my-gateway http: - route: - destination: host: my-app weight: 60 - destination: host: my-app weight: 40 -
这表示 60% 的流量分发到一个版本,40% 到另一个版本。
-
-
使用 Kubernetes 的 Service 和 Label Selectors 进行流量控制:
- 部署两个版本的 pod(分别带有不同标签);
- 创建两个 Service(分别指向不同标签的 pod);
- 使用
kubectl或 Ingress 拆分流量到不同 Service。
五、伸缩命令(Scaling)
1. 横向扩展(scale up)
bash
kubectl scale deployment/my-deployment --replicas=5
- 更改指定 deployment 的副本数。
2. 缩放(scale down)
bash
kubectl scale deployment/my-deployment --replicas=2
3. 查看当前副本数
bash
kubectl get deployment my-deployment -o jsonpath='{.spec replicas}'
六、查看日志和调试
1. 查看 pod 日志
bash
kubectl logs <pod-name>
- 若 pod 多个容器,可以加上
--container=<container-name>。
bash
kubectl logs <pod-name> --container=app
2. 进入 pod 终端
bash
kubectl exec -it <pod-name> -- /bin/bash
3. 查看资源使用情况
bash
kubectl top pod
kubectl top node
七、删除命令
1. 删除 deployment(谨慎操作!)
bash
kubectl delete deployment <deployment-name>
2. 删除 pod
bash
kubectl delete pod <pod-name>
3. 删除 service
bash
kubectl delete service <service-name>
八、kubectl 的常用命令参数
| 命令 | 说明 |
|---|---|
--all |
删除所有副本 |
-f <file> |
从文件中读取配置 |
--dry-run |
不真正执行,输出预期结果 |
--record |
记录命令历史(用于 audit,不常用) |
--save-config |
保存配置到文件(用于调试) |
九、升级和回滚的场景理解
1. 升级场景(Deployment)
- 镜像更新、配置变更、资源调整(CPU、内存);
- 滚动更新:默认方式,逐步替换旧 pod,不影响服务;
- 完全替换:使用
--strategy=recreate可以将旧 pod 全部删除,再重新部署新版本。
2. 回滚场景
- 升级后出现问题,使用
kubectl rollout undo回滚; - 在生产环境中,建议在回滚前验证版本,并使用 A/B 测试等方式判断是否需要回滚。
3. 流量控制场景
- 灰度发布:将部分流量导向新版本,其余保持旧版本;
- 逐步上线:通过设置权重或使用 canary 部署策略;
- 观察流量趋势、错误率、响应时间等;
十、主要命令总结表
| 目的 | 命令 | 说明 |
|---|---|---|
| 查看 pod 信息 | kubectl get pods |
|
| 查看 deployment 信息 | kubectl get deployment |
|
| 查看 service 信息 | kubectl get service |
|
| 查看 node 信息 | kubectl get node |
|
| 创建 deployment | kubectl create deployment |
|
| 更新 deployment 的 image | kubectl set image |
|
| 回滚 deployment | kubectl rollout undo |
|
| 查看 rollout 历史 | kubectl rollout history |
|
| 查看运行中的 replicas | kubectl get rs |
|
| 伸缩副本数 | kubectl scale deployment |
|
| 查看日志 | kubectl logs |
|
| 删除 deployment | kubectl delete deployment |
|
| 流量拆分 | kubectl apply -f virtual-service.yaml |
通过 Istio 或 Ingress 实现 |