k8s学习笔记

举报
君陈SaMa 发表于 2026/07/18 21:30:40 2026/07/18
【摘要】 一、集群管理工具kubectl kubectl 是什么kubectl 是 Kubernetes 的 命令行客户端工具。它的作用是与 kube-apiserver 通信,向集群发送命令。通过它你可以 部署应用、查看资源、排查问题、管理集群。👉 可以把它理解为:Linux 的 bash 管理操作系统kubectl 管理 Kubernetes 集群:::info安装tap键补全增强工具,把支持...

一、集群管理工具kubectl

kubectl 是什么

  • kubectl 是 Kubernetes 的 命令行客户端工具
  • 它的作用是与 kube-apiserver 通信,向集群发送命令。
  • 通过它你可以 部署应用、查看资源、排查问题、管理集群

👉 可以把它理解为:

  • Linux 的 bash 管理操作系统
  • kubectl 管理 Kubernetes 集群

:::info
安装tap键补全增强工具,把支持kubectl补全打开

dnf install -y bash-completion

kubectl completion bash> /etc/bash_completion.d/kubectl

source /etc/profile

:::

kubectl run pod名称 --image=镜像地址
kubectl -n 命名空间名称 run pod名称 --image=镜像地址
kubectl apply/create -f xx.yaml
创建简单 Pod
创建 Pod

根据资源文件创建pod
`cat myweb.yaml kubectl apply -f -<br/>sed -i ‘s#web1#web2#’ xx.yaml
kubectl get pod[s] -A

kubectl get pod
kubectl get pod pod名称
kubectl get pod -o wide
kubectl get pod -o name
kubectl get pod pod名称 -o yaml
kubectl get pod pod名称 -o json
kubectl get pod -n 命名空间名称
kubectl get pod pod名称 -w
查询所有Pod信息(pod 后面的 s 可有可无,等价)
-o: 用来指定输出格式 ,-A:查看所有命名空间
查看当前命名空间的Pod信息
查询某Pod的信息
显式更多参数(主要是ip和运行在那个节点)
只查看名字
yaml格式输出
json格式输出
查看某命名空间的所有pod信息
-w 实时监听资源状态变化
kubectl get pod/ns/node --show-labels
kubectl label pod/ns/node 名称``key=value
kubectl label pod/ns/node 名称``key-
kubectl get/<font style="color:rgb(64, 64, 64);">delete</font> nodes -l <font style="color:rgb(64, 64, 64);">key=value</font>
--show-labels展示标签
打标签,标签是 键=值的形式
删除标签键-
<font style="color:rgb(23, 24, 26);">-l</font> 标签选择器,用来按标签过滤资源
+ <font style="color:rgb(64, 64, 64);">key=value</font>精准匹配
+ <font style="color:rgb(64, 64, 64);">key!=value</font>不等于
+ <font style="color:rgb(64, 64, 64);">'key in (a,b)'</font>a或b
+ <font style="color:rgb(64, 64, 64);">key</font>包含key就算
+ <font style="color:rgb(64, 64, 64);">'!key'</font>不含key
<font style="color:rgb(64, 64, 64);">kubectl taint node 节点名 key=value:效果</font>
<font style="color:rgb(64, 64, 64);">kubectl taint node 节点名 key=value:效果-</font>
给节点打污点
移除节点污点
+ <font style="color:rgb(64, 64, 64);">NoSchedule</font>新 Pod 无法调度到此节点,已在节点上运行的旧 Pod 不受影响
+ <font style="color:rgb(64, 64, 64);">PreferNoSchedule</font>尽量不调度
+ <font style="color:rgb(64, 64, 64);">NoExecute</font>最严格,会驱逐正在运行的 Pod)
kubectl describe pod pod名称
kubectl -n 命名空间名称 describe pod pod名称
查看pod的详细属性信息(关注Events)
kubectl logs pod名称
kubectl logs pod名称``-n 命名空间名称``-c 容器名称
查看某pod的日志
kubectl -n 命名空间 delete pod pod名称
kubectl delete pod pod名称
kubectl -n 命名空间 delete pod --all
kubectl delete -f xx.yaml
<font style="color:rgb(64, 64, 64);">kubectl delete pod --grace-period=0 --force</font>
删除某名称空间的某pod
删除当前名称空间下的某pod
删除某名称空间下所有 Pod 对象
根据资源文件删除
跳过优雅关闭,强制删除pod
kubectl create ns 命名空间名称 创建名称空间
kubectl get namespace[s]/ns 查看所有命名空间 (后面的s有无等价,常用缩写ns)
kubectl delete ns 命名空间名称 删除名称空间
kubectl exec pod名称 -- ls
kubectl exec -it pod名称 -- /bin/bash
kubectl exec pod名称``-c 容器名称``-- ls
在容器内执行命令

多容器pod要-c指定容器
kubectl cp 源路径 目标路径
kubectl cp``/本地目录或文件``[命名空间/]pod名:/容器内路径
kubectl cp``pod名:/容器内路径或文件``/本地路径``-n 命名空间``-c 容器名称
实机与pod进行文件或目录传输
本地 → Pod

Pod → 本地,-n``-c更常用
kubectl cp 底层通过 tar 打包传输,目标容器里必须存在 tar 二进制才能正常工作。tar: command not found:容器内无 tar 命令
kubectl top pod [-n ns名]

kubectl top pod``--sort-by=cpu/memory
kubectl top pod pod名 --containers
查看 Pod 的资源使用情况,<font style="color:rgb(23, 24, 26);">kubectl top</font> 依赖 Metrics Server
查看找出最耗cpu/内存的pod
查看pod中各容器的资源消耗情况

Deployment 相关

命令 说明
kubectl create deployment 名称 --image=镜像 --replicas=N --dry-run=client -o yaml > xx.yaml 生成 Deployment 模板
kubectl get deployment/deploy 查看 Deployment 列表
kubectl **scale** deployment 名称 --replicas=N 调整副本数量
kubectl set image deployment 名称 容器名=新镜像 更新容器镜像(触发滚动更新)
kubectl set image deployment/名称 容器名=新镜像 --record 更新镜像并记录变更原因
kubectl rollout history deployment/名称 查看版本历史
kubectl rollout undo deployment/名称 回滚到上一版本
kubectl rollout undo deployment/名称 --to-revision N 回滚到指定版本
kubectl rollout status deployment/名称 查看滚动更新状态
kubectl annotate deployments 名称 kubernetes.io/change-cause="描述" 添加版本变更注释
<font style="color:rgb(64, 64, 64);">kubectl create service clusterip 名称 --tcp=端口:目标端口 --dry-run=client -o yaml > svc.yaml</font> 生成 ClusterIP 类型 Service 模板
<font style="color:rgb(64, 64, 64);">kubectl create service nodeport 名称 --tcp=端口:目标端口 --node-port=节点端口 --dry-run=client -o yaml > svc.yaml</font> 生成 NodePort 类型 Service 模板
<font style="color:rgb(64, 64, 64);">kubectl get service/svc</font> 查看 Service 列表
<font style="color:rgb(64, 64, 64);">kubectl get svc -n 命名空间</font> 查看指定命名空间 Service
<font style="color:rgb(64, 64, 64);">kubectl expose deployment 名称 --port=80 --target-port=80 --name=svc名</font> 基于 Deployment 快速创建 Service
<font style="color:rgb(64, 64, 64);">kubectl expose deployment 名称 --port=80 --target-port=80 --type=NodePort</font> 快速创建 NodePort Service
<font style="color:rgb(64, 64, 64);">kubectl get endpoints/ep</font> 查看 Endpoints 列表
<font style="color:rgb(64, 64, 64);">kubectl get endpoints 名称 -w</font> 实时监听 Endpoints 变化
<font style="color:rgb(64, 64, 64);">kubectl create ingress 名称 --rule="域名/=服务名:端口" --dry-run=client -o yaml > ingress.yaml</font> 生成 Ingress 模板
<font style="color:rgb(64, 64, 64);">kubectl get ingress/ing</font> 查看 Ingress 列表
<font style="color:rgb(64, 64, 64);">kubectl delete ingress 名称</font> 删除 Ingress
<font style="color:rgb(64, 64, 64);">kubectl get daemonset/ds</font> 查看 DaemonSet 列表
<font style="color:rgb(64, 64, 64);">kubectl get statefulsets/sts</font> 查看 StatefulSet 列表
<font style="color:rgb(64, 64, 64);">kubectl scale statefulset 名称 --replicas=N</font> 调整 StatefulSet 副本数量
<font style="color:rgb(64, 64, 64);">kubectl create job 名称 --image=镜像 --dry-run=client -o yaml > job.yaml</font> 生成 Job 模板
<font style="color:rgb(64, 64, 64);">kubectl get job</font> 查看 Job 列表
<font style="color:rgb(64, 64, 64);">kubectl create cronjob 名称 --image=镜像 --schedule="*****" --dry-run=client -o yaml > cj.yaml</font> 生成 CronJob 模板
<font style="color:rgb(64, 64, 64);">kubectl get cronjobs/cj</font> 查看 CronJob 列表
<font style="color:rgb(64, 64, 64);">kubectl get HorizontalPodAutoscaler/hpa</font> 查看 HPA 列表
<font style="color:rgb(64, 64, 64);">kubectl get hpa 名称 -w</font> 实时监听 HPA 指标变化
<font style="color:rgb(64, 64, 64);">kubectl describe hpa 名称</font> 查看 HPA 详情和扩缩容事件
<font style="color:rgb(64, 64, 64);">kubectl get vpa</font> 查看 VPA 列表
<font style="color:rgb(64, 64, 64);">kubectl get vpa 名称 -o wide</font> 查看 VPA 详细信息
<font style="color:rgb(64, 64, 64);">kubectl describe vpa 名称</font> 查看 VPA 推荐值
kubectl get persistentvolume/pv 查看 PV 列表
kubectl get persistentvolumeclaims/pvc 查看 PVC 列表
kubectl get pvc 名称 查看指定 PVC 详情
kubectl delete pvc 名称 删除 PVC
kubectl get storageclass/sc 查看 StorageClass 列表
kubectl describe sc 名称 查看 StorageClass 详细信息
<font style="color:rgb(64, 64, 64);">kubectl create configmap 名称 --from-literal=key=value</font> 从字面值创建 ConfigMap
<font style="color:rgb(64, 64, 64);">kubectl create configmap 名称 --from-file=文件路径</font> 从文件创建 ConfigMap
`kubectl create configmap 名称 --from-literal=… --dry-run=client -o yaml kubectl apply -f -`
<font style="color:rgb(64, 64, 64);">kubectl get configmaps/cm</font> 查看 ConfigMap 列表
<font style="color:rgb(64, 64, 64);">kubectl create secret generic 名称 --from-literal=key=value</font> 从字面值创建 Secret
<font style="color:rgb(64, 64, 64);">kubectl create secret tls 名称 --cert=证书 --key=私钥</font> 创建 TLS 类型 Secret
<font style="color:rgb(64, 64, 64);">kubectl create secret docker-registry 名称 --docker-server=地址 --docker-username=用户 --docker-password=密码</font> 创建镜像仓库凭证 Secret
<font style="color:rgb(64, 64, 64);">kubectl get secrets</font> 查看 Secret 列表
`kubectl get secret 名称 -o jsonpath=‘{.data.xxx}’ base64 -d`
<font style="color:rgb(64, 64, 64);">kubectl get LimitRange/limits</font> 查看 LimitRange
<font style="color:rgb(64, 64, 64);">kubectl create quota 名称 --hard=cpu=2,memory=2Gi,pods=5 --dry-run=client -o yaml > quota.yaml</font> 生成 ResourceQuota 模板
<font style="color:rgb(64, 64, 64);">kubectl get ResourceQuota/quota</font> 查看 ResourceQuota
<font style="color:rgb(64, 64, 64);">kubectl create priorityclass 名称 --value=值 --dry-run=client -o yaml > pc.yaml</font> 生成 PriorityClass 模板
<font style="color:rgb(64, 64, 64);">kubectl get priorityclass/pc</font> 查看 PriorityClass 列表

二、K8s容器管理工具crictl

docker ··· —> crictl ···

  • kubectl 和 crictl 处于不同层级:kubectl 是集群 API 客户端,管理整个集群的资源;crictl 是节点本地的 CRI 工具,只用于排查节点上的容器和镜像。
  • 二者在查看容器日志、进入容器、文件拷贝这些运行时排障场景功能相近,但执行链路完全不同。
  • 镜像管理、沙箱查询是 crictl 独有,而集群资源编排、调度、服务管理这些能力 crictl 完全不具备。
  • **生产环境统一用 kubectl 做运维,crictl 仅作为节点本地的排障补充工具。 **
镜像管理命令 说明
~~crictl search~~
~~crictl build~~
~~crictl run~~
~~crictl network~~
~~crictl history~~
~~crictl save~~~~~~
~~crictl load~~
~~crictl tag ~~
~~crictl login~~
~~crictl push~~
~~crictl image prune~~
Docker专属
<font style="color:rgb(51, 51, 51);">crictl images</font> 查看本机镜像
<font style="color:rgb(51, 51, 51);">crictl history 镜像名称:标签/镜像 ID</font> 查看镜像的制作历史
<font style="color:rgb(51, 51, 51);">crictl pull 镜像名称:标签</font> 拉取镜像
ctr -n k8s.io image export 导出镜像(备份镜像为tar包)
ctr -n k8s.io image import 导入备份的镜像文件
<font style="color:rgb(51, 51, 51);">crictl tag 旧的名称:标签 新的名称:新的标签</font> 给镜像重新打标签(会生成一个同id不同名称的镜像,不是复制一份,而是映射)
<font style="color:rgb(51, 51, 51);">crictl rmi 镜像名称:标签/镜像id</font> 删除某个镜像,可同时删多个,用空格隔开(同一个id会映射多个镜像,此时删除id会报错)
**<font style="color:rgb(51, 51, 51);">crictl ps</font>** 查看当前节点业务容器
**crictl pods** 查看当前检点沙箱
**crictl inspect 容器ID/容器名称**
**crictl inspecti 镜像ID/镜像名:标签**
**crictl inspectp 沙箱ID/沙箱名称**
查询容器的详细信息
查询镜像的详细信息
查询沙箱的详细信息
<font style="color:rgb(51, 51, 51);">crictl</font>``<font style="color:rgb(51, 51, 51);">[start/stop</font>~~<font style="color:rgb(51, 51, 51);">/restart</font>~~<font style="color:rgb(51, 51, 51);">]</font>``<font style="color:rgb(51, 51, 51);">容器id/容器名称</font> 启动、停止(没有重启容器功能!)
crictl rm ``-f``<font style="color:rgb(51, 51, 51);">容器id/容器名称</font>
<font style="color:rgb(51, 51, 51);">crictl rm</font>``<font style="color:rgb(51, 51, 51);">$(crictl ps -aq)</font>
删除容器
删除所有容器
<font style="color:rgb(51, 51, 51);">-f</font>强制(容器运行时需先停再删否则会失败,强制则不用停直接删)
<font style="color:rgb(51, 51, 51);">crictl exec -it 容器ID/容器名称</font> <font style="color:rgb(51, 51, 51);">nginx -v</font>
<font style="color:rgb(51, 51, 51);">crictl exec -it 容器ID/容器名称 /bin/bash或/bin/sh</font>
crictl exec -it``-w``/usr/share/nginx/html -u
用户名 <font style="color:rgb(51, 51, 51);">容器ID/容器名称</font> <font style="color:rgb(51, 51, 51);">/bin/sh</font>
在容器执行<font style="color:rgb(51, 51, 51);">nginx -v</font> 执行完直接退出
进入 linux 容器 bash 部分精简镜像无 bash,用 sh
-w 等价于容器内执行 cd 目标目录
<font style="color:rgb(51, 51, 51);">-u</font> 用普通用户 appuser 进入
<font style="color:rgb(51, 51, 51);">crictl cp 源路径 目标路径</font>
crictl cp 宿主机文件路径 容器名:容器内目标路径
crictl cp 容器名:容器内文件路径 宿主机目标路径
实现容器内文件和宿主机(真机)文件的相互拷贝,在遇到同名文件时会直接覆盖,而且不会弹出任何确认提示
宿主机 --> 容器
容器 --> 宿主机
crictl logs <font style="color:rgb(51, 51, 51);">容器名称</font>
<font style="color:rgb(51, 51, 51);">crictl logs -f 容器名称</font>
看容器的标准输出和错误输出
实时跟踪日志输出,占用前台,类似<font style="color:rgb(51, 51, 51);">tail -f</font>
(想查看完整日志,只需将容器映射到实际,就可查看和实施查看)
功能分类 kubectl 命令(集群维度) 对应 crictl 命令(节点本地维度) 核心差异说明
查看运行实例 kubectl get pod crictl pods(查看 Pod 沙箱)
crictl ps(查看业务容器)
kubectl 看到的是 API 中的 Pod 资源对象;crictl 看到的是节点本地真实的沙箱 / 容器进程。一个 Pod 对应 1 个沙箱 + N 个业务容器。
查看实例详情 kubectl describe pod **crictl inspect 容器ID/容器名称**
**crictl inspecti 镜像ID/镜像名:标签**
**crictl inspectp 沙箱ID/沙箱名称**
kubectl describe 包含调度事件、配置、探针、事件等集群全量信息;crictl 仅返回底层运行时数据(命名空间、挂载、PID、网络栈),无调度 / 事件信息。
查看容器日志 kubectl logs pod名 -c 容器名
kubectl logs -f pod名
crictl logs 容器ID
crictl logs -f 容器ID
功能基本一致,都支持实时跟随,区别是crictl 只支持查看本节点。
进入容器执行命令 kubectl exec -it pod名 -c 容器名 -- /bin/sh crictl exec -it 容器ID /bin/sh 功能完全一致,区别是crictl 必须登录节点本地执行。
宿主机与容器文件拷贝 kubectl cp 本地路径 pod名:/路径 -c 容器名 crictl cp 本地路径 容器ID:/路径 底层均依赖 tar 实现,双向拷贝逻辑一致。
kubectl 支持远程拷贝;crictl 只能在节点本地操作。
删除 / 销毁容器 kubectl delete pod pod名 crictl rm -f 容器ID 效果相似但层级完全不同:kubectl delete 是删除 API 资源,由 kubelet 触发容器销毁;crictl rm 是直接暴力删除本地容器。生产禁止直接用 crictl 删业务容器,kubelet 检测到容器消失会立刻重建。
镜像管理 无对应命令 crictl images/pull/rmi/save/load kubectl 镜像拉取根据资源文件配置自动完成;镜像查询、清理、导入导出只能在节点本地用 crictl 操作。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。