目录

Docker Compose介绍   有版本问题

一键生成 docker-compose.yml

docker官网镜像上传,及阿里云镜像上传

Docker 之分布式仓库 Harbor

Docker 之分布式仓库 Harbor

harbor的安装过程,及硬件要求

安装harbor    也可以单独安装

上传需求及过程

实现 Harbor 高可用

Harbor 安全 Https 配置

配置 Docker 客户端使用证书文件

Docker 的资源限制

OOM 优先级机制:

Stress-ng 压力测试工具

容器的内存限制

swap 限制

配置默认的CFS调度程序


Docker Compose介绍   有版本问题

别问我为啥每个新内容都要有介绍我怕我那天忘了这样 容易回想!

当在宿主机启动较多的容器时候,如果都是手动操作会觉得比较麻烦而且容易出错,此时推荐使用
docker 单机编排工具 docker-compose

docker-compose 是 docker 容器的一种单机编排服务,docker-compose 是一个管理多个容器的工
具,比如: 可以解决容器之间的依赖关系,就像启动一个nginx 前端服务的时候会调用后端的tomcat,那就得先启动tomcat,但是启动tomcat 容器还需要依赖数据库,那就还得先启动数据库,docker-compose 可以用来解决这样的嵌套依赖关系,并且可以替代docker命令对容器进行创建、启动和停止等手工的操作

因此,如果说docker命令就像linux的命令,docker compose就像shell脚本,可以自动的执行容器批量操作,从而实现自动化的容器管理,或者说docker命令相当于ansible命令,那么docker compose文件,就相当于ansible-playbook的yaml文件

docker-compose 项目是Docker 官方的开源项目,负责实现对Docker 容器集群的快速编排,docker-compose 将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)

github地址: https://github.com/docker/compose
官方地址: https://docs.docker.com/compose/

在线安装,通过pip安装
python-pip 包将安装一个 pip 的命令,pip 命令是一个python 安装包的安装工具,其类似于ubuntu 的apt 或者 redhat 的yum,但是pip 只安装 python 相关的安装包,可以在多种操作系统安装和使用pip此方式当前安装的版本较新,为docker_compose-1.25.3,推荐使

Ubuntu:
# apt update
# apt install -y python-pip
CentOS:
# yum install epel-release
# yum install -y python-pip
# pip install --upgrade pip

范例: 基于python3 安装 docker-compose

#配置加速
[root@ubuntu2004 ~]#mkdir ~/.pip
[root@ubuntu2004 ~]#cat > ~/.pip/pip.conf <<-EOF
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
EOF
[root@ubuntu2004 ~]#apt -y install python3-pip
[root@ubuntu2004 ~]#pip3 install --upgrade pip
[root@ubuntu2004 ~]#pip3 install docker-compose
[root@ubuntu2004 ~]#docker-compose --version
docker-compose version 1.27.4, build unknown
#基于python2安装docker-compose
[root@ubuntu1804 ~]#apt -y install python-pip
[root@ubuntu1804 ~]#pip install docker-compose
[root@ubuntu1804 ~]#docker-compose --version
docker-compose version 1.25.3, build unknown

 方法2: 在线直接从包仓库安装

此方法安装的版本较旧,不推荐使用

#ubuntu安装,此为默认版本
[root@ubuntu2004 ~]#apt -y install docker-compose
[root@ubuntu2004 ~]#docker-compose --version
docker-compose version 1.17.1, build unknown
#CentOS7安装,依赖EPEL源
[root@centos8 ~]#yum -y install docker-compose
[root@centos8 ~]#docker-compose --version
docker-compose version 1.18.0, buil 8dd22a9

查看命令格式

官方文档: https://docs.docker.com/compose/reference/

docker-compose --help
Define and run multi-container applications with Docker.
Usage:
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
docker-compose -h|--help
#选项说明:
-f,–file FILE #指定Compose 模板文件,默认为docker-compose.yml
-p,–project-name NAME #指定项目名称,默认将使用当前所在目录名称作为项目名。
--verbose #显示更多输出信息
--log-level LEVEL #定义日志级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL)
--no-ansi #不显示ANSI 控制字符
-v, --version #显示版本
#以下为命令选项,需要在docker-compose.yml|yaml 文件所在在目录里执行
config -q #查看当前配置,没有错误不输出任何信息  (检查错误)
up #创建并启动容器
build #构建镜像
bundle #从当前docker compose 文件生成一个以<当前目录>为名称的json格式的Docker Bundle 备
份文件
create #创建服务
down #停止和删除所有容器、网络、镜像和卷
events #从容器接收实时事件,可以指定json 日志格式
exec #进入指定容器进行操作
help #显示帮助细信息
images #显示镜像信息
kill #强制终止运行中的容器
logs #查看容器的日志
pause #暂停服务
port #查看端口
ps #列出容器
pull #重新拉取镜像,镜像发生变化后,需要重新拉取镜像
push #上传镜像
restart #重启服务
rm #删除已经停止的服务
run #一次性运行容器
scale #设置指定服务运行的容器个数,新版已废弃
start #启动服务
stop #停止服务
top #显示容器运行状态
unpause #取消暂定

一键生成 docker-compose.yml

利用网站将docker 命令自动生成 Docker Compse

Composerizehttps://www.composerize.com/

 抄过来自动转换

复制到脚本里直接跑起来

同事编译两个

docker官网镜像上传,及阿里云镜像上传

需要tag改下名字才行然不知道传哪里

按照丫的要求改标签

修改别名,登录。登录信息和docker的都是保存在一个文件里如图

Docker 之分布式仓库 Harbor

Docker 之分布式仓库 Harbor

  • 基于角色的访问控制: 用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限
  • 镜像复制: 镜像可在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景
  • 图形化用户界面: 用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间
  • AD/LDAP 支: Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理
  • 审计管理: 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理
  • 国际化: 已拥有中文、英文、德文、日文和俄文的本地化版本。更多的语言将会添加进来
  • RESTful API: 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易
  • 部署简单: 提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备

两台harbor高可用,防止单点

harbor的安装过程,及硬件要求       

docker
docker-compose
harbor
配置
启动harbor

harbor官方下载网站 可以跑脚本,嫌弃hardor太大的话可以在迅雷提前下好拉进来,既可以了

有darbor.service可以通过他启动和关闭

#!/bin/bash
#
#********************************************************************
#Author:            wangxiaochun
#QQ:                704318431
#Date:              2022-10-22
#FileName:          qwe.sh
#URL:               http://www.wzhsre.cn
#Description:       The test script
#Copyright (C):     2022 All rights reserved
#********************************************************************
HARBOR_VERSION=2.6.1
#HARBOR_VERSION=2.6.0
HARBOR_BASE=/apps
HARBOR_NAME=harbor.wei.org
#HARBOR_NAME=`hostname -I|awk '{print $1}'`DOCKER_VERSION="20.10.10"
#DOCKER_VERSION="19.03.14"
DOCKER_URL="http://mirrors.ustc.edu.cn"
#DOCKER_URL="https://mirrors.tuna.tsinghua.edu.cn"DOCKER_COMPOSE_VERSION=2.6.1
#DOCKER_COMPOSE_VERSION=1.29.2
DOCKER_COMPOSE_FILE=docker-compose-Linux-x86_64HARBOR_ADMIN_PASSWORD=123456HARBOR_IP=`hostname -I|awk '{print $1}'`COLOR_SUCCESS="echo -e \\033[1;32m"
COLOR_FAILURE="echo -e \\033[1;31m"
END="\033[m". /etc/os-release
UBUNTU_DOCKER_VERSION="5:${DOCKER_VERSION}~3-0~${ID}-${UBUNTU_CODENAME}"color () {RES_COL=60MOVE_TO_COL="echo -en \\033[${RES_COL}G"SETCOLOR_SUCCESS="echo -en \\033[1;32m"SETCOLOR_FAILURE="echo -en \\033[1;31m"SETCOLOR_WARNING="echo -en \\033[1;33m"SETCOLOR_NORMAL="echo -en \E[0m"echo -n "$1" && $MOVE_TO_COLecho -n "["if [ $2 = "success" -o $2 = "0" ] ;then${SETCOLOR_SUCCESS}echo -n $"  OK  "    elif [ $2 = "failure" -o $2 = "1"  ] ;then ${SETCOLOR_FAILURE}echo -n $"FAILED"else${SETCOLOR_WARNING}echo -n $"WARNING"fi${SETCOLOR_NORMAL}echo -n "]"echo
}install_docker(){if [ $ID = "centos" -o $ID = "rocky" ];thenif [ $VERSION_ID = "7" ];thencat >  /etc/yum.repos.d/docker.repo  <<EOF
[docker]
name=docker
gpgcheck=0
#baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/
baseurl=${DOCKER_URL}/docker-ce/linux/centos/7/x86_64/stable/
EOFelse     cat >  /etc/yum.repos.d/docker.repo  <<EOF
[docker]
name=docker
gpgcheck=0
#baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/8/x86_64/stable/
baseurl=${DOCKER_URL}/docker-ce/linux/centos/8/x86_64/stable/
EOFfiyum clean all ${COLOR_FAILURE} "Docker有以下版本"${END}yum list docker-ce --showduplicates${COLOR_FAILURE}"5秒后即将安装: docker-"${DOCKER_VERSION}" 版本....."${END}${COLOR_FAILURE}"如果想安装其它Docker版本,请按ctrl+c键退出,修改版本再执行"${END}sleep 5yum -y install docker-ce-$DOCKER_VERSION docker-ce-cli-$DOCKER_VERSION  \|| { color "Base,Extras的yum源失败,请检查yum源配置" 1;exit; }elsedpkg -s docker-ce &> /dev/null && $COLOR"Docker已安装,退出" 1 && exitapt update || { color "更新包索引失败" 1 ; exit 1; }  apt  -y install apt-transport-https ca-certificates curl software-properties-common || \{ color "安装相关包失败" 1 ; exit 2;  }  curl -fsSL ${DOCKER_URL}/docker-ce/linux/ubuntu/gpg | sudo apt-key add -add-apt-repository "deb [arch=amd64] ${DOCKER_URL}/docker-ce/linux/ubuntu $(lsb_release -cs) stable"apt update${COLOR_FAILURE} "Docker有以下版本"${END}apt-cache madison docker-ce${COLOR_FAILURE}"5秒后即将安装: docker-"${UBUNTU_DOCKER_VERSION}" 版本....."${END}${COLOR_FAILURE}"如果想安装其它Docker版本,请按ctrl+c键退出,修改版本再执行"${END}sleep 5apt -y  install docker-ce=${UBUNTU_DOCKER_VERSION} docker-ce-cli=${UBUNTU_DOCKER_VERSION}fiif [ $? -eq 0 ];thencolor "安装软件包成功"  0elsecolor "安装软件包失败,请检查网络配置" 1exitfimkdir -p /etc/dockertee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://si7y70hh.mirror.aliyuncs.com"],"insecure-registries": ["harbor.wang.org"]
}
EOFsystemctl daemon-reloadsystemctl enable dockersystemctl restart dockerdocker version && color "Docker 安装成功" 0 ||  color "Docker 安装失败" 1echo 'alias rmi="docker images -qa|xargs docker rmi -f"' >> ~/.bashrcecho 'alias rmc="docker ps -qa|xargs docker rm -f"' >> ~/.bashrc
}install_docker_compose(){if [ $ID = "centos" -o $ID = "rocky" ];then${COLOR_SUCCESS}"开始安装 Docker compose....."${END}sleep 1if [ ! -e  ${DOCKER_COMPOSE_FILE} ];then#curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/${DOCKER_COMPOSE_FILE} -o /usr/bin/docker-composecurl -L https://get.daocloud.io/docker/compose/releases/download/v${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m) -o /usr/bin/docker-composeelsemv ${DOCKER_COMPOSE_FILE} /usr/bin/docker-composefichmod +x /usr/bin/docker-composeelse apt -y install docker-composefiif docker-compose --version ;then${COLOR_SUCCESS}"Docker Compose 安装完成"${END} else${COLOR_FAILURE}"Docker compose 安装失败"${END}exitfi
}install_harbor(){${COLOR_SUCCESS}"开始安装 Harbor....."${END}sleep 1if  [ ! -e  harbor-offline-installer-v${HARBOR_VERSION}.tgz ] ;thenwget https://github.com/goharbor/harbor/releases/download/v${HARBOR_VERSION}/harbor-offline-installer-v${HARBOR_VERSION}.tgz || ${COLOR_FAILURE} "下载失败!" ${END}fi[ -d ${HARBOR_BASE} ] ||  mkdir ${HARBOR_BASE}tar xvf harbor-offline-installer-v${HARBOR_VERSION}.tgz  -C ${HARBOR_BASE}cd ${HARBOR_BASE}/harborcp harbor.yml.tmpl harbor.ymlsed -ri "/^hostname/s/reg.mydomain.com/${HARBOR_NAME}/" harbor.ymlsed -ri "/^https/s/(https:)/#\1/" harbor.ymlsed -ri "s/(port: 443)/#\1/" harbor.ymlsed -ri "/certificate:/s/(.*)/#\1/" harbor.ymlsed -ri "/private_key:/s/(.*)/#\1/" harbor.ymlsed -ri "s/Harbor12345/${HARBOR_ADMIN_PASSWORD}/" harbor.ymlsed -i 's#^data_volume: /data#data_volume: /data/harbor#' harbor.yml#mkdir -p /data/harbor${HARBOR_BASE}/harbor/install.sh && ${COLOR_SUCCESS}"Harbor 安装完成"${END} ||  ${COLOR_FAILURE}"Harbor 安装失败"${END}cat > /lib/systemd/system/harbor.service <<EOF
[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/bin/docker-compose -f  ${HARBOR_BASE}/harbor/docker-compose.yml up
ExecStop=/usr/bin/docker-compose -f ${HARBOR_BASE}/harbor/docker-compose.yml down[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload systemctl enable  harbor &>/dev/null ||  ${COLOR}"Harbor已配置为开机自动启动"${END}if [ $?  -eq 0 ];then  echo color "Harbor安装完成!" 0echo "-------------------------------------------------------------------"echo -e "请访问链接: \E[32;1mhttp://${HARBOR_IP}/\E[0m" echo -e "用户和密码: \E[32;1madmin/${HARBOR_ADMIN_PASSWORD}\E[0m" elsecolor "Harbor安装失败!" 1exitfiecho "$HARBOR_IP     $HARBOR_NAME"   >> /etc/hosts
}docker info  &> /dev/null  && ${COLOR_FAILURE}"Docker已安装"${END} || install_dockerdocker-compose --version &> /dev/null && ${COLOR_FAILURE}"Docker Compose已安装"${END} || install_docker_composeinstall_harbor

安装harbor    也可以单独安装

[root@rocky8 apps]#tar xf harbor-offline-installer-v2.5.3.tgz
[root@rocky8 harbor]# ./install.sh --with-trivy --with-chartmuseum

上传需求及过程

改成需要的名字,目前本人改的是本机ip

执行下prepare他就是把配置文件重新更新以下 systemctl restart harbor.service 重启一下下面就可以不用执行了

他把容器删掉重新加载一下,他有持久化,所以配置不会丢

相关命令

上传的话需要授权 列:两台机器的

[root@ubuntu2004 ~]# vim /etc/docker/daemon.json
{"registry-mirrors": ["https://si7y70hh.mirror.aliyuncs.com"],"insecure-registries": ["harbor.wai.org"],
"insecure-registries": ["10.0.0.100:80","10.0.0.102:80"] #说明: ":80"可省略
}[root@ubuntu2004 ~]#systemctl restart docker

docker info 查看是否配置成功

docker harbor上传镜像

拉去镜像,拉去镜像的话去需要在拉去的本机vim /etc/docker/daemon.json里做授权才行

启动加上传

实现 Harbor 高可用

10.0.0101

10.0.0.102

m50就是个名字,啥都行最好和项目名同名

新建规则

第一个名字随机,选择推,第二个目标仓库需要指定不能随你

10.0.0.102里面。啥也没有

在10.0.01里面的

10.0.0.101里面在复制管理里选中点击复制!!就过去了   老版写的很明白。新版这里就有点模糊了,我也是找了好久

列:

做完之后把两边改成从手动同步改成事件同步就可以实行高可用了    另一边就是重新做一遍

upstream harbor {hash $remote_addr;       #固定访问一个server 10.0.0.100;server 10.0.0.102;
}server {listen 1234;client_max_body_size 10G:  server_nam e harbor.wei.org;location / {proxy_pass http://harbor;}
}

Harbor 安全 Https 配置

基于安全考虑,生产建议采用 https 代替 http

生成 Harbor 服务器证书

#生成ca的私钥
openssl genrsa -out ca.key 4096

#生成ca的自签名证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
>  -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
>  -key ca.key \
>  -out ca.crt

#生成harbor主机的私钥
openssl genrsa -out yourdomain.com.key 4096

#生成harbor主机的证书申请
openssl req -sha512 -new \
>     -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
>     -key yourdomain.com.key \
>     -out yourdomain.com.csr

#创建x509 v3 扩展文件(新版新增加的要求)
cat > v3.ext <<-EOF
> authorityKeyIdentifier=keyid,issuer
> basicConstraints=CA:FALSE
> keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
> extendedKeyUsage = serverAuth
> subjectAltName = @alt_names

> [alt_names]
> DNS.1=yourdomain.com
> DNS.2=yourdomain
> DNS.3=hostname
> EOF

#给 harbor主机颁发证书
openssl x509 -req -sha512 -days 3650 \
>     -extfile v3.ext \
>     -CA ca.crt -CAkey ca.key -CAcreateserial \
>     -in yourdomain.com.csr \
>     -out yourdomain.com.crt

#最终文件列表如下
ca.crt  ca.key  ca.srl  v3.ext  yourdomain.com.crt  yourdomain.com.csr  yourdomain.com.key

在 vim /apps/harbor/harbor.yml里面把他改了就可以访问https了访问http也会自动跳转

 

配置 Docker 客户端使用证书文件

#转换harbor的crt证书文件为cert后缀,docker识别crt文件为CA证书,cert为客户端证书服务器,此步实际可选
openssl x509 -inform PEM -in harbor.wzh.org.crt -out harbor.wzh.org.cert
#或者
cp -a harbor.wzh.org.crt harbor.wzh.org.cert
#比较两个文件的不同,实际上是一样的
md5sum harbor.wzh.org.crt harbor.wzh.org.cert

#创建和harbor服务器同名的目录必须在docker的目录下差创建和服务端一样的域名
mkdir -pv /etc/docker/certs.d/harbor.wzh.cn/

#在docker客户端使用上面的证书文件
#注意:官方介绍需要同时复制harbor.wang.org.key ca.crt,实际不需要
cp harbor.wang.org.cert或harbor.wang.org.crt harbor.wang.org.key ca.crt
/etc/docker/certs.d/harbor.wang.org/

#实际只需要执行下面即可
cp harbor.wang.org.cert或harbor.wang.org.crt /etc/docker/certs.d/harbor.wang.org/
#新版如果无法登录,需重启docker服务     记得做hosts解析  
systemctl restart docker

Docker 的资源限制

默认情况下,容器没有资源的使用限制,可以使用主机内核调度程序允许的尽可能多的资源
Docker 提供了控制容器使用资源的方法,可以限制容器使用多少内存或 CPU等
docker run 命令的运行时指定相关参数即可实现资源限制功能。

选项 选项
-m , --memory= 容器可以使用的最大物理内存量,硬限制,此选项最小允许值为 4m (4MB),此项较常用
--memory-swap 允许此容器交换到磁盘的内存量,必须先用-m 对内存限制才可以使用,详细说明如下
--memory-swappiness 设置容器使用交换分区的倾向性,值越高表示越倾向于使用swap分区,范围为0-100,0为能不用就不用,100为能用就用,N表示内存使用率达到N%时,就会使用swap空间
--memory-
reservation
允许指定小于 --memory 的软限制 ,当 Docker 检测到主机上的争用或内存不足时会激活该限制,如果使用-- memory-reservation,则必须将其设置为低于 --memory 才能使其优先生效。 因为它是软限制,所以不能保证容器不超过限制
--kernel-memory 容器可以使用的最大内核内存量,最小为 4m,由于内核内存与用户空间内存隔离,因此无法与用户空间内存直接交换,因此内核内存不足的容器可能会阻塞宿主机资源,这会对主机和其他容器或者其他服务进程产生影响,因此不建议设置内核内存大小
--oom-kill-disable 默认情况下,如果发生内存不足(OOM)错误,则内核将终止容器中的进程。要更改此行为,请使用该 --oom-kill-disable 选项。建议仅在设置了该 -m/--memory 选项的容器上禁用OOM。如果 -m 未设置该标志,则主机可能会用完内存,内核可能需要终止主机系统的进程以释放内存

OOM 优先级机制:

linux会为每个进程计算一个分数,最终将分数最高的kill

/proc/PID/oom_score_adj
#范围为 -1000 到 1000,值越高容易被宿主机 kill掉,如果将该值设置为 -1000 ,则进程永远不会被宿主机 kernel kill

/proc/PID/oom_adj
#范围为 -17 到+15 ,取值越高越容易被干掉,如果是 -17 , 则表示不能被 kill ,该设置参数的存在是为了和旧版本的 Linux 内核兼容。

/proc/PID/oom_score
#这个值是系统综合进程的内存消耗量、 CPU 时间 (utime + 存活时间 (uptime - start time) 和oom_adj 计算出的进程得分 ,消耗内存越多得分越高,容易被宿主机 kernel 强制杀死

Stress-ng 压力测试工具

软件包方式安装

[root@centos8 ~]#yum -y install stress-ng
[root@ubuntu2004 ~]#apt -y install stress-ng

查看帮助 

docker run -it --rm lorel/docker-stress-ng

范例: 默认一个workers 分配256M内存,2个即占512M内存   #不指定默认256M  2进程

top命令不好看 可以用 docker stats --no-stream一次性进程100(叠加)docker stats(不停执行)

docker run --name c1 -it --rm lorel/docker-stress-ng --vm 2

内存限制200m

宿主机限制容器最大内存使用:    -m限制最大使用两百
[root@ubuntu1804 ~]#docker run -it --rm --name c1 -m 200M lorel/docker-stress-ng --vm 2 --vm-bytes 256M

其原理就是写入到这里面去

[root@ubuntu2004 ~]#echo 314572800 >
/sys/fs/cgroup/memory/docker/f69729b2acc16e032658a4efdab64d21ff97dcb6746d1cef451
ed82d5c98a81f/memory.limit_in_bytes

容器的内存限制

Docker 可以强制执行硬性内存限制,即只允许容器使用指定的内存大小。
Docker 也可以执行非硬性内存限制,即允许容器可以使用尽可能多的内存,除非内核检测到主机上的内存不够用

官文文档: https://docs.docker.com/config/containers/resource_constraints/、

以下设置大部分的选项为正整数,支持后面加单位 b , k , m , g ,分别表示字节,千字节,兆字节或千兆字节

swap 限制

在K8S中需要禁用swap,不然起不来

[root@rocky8 ~]#swapoff -a    #临时禁用
[root@rocky8 ~]#free -htotal        used        free      shared  buff/cache   available
Mem:          1.7Gi       326Mi       1.0Gi       8.0Mi       404Mi       1.3Gi
Swap:            0B          0B          0B
[root@rocky8 ~]#systemctl mask swap.target     #长期禁用
Created symlink /etc/systemd/system/swap.target → /dev/null.
[root@rocky8 ~]#reboot             #重启

配置默认的CFS调度程序

默认情况下,每个容器对主机的CPU周期的访问都是不受限制的。可以设置各种约束,以限制给定容器对主机CPU周期的访问。大多数用户使用并配置 默认的CFS调度程序。在Docker 1.13及更高版本中,还可以配置 realtime scheduler。
CFS是用于常规Linux进程的Linux内核CPU调度程序。通过几个运行时标志,可以配置对容器拥有的CPU资源的访问量。使用这些设置时,Docker会在主机上修改容器cgroup的设置

选项 描述
--cpus= 指定一个容器可以使用多少个可用的CPU核心资源。例如,如果主机有两个CPU,如果设置了 --cpus="1.5" ,则可以保证容器最多使用1.5个的CPU(如果是4核CPU,那么还可以是4核心上每核用一点,但是总计是1.5核心的CPU)。这相当于设置 --cpu-period="100000" 和 --cpu-quota="150000" 。此设置可在Docker 1.13及更高版本中可用,目的是替代--cpu-period和--cpu-quota两个参数,从而使配置更简单,但是最大不能超出宿主机的CPU总核心数(在操作系统看到的CPU超线程后的数值),此项较常用
--cpuset-
cpus
用于指定容器运行的 CPU 编号,也就是所谓的CPU绑定。如果一个或多个CPU,则容器可以使用逗号分隔的列表或用连字符分隔的CPU范围。第一个CPU的编号为0。有效值可能是 0-3 (使用第一,第二,第三和第四CPU)或1,3 (使用第二和第四CPU)
--cpu-shares 用于设置 cfs 中调度的相对最大比例权重,cpu-share 的值越高的容器,将会分得更多的时间片(宿主机多核 CPU 总数为 100%,假如容器 A 为1024,容器 B 为2048,那么容器 B 将最大是容器 A 的可用 CPU 的两倍 ),默认的时间片1024,最大 262144。这是一个软限制。注意:进程数要多个CPU的核数才能看到效果,此值不能设置太小

#占用4个CPU资源.但只是平均的使用CPU资源

[root@rocky8 ~]#docker run -it --rm --name c1 lorel/docker-stress-ng --cpu 4

#限制cpu的使用你申请4个只给你1.5,为每个CPU平摊

#docker run -it --rm --name c1 --cpus 1.5 lorel/docker-stress-ng --cpu 4

绑定CPU

#一般不建议绑在0号CPU上,因0号CPU一般会较忙

[root@ubuntu1804 ~]#docker run -it --rm --name c1 --cpus 1.5 --cpuset-cpus 2,4-5 lorel/docker-stress-ng --cpu 4

多个容器的CPU利用率比例  多用于权重

#注意:进程数要多于CPU的核数才能看到效果,如果两个容器使用的CPU总数不超过CPU实际的核心数,两个容器都显示400%

#同时开两个容器
[root@ubuntu1804 ~]#docker run -it --rm --name c1 --cpu-shares 1000
lorel/docker-stress-ng --cpu 4

[root@ubuntu1804 ~]#docker run -it --rm --name c2 --cpu-shares 500
lorel/docker-stress-ng --cpu 4

容器单机编排工具 Docker Compose,swap 限制,配置默认的CFS调度程序,Stress-ng 压力测试工具,docker官网镜像上传,及阿里云镜像上传,Docker 的资源限制相关推荐

  1. stress 压力测试工具

    ############################stress 压力测试工具 ############################为了测试服务器的负载情况,给大家推荐Stress这个压力测试 ...

  2. linux stress 工具,Linux压力测试工具stress的参数详解

    为了测试根据服务器的负载情况,给大家推荐下stress这个压力测试工具,具体安装方式就不说了,本文主要介绍下stress的命令参数,大家可以在环境上验证测试下. 参数说明: -? 显示帮助信息 -v ...

  3. 容器编排技术 -- Kubernetes 在 Namespace 中配置默认的CPU请求与限额

    容器编排技术 -- Kubernetes 在 Namespace 中配置默认的CPU请求与限额 1 Before you begin 2 创建一个命名空间 3 创建一个LimitRange和一个Pod ...

  4. lLinux 下 Stress 压力测试工具

    作者信息 邮箱:sijiayong000@163.com Q Q:601566386 Stress是什么 stress是一个linux下的压力测试工具,专门为那些想要测试自己的系统,完全高负荷和监督这 ...

  5. 微软压力测试工具 web application stress

    WEB服务器的压力测试工具~ 115808 2009年8月1日 lbimba 铜牌会员 这里给广大的煤油推荐一个web网站压力测试工具.它可以用来模拟多个用户操作网站,在程序投入运行时,可以用它来进行 ...

  6. SSL压力测试工具THC-SSL-DOS

    SSL压力测试工具THC-SSL-DOS SSL广泛应用安全加密和认证领域,如HTTPS.POP等服务.使用SSL,会加重服务器的负担.例如,在协商阶段,服务器的CPU开销是客户端的15倍.Kali ...

  7. 史上最详细阿里云服务器上Docker部署War包项目 实战每一步都带详细图解!!!

    史上最详细阿里云服务器上Docker部署War包项目 实战每一步都带详细图解!!! 部署jar 包方式: https://blog.csdn.net/weixin_45821811/article/d ...

  8. 网页游戏 服务器 性能测试工具,简单的压力测试工具

    都说电子产品有着"高消耗"."贬值快"的特点,笔记本可算是PC产品中二手"最不值钱"的代表.不过呢,并不是所有的笔记本二手都不值钱--游戏本 ...

  9. 10大主流压力测试工具推荐(转载)

    在移动应用和Web服务正式发布之前,除了进行必要的功能测试和安全测试,为了保证互联网产品的服务交付质量,往往还需要做压力/负载/性能测试.然而很多传统企业在试水互联网+的过程中,往往由于资源或产品迭代 ...

最新文章

  1. iframe,window,滚动栏的一些问题
  2. oracle12c不能进入到http://localhost:1158/em的解决办法
  3. java:BIO, NIO
  4. Jenkins中构建时提示:Couldn‘t find any revision to build. Verify the repository and branch config
  5. 一起用C#做个五子棋的小游戏 增加了程序对战功能
  6. 初步认识Volatile-总结可见性的本质
  7. DeepEarth更新到Silverlight 4了
  8. 使用蓝图构建Flask项目目录
  9. SAP License:SAP顾问面试问题
  10. NFS还是iSCSI?关于VMware vSphere的存储连接的选择题
  11. Linux指定jre运行jar包,Linux如何运行和停止jar包
  12. 线程池的使用以及其工具类的封装
  13. Undefined variable 'raw_input'pylint(undefined-variable)
  14. oracle连接ORA-01017、ORA-12640
  15. C++编程实现进程调度算法(FCFS+RR)
  16. CentOS dstat 命令详解(二)参数详解
  17. PMP第六节:项目进度管理
  18. 蓝牙Beacon室内定位全栈
  19. screenX、clientX、pageX三者间的区别
  20. 初识:神经网络(Neural Networks)

热门文章

  1. SOA带来的性能思考
  2. 湖北武汉机械员报考机械员培训改革的三大变化建筑七大员报考
  3. 湖北武汉机械员证书机械设备管理制度的重要性建筑七大员培训
  4. javaOptional-习题
  5. MySQL查询耗时多久算慢SQL_sql优化之慢sql耗时排查
  6. c语言大作业书店图书管理系统,C语言_课程设计—书店图书管理系统.doc
  7. 计算机打印要先安装驱动吗,打印机驱动怎么安装,教您打印机驱动怎么安装
  8. MLX90640 红外热成像仪测温传感器 手机 APP 软件 RedEye 连接详细
  9. 实战Go语言:多人聊天室-欧阳桫-专题视频课程
  10. 别再回来了!GandCrab勒索软件最终版本解密工具降世