首页主机资讯在Ubuntu上如何管理Kubernetes资源

在Ubuntu上如何管理Kubernetes资源

时间2025-10-27 12:07:03发布访客分类主机资讯浏览846
导读:在Ubuntu上管理Kubernetes资源的完整流程与实践 一、前置准备:Ubuntu节点基础配置 在Ubuntu系统上管理Kubernetes资源前,需完成以下基础设置,确保集群稳定运行: 系统要求:使用Ubuntu 16.04及以上...

在Ubuntu上管理Kubernetes资源的完整流程与实践

一、前置准备:Ubuntu节点基础配置

在Ubuntu系统上管理Kubernetes资源前,需完成以下基础设置,确保集群稳定运行:

  • 系统要求:使用Ubuntu 16.04及以上版本,更新系统包(sudo apt update & & sudo apt upgrade -y)。
  • 安装必要工具:通过apt安装Docker(容器运行时)、kubelet(节点管理)、kubeadm(集群初始化)、kubectl(命令行工具),并锁定版本避免自动升级(sudo apt-mark hold kubelet kubeadm kubectl)。
  • 禁用Swap:Kubernetes要求节点禁用Swap分区(sudo swapoff -a),并修改/etc/fstab文件注释Swap行(永久生效)。
  • 关闭防火墙(可选):若集群节点间通信无特殊安全需求,可关闭UFW(sudo ufw disable)以简化网络配置。

二、集群搭建:初始化Master与加入Worker节点

  1. 初始化Master节点
    在Master节点上执行kubeadm init --pod-network-cidr=10.244.0.0/16(指定Pod网络CIDR,需与后续网络插件匹配),完成后将输出的kubeadm join命令保存(用于添加Worker节点)。
  2. 配置kubectl
    将集群配置文件复制到用户目录(mkdir -p $HOME/.kube & & sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config),并设置正确权限(sudo chown $(id -u):$(id -g) $HOME/.kube/config)。
  3. 部署网络插件
    以Calico为例,执行kubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml,实现Pod间通信。
  4. 添加Worker节点
    在Worker节点上执行Master节点保存的kubeadm join命令,等待节点状态变为Ready(通过kubectl get nodes验证)。

三、资源管理核心:kubectl命令行工具

kubectl是Ubuntu上管理Kubernetes资源的核心工具,支持陈述式(命令行直接操作)和声明式(YAML文件定义)两种方式:

1. 基础资源管理

  • 查看资源
    使用kubectl get命令查看资源列表,常用选项:
    • -n < 命名空间> :指定命名空间(如-n dev);
    • -o wide:显示详细信息(如IP地址);
    • -o yaml/json:以YAML/JSON格式输出;
    • --all-namespaces(或-A):查看所有命名空间资源。
      示例:kubectl get pods -n dev -o wide(查看dev命名空间下所有Pod的详细信息)。
  • 创建资源
    通过kubectl create命令直接创建资源,如Deployment、Namespace:
    示例:kubectl create deployment nginx --image=nginx -n dev(在dev命名空间下创建名为nginx的Deployment,使用nginx镜像)。
  • 删除资源
    使用kubectl delete命令删除资源,如kubectl delete pod < pod-name> -n < namespace> 。若Pod因副本控制器(如Deployment)无法删除,可添加--force --grace-period=0强制删除(慎用)。

2. 声明式资源管理(推荐)

通过YAML文件定义资源状态,使用kubectl apply命令应用配置(支持更新、回滚),更符合DevOps实践。

  • 创建资源
    编写YAML文件(如nginx-deployment.yaml),内容示例:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      namespace: dev
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            resources:
              requests:
                memory: "128Mi"
                cpu: "250m"
              limits:
                memory: "256Mi"
                cpu: "500m"
    
    执行kubectl apply -f nginx-deployment.yaml创建资源。
  • 更新资源
    修改YAML文件(如将replicas改为3),再次执行kubectl apply -f nginx-deployment.yaml,Kubernetes会自动滚动更新Pod。
  • 回滚资源
    使用kubectl rollout undo deployment/< deployment-name> -n < namespace> 回滚到上一个版本(如kubectl rollout undo deployment/nginx -n dev)。

3. 常用操作示例

  • 查看Pod日志kubectl logs < pod-name> -n < namespace> (查看当前日志),-p选项查看重启前日志(如kubectl logs -p nginx-pod -n dev)。
  • 进入容器kubectl exec -it < pod-name> -n < namespace> -- /bin/bash(进入Pod的第一个容器),若Pod有多个容器,需指定-c < container-name>
  • 扩缩容Deploymentkubectl scale deployment < deployment-name> --replicas=< 数量> -n < namespace> (如kubectl scale deployment nginx --replicas=3 -n dev)。

四、资源精细化管控:Requests/Limits与Quota

1. Pod级别资源设置

在Pod/Deployment的YAML文件中,通过resources字段设置requests(请求)和limits(限制):

  • requests:容器启动时所需的最小资源量,调度器据此将Pod分配至满足资源要求的节点;
  • limits:容器运行时的最大资源量,超出限制会触发资源回收(CPU被限制使用,内存超过则触发OOM Killer终止容器)。
    示例:
resources:
  requests:
    memory: "128Mi"
    cpu: "250m"
  limits:
    memory: "256Mi"
    cpu: "500m"

2. 命名空间级别资源配额

通过ResourceQuota限制命名空间的总资源边界,通过LimitRange为命名空间内的容器设置默认资源请求/限制,避免资源争抢:

  • ResourceQuota示例(YAML):
    apiVersion: v1
    kind: ResourceQuota
    metadata:
      name: dev-team-quota
      namespace: dev
    spec:
      hard:
        requests.cpu: "4"
        requests.memory: "8Gi"
        limits.cpu: "8"
        limits.memory: "16Gi"
        persistentvolumeclaims: "10"
    
    该配置限制dev命名空间内所有Pod的CPU请求总和不超过4核、内存请求不超过8GiB,PVC数量不超过10个。
  • LimitRange示例(YAML):
    apiVersion: v1
    kind: LimitRange
    metadata:
      name: default-limits
      namespace: dev
    spec:
      limits:
      - type: Container
        default:
          requests.cpu: "200m"
          requests.memory: "128Mi"
        defaultRequest:
          requests.cpu: "100m"
          requests.memory: "64Mi"
        max:
          requests.cpu: "500m"
          requests.memory: "256Mi"
    
    该配置为dev命名空间内的容器设置默认资源请求(100m CPU、64Mi内存)和限制(500m CPU、256Mi内存)。

五、动态资源调整与自动伸缩

1. 动态调整Pod资源

通过kubectl patch命令直接修改Pod的resources.requestsresources.limits字段(无需重启Pod),适用于应对业务负载变化:
示例:kubectl patch pod ubuntu-pod -n dev -p '{ "spec":{ "containers":[{ "name":"ubuntu-container","resources":{ "requests":{ "memory":"256Mi"} ,"limits":{ "memory":"512Mi"} } } ]} } '
注意:需Kubernetes 1.27及以上版本,且容器运行时(如Docker、containerd)支持CRI动态更新。

2. Horizontal Pod Autoscaler(HPA)

通过HPA根据CPU/内存使用率自动扩缩容Pod,应对流量波动:

  • 前提条件:集群已安装Metrics Server(用于采集资源指标)。
  • 创建HPA
    示例:kubectl autoscale deployment nginx --cpu-percent=50 --min=2 --max=5 -n dev
    该配置表示nginx Deployment的Pod副本数将根据CPU使用率自动调整,目标使用率为50%,最小副本数为2,最大为5。

六、资源监控与优化

1. 实时监控

  • 查看节点/Pod资源使用kubectl top nodes(查看节点CPU、内存使用)、kubectl top pods -n < namespace> (查看命名空间内Pod资源使用)。需提前安装Metrics Server(kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml)。
  • 可视化监控:部署Prometheus+Grafana搭建监控系统,采集集群资源指标(如CPU利用率、内存占用、Pod重启次数),设置告警规则(如Pod内存超过限制时触发告警)。

2. 日志分析

通过EFK(Elasticsearch+Fluentd+Kibana)或Loki+Grafana收集容器日志,分析资源瓶颈(如应用内存泄漏导致的持续高内存使用)。

3. 优化建议

  • 根据监控数据调整Pod的requestslimits(如业务高峰期增加CPU请求);
  • 清理无用资源(如终止的Pod、未使用的PVC),释放集群资源;
  • 使用HPA自动扩缩容,应对流量波动。

通过以上步骤,可在Ubuntu系统上实现Kubernetes集群资源的精细化管控,确保集群稳定运行并提升资源利用率。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 在Ubuntu上如何管理Kubernetes资源
本文地址: https://pptw.com/jishu/735571.html
如何在Ubuntu上搭建Kubernetes网络 Kubernetes能提升Ubuntu服务器效率吗

游客 回复需填写必要信息