k8s学习笔记
【摘要】 一、集群管理工具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] -Akubectl get podkubectl get pod pod名称kubectl get pod -o widekubectl get pod -o namekubectl get pod pod名称 -o yamlkubectl get pod pod名称 -o jsonkubectl 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-labelskubectl label pod/ns/node 名称``key=valuekubectl 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 --allkubectl 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名称 -- lskubectl exec -it pod名称 -- /bin/bashkubectl 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/memorykubectl 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 容器IDcrictl 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)