K8s常用命令合集

本文详细介绍了在Kubernetes(K8s)集群中使用CLI命令创建、查看、更新资源,以及进行部署、集群管理和故障排查的一系列实用技巧,涵盖了Deployment、Scale、Autoscale等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文旨在记录K8s使用过程中常用的CLI命令集,下面就针对K8s集群中各种资源对象的不同操作对其相关命令简单做以下分类。

1. 创建资源

一般创建资源会有两种方式:通过文件或者命令创建。

# 通过文件创建一个Deployment
kubectl create -f /path/to/deployment.yaml
cat /path/to/deployment.yaml | kubectl create -f -
# 不过一般可能更常用下面的命令来创建资源
kubectl apply -f /path/to/deployment.yaml

# 通过kubectl命令直接创建
kubectl run nginx_app --image=nginx:1.9.1 --replicas=3 

kubectl还提供了一些更新资源的命令,比如kubectl edit、kubectl patch和kubectl replace等。

# kubectl edit:相当于先用get去获取资源,然后进行更新,最后对更新后的资源进行apply
kubectl edit deployment/nginx_app

# kubectl patch:使用补丁修改、更新某个资源的字段,比如更新某个node
kubectl patch node/node-0 -p '{"spec":{"unschedulable":true}}'
kubectl patch -f node-0.json -p '{"spec": {"unschedulable": "true"}}'

# kubectl replace:使用配置文件来替换资源
kubectl replace -f /path/to/new_nginx_app.yaml

2. 查看资源

获取不同种类资源的信息。

# 一般命令的格式会如下:
kubectl get <resource_type>
# 比如获取K8s集群下pod的信息
kubectl get pod
# 更加详细的信息
kubectl get pod -o wide
# 指定资源的信息,格式:kubectl get <resource_type>/<resource_name>,比如获取deployment nginx_app的信息
kubectl get deployment/nginx_app -o wide
# 也可以对指定的资源进行格式化输出,比如输出格式为json、yaml等
kubectl get deployment/nginx_app -o json
# 还可以对输出结果进行自定义,比如对pod只输出容器名称和镜像名称
kubectl get pod httpd-app-5bc589d9f7-rnhj7 -o custom-columns=CONTAINER:.spec.containers[0].name,IMAGE:.spec.containers[0].image
# 获取某个特定key的值还可以输入如下命令得到,此目录参照go template的用法,且命令结尾'\n'是为了输出结果换行
kubectl get pod httpd-app-5bc589d9f7-rnhj7 -o template --template='{{(index spec.containers 0).name}}{{"\n"}}'
# 还有一些可选项可以对结果进行过滤,这儿就不一一列举了,如有兴趣,可参照kubectl get --help说明

3. 部署命令集

部署命令包括资源的运行管理命令、扩容和缩容命令和自动扩缩容命令。

3.1 rollout命令

管理资源的运行,比如eployment、Daemonet、StatefulSet等资源。

  • 查看部署状态:比如更新deployment/nginx_app中容器的镜像后查看其更新的状态。
kubectl set image deployment/nginx_app nginx=nginx:1.9.1
kubectl rollout status deployment/nginx_app
  • 资源的暂停及恢复:发出一次或多次更新前暂停一个 Deployment,然后再恢复它,这样就能在Deployment暂停期间进行多次修复工作,而不会发出不必要的 rollout。
# 暂停
kubectl rollout pause deployment/nginx_app
# 完成所有的更新操作命令后进行恢复
kubectl rollout resume deployment/nginx_app
  • 回滚:如上对一个Deployment的image做了更新,但是如果遇到更新失败或误更新等情况时可以对其进行回滚。
# 回滚之前先查看历史版本信息
kubectl rollout history deployment/nginx_app
# 回滚
kubectl rollout undo deployment/nginx_app
# 当然也可以指定版本号回滚至指定版本
kubectl rollout undo deployment/nginx_app --to-revision=<version_index>

3.2 scale命令

对一个Deployment、RS、StatefulSet进行扩/缩容。

# 扩容
kubectl scale deployment/nginx_app --replicas=5
# 如果是缩容,把对应的副本数设置的比当前的副本数小即可
# 另外,还可以针对当前的副本数目做条件限制,比如当前副本数是5则进行缩容至副本数目为3
kubectl scale --current-replicas=5 --replicas=3 deployment/nginx_app

3.3 autoscale命令

通过创建一个autoscaler,可以自动选择和设置在K8s集群中Pod的数量。

# 基于CPU的使用率创建3-10个pod
kubectl autoscale deployment/nginx_app --min=3 --max=10 --cpu_percent=80

4. 集群管理命令

4.1 cordon & uncordon命令

设置是否能够将pod调度到该节点上。

# 不可调度
kubectl cordon node-0

# 当某个节点需要维护时,可以驱逐该节点上的所有pods(会删除节点上的pod,并且自动通过上面命令设置
# 该节点不可调度,然后在其他可用节点重新启动pods)
kubectl drain node-0
# 待其维护完成后,可再设置该节点为可调度
kubectl uncordon node-0

4.2 taint命令

目前仅能作用于节点资源,一般这个命令通常会结合pod的tolerations字段结合使用,对于没有设置对应toleration的pod是不会调度到有该taint的节点上的,这样就可以避免pod被调度到不合适的节点上。一个节点的taint一般会包括key、value和effect(effect只能在NoSchedule, PreferNoSchedule, NoExecute中取值)。

# 设置taint
kubecl taint nodes node-0 key1=value1:NoSchedule
# 移除taint
kubecl taint nodes node-0 key1:NoSchedule-

如果pod想要被调度到上述设置了taint的节点node-0上,则需要在该pod的spec的tolerations字段设置:

tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoSchedule"

# 或者
tolerations:
- key: "key1"
  operator: "Exists"
  effect: "NoSchedule"

5. 其它

# 映射端口允许外部访问
kubectl expose deployment/nginx_app --type='NodePort' --port=80
# 然后通过kubectl get services -o wide来查看被随机映射的端口
# 如此就可以通过node的外部IP和端口来访问nginx服务了

# 转发本地端口访问Pod的应用服务程序
kubectl port-forward nginx_app_pod_0 8090:80
# 如此,本地可以访问:curl -i localhost:8090

# 在创建或启动某些资源的时候没有达到预期结果,可以使用如下命令先简单进行故障定位
kubectl describe deployment/nginx_app
kubectl logs nginx_pods
kubectl exec nginx_pod -c nginx-app <command>

# 集群内部调用接口(比如用curl命令),可以采用代理的方式,根据返回的ip及端口作为baseurl
kubectl proxy &

# 查看K8s支持的完整资源列表
kubectl api-resources

# 查看K8s支持的api版本
kubectl api-versions
<think>嗯,用户想了解Kubernetes(k8s)的常用命令,我需要整理一个清晰的结构来帮助他。首先,我应该回忆一下k8s的基础命令,比如集群管理、资源查看这些部分。然后考虑用户可能的场景,比如他可能是一个刚入门的管理员或者开发者,需要部署应用、调试问题,所以命令需要覆盖这些方面。 接下来,我需要分门别类地组织这些命令。通常,k8s的命令可以分为集群管理、资源操作、调试与日志、配置管理、扩展与自动伸缩、网络相关、存储管理这几个大类。每个类别下再列出常用命令和示例。 要注意用户提到的格式要求,行内数学表达式用$...$,但这里可能不太涉及数学公式,不过要确保所有的代码或命令行参数正确,比如用反引号包裹。同时,中文回答,结构清晰,分步骤说明。 可能还需要提醒用户注意权限问题,比如有些命令需要特定权限,或者不同命名空间的影响。此外,补充一些常用技巧,比如别名设置,这样能提升用户的使用效率。 另外,用户可能不仅需要命令列表,还需要一些解释,比如每个命令的作用和参数的意义。例如,kubectl get pods 是查看Pod,而-n指定命名空间。这样用户更容易理解何时使用这些命令。 最后,检查是否有遗漏的常用命令,比如滚动更新、回滚、端口转发这些操作,都是日常管理中会用到的。确保覆盖全面,同时不过于冗长,保持简洁明了。</think>以下为Kubernetes(k8s常用命令的整理,按照功能分类说明: --- ### 一、集群管理 1. **查看集群信息** ```bash kubectl cluster-info ``` 2. **查看节点状态** ```bash kubectl get nodes ``` 3. **查看集群版本** ```bash kubectl version ``` --- ### 二、资源操作 1. **查看资源** ```bash kubectl get <资源类型> # 例如:kubectl get pods kubectl get pods -n <命名空间> # 指定命名空间 kubectl get deployments --all-namespaces # 查看所有命名空间的Deployment ``` 2. **描述资源详情** ```bash kubectl describe <资源类型>/<名称> # 例如:kubectl describe pod/nginx ``` 3. **创建/更新资源** ```bash kubectl apply -f <yaml文件> # 通过YAML文件创建或更新资源 ``` 4. **删除资源** ```bash kubectl delete <资源类型>/<名称> # 例如:kubectl delete deployment/nginx kubectl delete -f <yaml文件> # 通过YAML文件删除资源 ``` --- ### 三、调试与日志 1. **查看Pod日志** ```bash kubectl logs <pod名称> -n <命名空间> kubectl logs -f <pod名称> # 实时跟踪日志 ``` 2. **进入Pod执行命令** ```bash kubectl exec -it <pod名称> -- /bin/sh # 进入Pod的Shell环境 ``` 3. **端口转发** ```bash kubectl port-forward <pod名称> <本地端口>:<Pod端口> # 例如:kubectl port-forward nginx 8080:80 ``` --- ### 四、配置管理 1. **查看当前配置** ```bash kubectl config view ``` 2. **切换上下文(集群/用户)** ```bash kubectl config use-context <上下文名称> ``` --- ### 五、扩展与自动伸缩 1. **手动扩展Deployment副本数** ```bash kubectl scale deployment/<名称> --replicas=3 ``` 2. **自动扩缩容(HPA)** ```bash kubectl autoscale deployment/<名称> --min=2 --max=5 --cpu-percent=80 ``` --- ### 六、网络相关 1. **查看Service** ```bash kubectl get services ``` 2. **暴露Service** ```bash kubectl expose deployment/<名称> --type=NodePort --port=80 ``` --- ### 七、存储管理 1. **查看PersistentVolume(PV)** ```bash kubectl get pv ``` 2. **查看PersistentVolumeClaim(PVC)** ```bash kubectl get pvc ``` --- ### 常用技巧 1. **别名简化命令** ```bash alias k="kubectl" # 后续可用 k get pods 代替 kubectl get pods ``` 2. **查看资源简写** ```bash kubectl api-resources # 列出所有资源的缩写(如po=pods, svc=services) ``` 3. **格式化输出** ```bash kubectl get pods -o wide # 显示详细信息 kubectl get pods -o json # JSON格式输出 kubectl get pods -o yaml # YAML格式输出 ``` --- ### 注意事项 1. **命名空间**:默认操作`default`命名空间,使用`-n`指定其他命名空间 2. **权限问题**:部分命令需要`ClusterRole`权限 3. **上下文切换**:多集群环境下需注意当前操作的集群 建议通过`kubectl --help`查看子命令帮助文档,例如`kubectl get --help`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信安成长日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值