本文目录导读:

在Shell脚本中配置容器资源预留,主要涉及Docker和Kubernetes两种场景,以下是两种场景下的详细配置方法:
Docker容器资源预留
CPU资源预留
#!/bin/bash # CPU预留配置示例 docker run -d \ --cpus="1.5" \ # 限制CPU使用上限为1.5个核心 --cpu-shares=512 \ # CPU权重(默认1024,值越高优先级越高) --cpuset-cpus="0,1" \ # 绑定到特定CPU核心 --cpu-period=100000 \ # CPU周期(微秒) --cpu-quota=50000 \ # CPU配额(周期内最多使用50000微秒) --name my_container \ nginx # 动态调整已运行容器的CPU限制 docker update --cpus="2" --cpu-shares=1024 my_container
内存资源预留
#!/bin/bash # 内存预留配置 docker run -d \ --memory="512m" \ # 内存硬限制 --memory-reservation="256m" \ # 内存软限制(预留值) --memory-swap="1g" \ # 交换空间限制(内存+交换) --memory-swappiness=0 \ # 禁用swap倾向 --name my_container \ nginx # OOM优先级设置 docker run -d \ --oom-kill-disable=false \ # 允许OOM时杀死容器 --oom-score-adj=-500 \ # OOM分数调整(-1000到1000) nginx
完整资源预留脚本
#!/bin/bash
# 容器资源预留配置脚本
configure_container_resources() {
local container_name=$1
local cpu_limit=$2
local mem_limit=$3
local mem_reserve=$4
echo "配置容器 ${container_name} 资源预留..."
docker run -d \
--name "${container_name}" \
--cpus="${cpu_limit}" \
--memory="${mem_limit}" \
--memory-reservation="${mem_reserve}" \
--cpu-shares=512 \
nginx
}
# 使用示例
configure_container_resources "web-server" "1.5" "512m" "256m"
Kubernetes Pod资源预留
YAML配置模板
# pod-resources.yaml
apiVersion: v1
kind: Pod
metadata:
name: resource-pod
spec:
containers:
- name: app-container
image: nginx
resources:
requests: # 资源预留(保证值)
memory: "256Mi"
cpu: "250m"
limits: # 资源限制(最大值)
memory: "512Mi"
cpu: "500m"
Shell脚本生成K8s配置
#!/bin/bash
# Kubernetes Pod资源预留脚本
create_resource_pod() {
local pod_name=$1
local cpu_request=$2
local mem_request=$3
local cpu_limit=$4
local mem_limit=$5
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: ${pod_name}
spec:
containers:
- name: app
image: nginx
resources:
requests:
memory: "${mem_request}"
cpu: "${cpu_request}"
limits:
memory: "${mem_limit}"
cpu: "${cpu_limit}"
EOF
}
# 部署示例
create_resource_pod "web-app" "250m" "256Mi" "500m" "512Mi"
批量部署脚本
#!/bin/bash
# 批量配置多个容器的资源预留
declare -A RESOURCES=(
["nginx-web"]="200m:256Mi:400m:512Mi"
["api-server"]="500m:512Mi:1:1Gi"
["cache-service"]="1:2Gi:2:4Gi"
)
for app_name in "${!RESOURCES[@]}"; do
IFS=':' read -r cpu_req mem_req cpu_lim mem_lim <<< "${RESOURCES[$app_name]}"
kubectl run "${app_name}" \
--image=nginx \
--requests="cpu=${cpu_req},memory=${mem_req}" \
--limits="cpu=${cpu_lim},memory=${mem_lim}"
done
资源监控和调整
#!/bin/bash
# 资源使用监控脚本
monitor_resources() {
local container_name=$1
echo "监控容器 ${container_name} 资源使用:"
docker stats "${container_name}" --no-stream
# 获取详细信息
echo "CPU 限制:"
docker inspect "${container_name}" | jq '.[0].HostConfig.NanoCpus'
echo "内存限制:"
docker inspect "${container_name}" | jq '.[0].HostConfig.Memory'
}
# 自动调整资源
auto_adjust_resources() {
local container_name=$1
local cpu_usage=$(docker stats "${container_name}" --no-stream --format "{{.CPUPerc}}" | sed 's/%//')
if (( $(echo "$cpu_usage > 80" | bc -l) )); then
echo "CPU使用率过高,增加资源..."
docker update --cpus="2" "${container_name}"
fi
}
最佳实践脚本
#!/bin/bash
# 综合资源管理脚本
set -e
# 配置参数
CONTAINER_NAME="production-app"
BASE_CPU="1"
BASE_MEM="512m"
RESERVE_MEM="256m"
MAX_CPU="2"
MAX_MEM="1g"
# 创建容器并配置资源预留
create_optimized_container() {
echo "开始配置容器资源预留..."
# 停止并删除已存在的容器
docker rm -f "${CONTAINER_NAME}" 2>/dev/null || true
# 启动容器并配置资源
docker run -d \
--name "${CONTAINER_NAME}" \
--cpus="${BASE_CPU}" \
--memory="${BASE_MEM}" \
--memory-reservation="${RESERVE_MEM}" \
--memory-swap="${MAX_MEM}" \
--cpu-shares=512 \
--restart=unless-stopped \
--log-opt max-size=10m \
--log-opt max-file=3 \
nginx
echo "容器 ${CONTAINER_NAME} 配置完成:"
echo " CPU 基础限制: ${BASE_CPU}"
echo " 内存限制: ${BASE_MEM}"
echo " 内存预留: ${RESERVE_MEM}"
}
# 验证配置
verify_configuration() {
echo "验证资源配置..."
docker inspect "${CONTAINER_NAME}" | jq '{
"容器名称": .[0].Name,
"CPU限制": (.[0].HostConfig.NanoCpus / 1e9 | tostring) + " 核心",
"内存限制": (.[0].HostConfig.Memory | tostring) + " 字节",
"内存预留": (.[0].HostConfig.MemoryReservation | tostring) + " 字节"
}'
}
# 执行
create_optimized_container
verify_configuration
注意事项
- 资源预留不是隔离:
--memory-reservation是软限制,当主机内存充足时才保证 - CPU预留技巧:使用
--cpu-shares设置权重,而不是绝对限制 - 监控很重要:定期检查实际使用情况,调整预留值
- Kubernetes QoS:通过 requests 和 limits 的组合实现不同 QoS 级别:
- Guaranteed:requests == limits
- Burstable:requests < limits
- BestEffort:不设置 requests 和 limits
这些脚本提供了从基础配置到高级管理的完整解决方案,可根据实际场景调整参数。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播