在Ubuntu上如何管理Kubernetes资源
在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节点
- 初始化Master节点:
在Master节点上执行kubeadm init --pod-network-cidr=10.244.0.0/16(指定Pod网络CIDR,需与后续网络插件匹配),完成后将输出的kubeadm join命令保存(用于添加Worker节点)。 - 配置kubectl:
将集群配置文件复制到用户目录(mkdir -p $HOME/.kube & & sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config),并设置正确权限(sudo chown $(id -u):$(id -g) $HOME/.kube/config)。 - 部署网络插件:
以Calico为例,执行kubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml,实现Pod间通信。 - 添加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>。 - 扩缩容Deployment:
kubectl 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命名空间内的容器设置默认资源请求(100mCPU、64Mi内存)和限制(500mCPU、256Mi内存)。
五、动态资源调整与自动伸缩
1. 动态调整Pod资源
通过kubectl patch命令直接修改Pod的resources.requests或resources.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
该配置表示nginxDeployment的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的
requests和limits(如业务高峰期增加CPU请求); - 清理无用资源(如终止的Pod、未使用的PVC),释放集群资源;
- 使用HPA自动扩缩容,应对流量波动。
通过以上步骤,可在Ubuntu系统上实现Kubernetes集群资源的精细化管控,确保集群稳定运行并提升资源利用率。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 在Ubuntu上如何管理Kubernetes资源
本文地址: https://pptw.com/jishu/735571.html
