k8s基础资源管理指令

学习 Kubernetes(k8s)的资源管理指令是掌握集群运维的关键。以下是系统化的学习路径和常用指令示例,帮助你高效管理资源。


1. 基础资源管理指令

查看资源
bash 复制代码
# 查看所有命名空间的 Pod
kubectl get pods -A

# 查看指定命名空间的 Deployment
kubectl get deployments -n <namespace>

# 查看资源详细信息(如未调度原因)
kubectl describe pod <pod-name>

# 查看节点资源容量和分配情况
kubectl describe nodes
创建/删除资源
bash 复制代码
# 通过 YAML 文件创建资源
kubectl apply -f pod.yaml

# 通过命令行直接创建 Pod
kubectl run nginx --image=nginx --restart=Never

# 删除资源
kubectl delete pod <pod-name>

2. Pod 与 Deployment 资源限制

在 YAML 文件中定义资源请求(requests)和限制(limits):

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: app
    image: nginx
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
动态调整副本数
bash 复制代码
# 扩展 Deployment 副本数
kubectl scale deployment/my-deploy --replicas=3

# 查看副本状态
kubectl get deployments

3. 命名空间(Namespace)管理

bash 复制代码
# 创建命名空间
kubectl create namespace dev

# 切换默认命名空间(临时)
kubectl config set-context --current --namespace=dev

# 查看命名空间下的资源
kubectl get all -n dev

4. 资源配额(ResourceQuota)

限制命名空间的资源总量:

yaml 复制代码
# quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: dev-quota
  namespace: dev
spec:
  hard:
    requests.cpu: "2"
    requests.memory: 4Gi
    limits.cpu: "4"
    limits.memory: 8Gi
bash 复制代码
kubectl apply -f quota.yaml

5. 资源监控

安装 Metrics Server
bash 复制代码
# 在 Minikube 中启用
minikube addons enable metrics-server

# 部署到集群(官方方式)
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
查看资源使用
bash 复制代码
# 查看节点资源使用情况
kubectl top nodes

# 查看 Pod 的资源使用(需 Metrics Server)
kubectl top pods

# 按 CPU 排序查看 Pod
kubectl top pods --sort-by=cpu

6. 故障排除与优化

常见问题诊断
bash 复制代码
# 查看 Pod 未调度的原因(如资源不足)
kubectl describe pod <pod-name> | grep Events -A10

# 检查节点资源分配
kubectl describe node <node-name> | grep Allocated -A10
OOMKilled 错误处理

调整 Pod 的 limits.memory,确保内存限制合理。


7. 高级资源管理

Horizontal Pod Autoscaler(HPA)

根据 CPU 使用率自动扩缩容:

bash 复制代码
# 创建 HPA(目标 CPU 使用率 80%)
kubectl autoscale deployment/my-deploy --cpu-percent=80 --min=1 --max=5
LimitRange(限制范围)

设置默认资源限制:

yaml 复制代码
# limitrange.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: default-limits
spec:
  limits:
  - default:
      cpu: "500m"
      memory: "1Gi"
    type: Container
bash 复制代码
kubectl apply -f limitrange.yaml

8. 实战案例

场景:优化资源分配
  1. 查看节点负载 :

    bash 复制代码
    kubectl top nodes
  2. 调整 Pod 资源限制 :修改 YAML 文件中的 requests 和 limits。

  3. 重新部署并验证 :

    bash 复制代码
    kubectl apply -f deployment.yaml
    kubectl describe pod <pod-name>

总结

• 核心工具 :kubectl 是核心,配合 get、describe、top 等指令。

• 资源定义 :在 YAML 中通过 resources 控制请求和限制。

• 配额与监控 :用 ResourceQuota 和 Metrics Server 管理集群资源。

• 自动扩缩:HPA 根据负载动态调整副本数。

通过实践这些指令和场景,你将能高效管理 Kubernetes 资源,确保集群稳定运行。

相关推荐
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
分布式存储与RustFS2 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
codeejun2 天前
每日一Go·MySQL-5、锁机制全解析
云原生·golang
赵文宇(温玉)3 天前
CoreDNS的hosts插件的缺行配置导致k8s集群异常
容器·kubernetes·rancher
guo_wen_qiang3 天前
上传本地镜像到harbor中
docker·容器·持续部署
张洛闻Eren3 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
忆~遂愿3 天前
本地片库怎么在外面打开?Plex + cpolar 搭一套可远程访问的私人影音库
docker·容器
Thneonl3 天前
你的 Pod 为什么 Pending:调度器两阶段
后端·kubernetes
不吃香菜kkk、3 天前
CI/CD(GitOps)学习与部署手册
运维·云原生·容器·kubernetes·云计算·jenkins·argocd
ChaITSimpleLove3 天前
云原生性能对决:JDK21虚拟线程+GraalVM vs .NET10/11 技术栈深度对比
微服务·云原生·serverless·graalvm native·native aot·runtime async·.net11/java21