K8s基础命令

一、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)进行流量控制

    bash 复制代码
    kubectl apply -f <virtual-service.yaml>
    • 示例中的 VirtualService 含有流量拆分策略:

      yaml 复制代码
      apiVersion: 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 实现

相关推荐
CodeMartain2 小时前
Dify Windows 原生部署(无 Docker、纯本地)
运维·docker·容器
牛奶咖啡133 小时前
k8s容器编排技术实践——使用containerd作为容器运行时部署k8s集群
kubernetes·k8s的安装部署·开启系统的ipvs支持·安装containerd·containerd配置加速器·安装k8s的工具·安装calico网络插件
万里侯3 小时前
云原生数据备份与恢复:保障数据安全的最佳实践
微服务·容器·k8s
llrraa20104 小时前
配置docker国内镜像源
运维·docker·容器
阿里云云原生4 小时前
阿里云 STAROps 全域智能运维平台发布!从“被动救火”到“主动自治”
云原生
2301_780789665 小时前
手游遇到攻击为什么要用SDK游戏盾手游遇到攻击为什么要用 SDK 游戏盾?
安全·web安全·游戏·架构·kubernetes·ddos
35岁程序员的自救之路5 小时前
AiBBS - 面向下一个十年的AI + 云原生社区系统
人工智能·云原生
珂玥c6 小时前
k8s集群ingress碎碎念
云原生·容器·kubernetes
佳杰云星6 小时前
如何给大模型集群选“大脑”?智算调度与管理平台 10 维选型指南(附选型评分表)
人工智能·kubernetes·大模型·云计算·gpu·算力调度·智算中心
比特森林探险记8 小时前
context 在 gRPC / Gin / K8s 中的实战
容器·kubernetes·gin