一、kubectl
1. 查看所有pad
kubectl get pod
-A,--all-namespaces 查看当前所有名称空间的资源
-n 指定名称空间,默认值 default,kube-system 空间存放是当前组件资源
--show-labels 查看当前的标签
-l 筛选资源,key、key=value
-o wide 详细信息包括 IP、分配的节点
-w 监视,打印当前的资源对象的变化部分
2. 查看指定命名空间pod
kubectl get pod -n namespace
3. 查看指定命名空间pod及明细
kubectl get pod -o wide -n namespace
4. 进而容器内部
docker exec -it nginx /bin/bash
kubectl exec -it nginx-0 -c nginx -n nginx -- /bin/bash
-it以交互终端模式打开pad
-c指定容器名
-n指定命名空间
--执行的命令
5. 通过标签查找pod
kubectl get pod -l app=nginx -n nginx
6. 查看pod容器日志
kubectl logs nginx-0 -n nginx -c nginx
7. 查看pod详细描述
kubectl describe pod podName
8. 查看pod标签
kubectl get pod --show-labels
9. 查看集群的service
kubectl get service
10. 查看集群的deployment
kubectl get deployment
选项 | 说明 |
---|---|
kubectl get | 获取 Kubernetes 中的资源对象 |
deployment | 资源类型,这里是 Deployment |
test-deployment | 具体的 Deployment 名称 |
-n test | 指定命名空间为 test,也可以写成 --namespace=test |
-o yaml | 输出格式为 YAML,完整显示 Deployment 的定义,包括系统自动生成的字段 |
11. kubectl create 、apply 、replace*
- kubectl create:创建资源(如果已存在会失败)
- kubectl apply:推荐使用,声明式管理资源(存在则更新,不存在则创建)
kubectl replace:替换资源整体定义(全量替换)
命令 用途 是否创建 是否更新 如果资源已存在 kubectl create 创建新资源 ✅ ❌ ❌ 报错 kubectl apply 推荐:声明式管理 ✅ ✅ ✅ 合并更新 kubectl replace 覆盖式更新 ❌(需存在) ✅ ✅ 覆盖替换
12. 快速修改资源
- 使用 kubectl edit(临时改,手动编辑)
kubectl edit deployment <名称> -n <命名空间>
- 快速修改镜像
kubectl set image deployment/<名称> <容器名>=<新镜像> -n <命名空间>
- 快速修改副本数
kubectl scale <资源类型>/<资源名称> --replicas=<数量> [-n 命名空间]
13. 自动伸缩deployment
kubectl autoscale deployment ndeployment名称 --min=最少副本数 --max=最大副本数 --cpu-percent=伸缩界限
14. 管理资源的滚动更新
- kubectl rollout history 资源类型/资源名称 查看历史版本
- kubectl rollout undo 资源类型/资源名称 回滚上一个版本
- kubectl rollout undo 资源类型/资源名称 --to-revision=版本 回滚指定版本
- kubectl rollout status 资源类型/资源名称 查看滚动更新状态 有返回码成功返回0 echo $?
控制保留版本.spec.revisionHistoryLimit 是一个重要的 Deployment 清理策略配置项,它允许你控制保留的更新历史版本数量,从而管理存储资源并决定是否允许回滚操作。
15. 资源补丁
kubectl patch 资源类型 资源名称 -p '{}'
-p: 表示使用 patch 策略来更新资源。
金丝雀部署示例:
$ kubectl patch deployment nginx-deployment -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}'
'{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}}': 这是一个 JSON 格式的 patch 内容,用于更新 Deployment 的 spec.strategy.rollingUpdate 字段。
"strategy": {"rollingUpdate": ...}: 指定 Deployment 的更新策略为滚动更新 (RollingUpdate).
"rollingUpdate": {"maxSurge": 1, "maxUnavailable": 0}: 配置滚动更新的参数:
- "maxSurge": 1: 表示在更新过程中,可以额外创建一个新的 Pod,使得总 Pod 数量最多比期望的 Pod 数量多一个。
- "maxUnavailable": 0: 表示在更新过程中,不允许任何旧的 Pod 变得不可用。这意味着在启动新 Pod 之前,不会停止旧 Pod。
$ kubectl patch deployment nginx-deployment --patch '{"spec": {"template": {"spec": {"containers": [{"name": "nginx-deployment-container", "image": "wangyanglinux/myapp:v2.0"}]}}}}}' && kubectl rollout pause deploy nginx-deployment
这个命令的目的是将 nginx-deployment 中的一部分 Pod 更新到新版本 (wangyanglinux/myapp:v2.0),并暂停 rollout。由于之前配置了 maxSurge: 1 和 maxUnavailable: 0,Kubernetes 会先启动一个新的 v2.0 Pod,然后暂停,此时集群中会同时存在一部分运行旧版本和一部分运行新版本的 Pod。
$ kubectl rollout resume deploy nginx-deployment
使用 kubectl rollout resume 命令继续完成剩余 Pod 的更新,逐步将所有流量切换到新版本。
评论 (0)