kubernetes常用命令
简介:
本文列出常用 kubectl 命令与简短示例,便于日常集群管理、调试与部署使用。假设已正确配置 kubeconfig。
概览
1
2
3
4kubectl version # 客户端/服务端版本
kubectl cluster-info # 集群信息
kubectl config current-context # 当前上下文
kubectl config get-contexts # 列出上下文查看资源(get / describe / explain)
1
2
3
4
5
6
7
8
9
10
11
12kubectl get nodes # 节点列表
kubectl get pods --all-namespaces -o wide
kubectl get svc,deploy,rs,po -n myns
kubectl get pods -o jsonpath='{.items[*].metadata.name}' # jsonpath 输出
kubectl describe pod mypod -n myns # 详细信息
kubectl explain deployment.spec # 字段说明
常用输出格式:
kubectl get pods -o wide
kubectl get pod mypod -o yaml
kubectl get pod mypod -o json
kubectl get pods -o custom-columns=NAME:.metadata.name,IP:.status.podIP日志与交互
1
2
3
4
5
6
7kubectl logs pod-name # 查看单个容器日志
kubectl logs -f pod-name # 跟随日志
kubectl logs pod-name -c container-name # 指定容器
kubectl logs deploy/my-deployment --since=1h
kubectl exec -it pod-name -- /bin/bash # 进入容器(交互)
kubectl port-forward pod/mypod 8080:80 # 本地端口转发
kubectl cp localfile mypod:/tmp/remote # 拷贝文件到容器创建、应用与删除资源
1
2
3
4
5kubectl apply -f resource.yaml # 声明式应用(建议)
kubectl create -f resource.yaml # 立即创建
kubectl delete -f resource.yaml
kubectl delete pod mypod -n myns
kubectl replace -f resource.yaml # 替换资源部署、滚动更新与回滚
1
2
3
4
5
6
7kubectl set image deployment/nginx nginx=nginx:1.19.3 # 更新镜像
kubectl rollout status deployment/nginx # 查看滚动更新状态
kubectl rollout history deployment/nginx # 历史版本
kubectl rollout undo deployment/nginx # 回滚到上一个版本
kubectl rollout undo deployment/nginx --to-revision=2 # 回滚到指定版本
kubectl scale deployment/nginx --replicas=5
kubectl autoscale deployment/nginx --min=2 --max=10 --cpu-percent=80标签与注释
1
2
3kubectl label pod mypod env=prod
kubectl annotate deploy mydeploy description='blue-green test'
kubectl get pods --selector=env=prod资源编辑与补丁
1
2
3kubectl edit deployment mydeploy # 在默认编辑器中编辑
kubectl patch deployment mydeploy -p '{"spec":{"replicas":3}}' # json patch
kubectl replace -f - < resource.yaml # 从 stdin 替换管理命名空间、ConfigMap、Secret、存储
1
2
3
4
5kubectl create namespace myns
kubectl config set-context --current --namespace=myns
kubectl create configmap mycfg --from-file=app.conf
kubectl create secret generic mysecret --from-literal=key=secret
kubectl get pvc,pv节点与调度
1
2
3
4
5
6
7kubectl cordon node01 # 标记不可调度
kubectl uncordon node01
kubectl drain node01 --ignore-daemonsets --delete-local-data
kubectl taint nodes node01 key=value:NoSchedule # 添加污点
kubectl describe node node01
kubectl top nodes
kubectl top pods --all-namespaces诊断与调试技巧
1
2
3
4
5kubectl get events -n myns --sort-by='.lastTimestamp'
kubectl describe pod mypod -n myns
kubectl logs pod --previous pod-name # 查看上一个容器实例的日志(崩溃后)
kubectl run -it --rm debug --image=nicolaka/netshoot -- bash # 运行调试 Pod
kubectl port-forward svc/myservice 9090:80批量与筛选
1
2
3kubectl get pods -l app=nginx # 根据标签筛选
kubectl get pods --field-selector=status.phase=Running
kubectl get pods -n kube-system常用组合示例
1
2
3
4
5
6
7
8
9# 查看所有命名空间下最近 1 小时内含 error 的日志
kubectl get pods --all-namespaces -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name | \
awk 'NR>1{print $1,$2}' | while read ns name; do kubectl logs -n $ns $name --since=1h | grep -i error && echo "$ns/$name"; done
# 在所有节点上重启 DaemonSet(通过修改注解触发)
kubectl patch daemonset myds -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"kubectl.kubernetes.io/restartedAt\":\"$(date -Iseconds)\"}}}}}"
# 递归应用目录
kubectl apply -k ./overlays/production提示与替代工具
1
2
3- 使用 --dry-run=client|server 与 kubectl apply --server-side 来先验证变更。
- 对大仓库或频繁搜索建议使用 k9s、kubectx/kubens、stern(聚合日志)、kubetail、kubectl-neat 等工具。
- 对于大量文本处理,结合 jq、yq、awk、sed 能极大提升效率。
小结:
掌握 get/describe/logs/exec/apply/rollout/scale/drain 等核心命令,结合标签/输出格式与脚本化操作,可以高效完成大部分集群运维与调试任务。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Kymlin's Blog!
评论


