dayi的小键盘 - 2023年11月
type: channel
link: https://type.dayiyi.top/index.php/2023/11/
description: 啪 咔嚓 biu！
items: SDN作业2 Open vSwitch 应用实践1
items: SDN 作业1
items: 云与虚拟化：实验2 Docker镜像常用命令的使用
items: 云与虚拟化_14_K8S
items: 云与虚拟化_实验12 Rancher平台部署应用
items: 云与虚拟化_实验10 Compose编排工具应用
items: 云与虚拟化_实验7 Docker网络管理应用
items: 云与虚拟化_实验9 Docker数据卷和数据卷容器应用
items: 云与虚拟化_实验8 利用Docker实现容器互连
items: 云与虚拟化_虚拟化和容器——6 Docker资源控制

SDN作业2 Open vSwitch 应用实践1
type: item
date: 2023-11-30T18:56:00+08:00
description: SDN作业2 Open vSwitch 应用实践1本文地址：https://type.dayiyi.top/index.php/archives/292/https://blog.dayi.ink/?p=162https://www.cnblogs.com/rabbit-dayi/p/17868059.htmlhttps://cmd.dayi.ink/ltQtj5aOSi-x2Xc6xOuHGg本实验均在root用户下进行如果失败了，可能是OVS的问题，请参考文章末尾su sudo su预制启动OVS服务ovs-ctl start然后想法开两个shell任务1先清空下终端1：mn -c mn终端2（另外开一个终端）：ovs-ofctl dump-flows s1没有流表：PingALL#CLI 终端1 mininet> pingall *** Ping: testing ping reachability h1 -> h2 h2 -> h1 *** Results: 0% dropped (2/2 received) mininet> 查看流表：#终端2 ovs-ofctl dump-flows s1建立拓扑# 终端1 # 清理并且建立 1个交换机4个主机 mn -c && mn --topo single,4查看流表# 终端2 # 查看流表 ovs-ofctl dump-flows s1 #这里应该是空的<!-- ### 设置IP更新内容mininet> h1 ifconfig h1-eth0 10.0.0.1 mininet> h2 ifconfig h2-eth0 10.0.0.2 mininet> h3 ifconfig h3-eth0 10.0.0.3 mininet> h4 ifconfig h4-eth0 10.0.0.4PINGALL#终端1 mininet> pingall *** Ping: testing ping reachability h1 -> h2 h3 h4 h2 -> h1 h3 h4 h3 -> h1 h2 h4 h4 -> h1 h2 h3 *** Results: 0% dropped (12/12 received) mininet>这里全部可以PING通查看目前的流表：#终端2 root@ubuntu:/home/sdn# ovs-ofctl dump-flows s1 cookie=0x0, duration=55.843s, table=0, n_packets=0, n_bytes=0, idle_timeout=60, priority=65535,arp,in_port="s1-eth2",vlan_tci=0x0000,dl_src=22:87:c2:36:ab:33,dl_dst=ca:76:64:1b:37:77,arp_spa=10.0.0.2,arp_tpa=10.0.0.1,arp_op=2 actions=output:"s1-eth1" cookie=0x0, duration=55.841s, table=0, n_packets=0, n_bytes=0, idle_timeout=60, priority=65535,arp,in_port="s1-eth3",vlan_tci=0x0000,dl_src=12:18:0f:59:6d:59,dl_dst=ca:76:64:1b:37:77,arp_spa=10.0.0.3,arp_tpa=10.0.0.1,arp_op=2 actions=output:"s1-eth1" cookie=0x0, duration=55.839s, table=0, n_packets=0, n_bytes=0, idle_timeout=60, priority=65535,arp,in_port="s1-eth4",vlan_tci=0x0000,dl_src=c2:4d:1b:f3:02:51,dl_dst=ca:76:64:1b:37:77,arp_spa=10.0.0.4,arp_tpa=10.0.0.1,arp_op=2 actions=output:"s1-eth1" cookie=0x0, duration=55.836s, table=0, n_packets=0, n_bytes=0, idle_timeout=60, priority=65535,arp,in_port="s1-eth3",vlan_tci=0x0000,dl_src=12:18:0f:59:6d:59,dl_dst=22:87:c2:36:ab:33,arp_spa=10.0.0.3,arp_tpa=10.0.0.2,arp_…

SDN 作业1
type: item
date: 2023-11-28T23:50:00+08:00
description: SDN 作业1任务：要求1、将代码上传作业 2、用python3运行代码，使用cli实现pingall、nodes、net、dump iperf h1 h2等命令更好阅读：https://type.dayiyi.top/index.php/archives/284/https://https://blog.dayi.ink/?p=150可能仍然有BUG，请反馈。打开虚拟机我这里打开的是Ubuntu_20.04_sdn_ovs-2.17.8-LTS这个虚拟机。具体的文件在群文件中打开miniedit.pysudo python2 /opt/sdn/mininet/examples/miniedit.py画图照着图画一个，然后连起来即可。设置IP右键这个主机，然后选properties分别设置IP地址即可。设置链路速率右键这个线，然后选properties然后参数这样设置：100,5ms设置，进入CLI模式Edit->Preferences->Start CLICLI：保存文件这里记得存两份，保存出的python文件是不能再变成图片的！保存mnFile->Save导出python文件导出Level 2 Script另外，这里导出到过程不应该出现报错这里不应该有python报错。运行测试进入导出文件的目录，我这里是/home/sdn运行：python3 ovo.py测试 PING（4，5交换机未连接控制器）# 在mn的CLI下 net.pingall() pingall()因为那个没连接控制器，所以会ping不通，只有部分可以通。测试PING（4/5连接控制器）mininet> pingall *** Ping: testing ping reachability h6 -> h8 h1 h5 h4 h2 h3 h7 h8 -> h6 h1 h5 h4 h2 h3 h7 h1 -> h6 h8 h5 h4 h2 h3 h7 h5 -> h6 h8 h1 h4 h2 h3 h7 h4 -> h6 h8 h1 h5 h2 h3 h7 h2 -> h6 h8 h1 h5 h4 h3 h7 h3 -> h6 h8 h1 h5 h4 h2 h7 h7 -> h6 h8 h1 h5 h4 h2 h3 *** Results: 0% dropped (56/56 received) mininet>测试延迟：20ms（去5ms，回来5ms）mininet> h1 ping h2 PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. 64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=46.7 ms 64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=23.4 ms 64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=21.9 ms 64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=22.5 ms 64 bytes from 10.0.0.2: icmp_seq=5 ttl=64 time=23.1 ms 64 bytes from 10.0.0.2: icmp_seq=6 ttl=64 time=22.9 ms 64 bytes from 10.0.0.2: icmp_seq=7 ttl=64 time=23.8 ms ^C --- 10.0.0.2 ping statistics --- 7 packets transmitted, 7 received, 0% packet loss, time 6007ms rtt min/avg/max/mdev = 21.987/26.393/46.792/8.345 ms mininet>nodesnodes结果：mininet> nodes available nodes are: c0 h1 h2 h3 h4 h5 h6 h7 h8 s1 s2 s3 s4 s5 mininet>netnetmininet> net h7 h7-eth0:s3-eth2 h3 h3-eth0:s4-eth2 h4 h4-eth0:s4-eth3 h5 h5-eth0:s5-eth2 h1 h1-eth0:s1-eth1 h8 h8-eth0:s3-eth3 h6 h6-eth0:s5-eth3 h2 h2-eth0:s1-eth2 s2 lo: s2-eth1:s1-eth3 s2-eth2:s3-eth1 s2-eth3:s4-eth1 s2-eth4:s5-eth1 s4 lo: s4-eth1:s2-e…

云与虚拟化：实验2 Docker镜像常用命令的使用
type: item
date: 2023-11-23T14:27:47+08:00
description: 云与虚拟化：实验2 Docker镜像常用命令的使用实验要求了解Docker镜像，掌握Docker镜像常用命令的使用。前置准备要求实验主机能够连接外网，已经正确安装Docker，并关闭防火墙和selinux。实验步骤步骤1：拉取nginx:latest、busybox:latest和centos:latest镜像docker pull centos:latest docker pull nginx:latest docker pull busybox:latest步骤2：列出所有本地镜像docker images步骤3：搜索收藏数不小于5的redhat镜像，并且完整显示镜像描述信息docker search -s 5 --no-trunc redhat docker search --filter stars=5 redhat其他的命令也可以哦curl -s "https://registry.hub.docker.com/v2/repositories/redhat/" | jq '.results[] | select(.pull_count >= 5) | .description'步骤4：拉取收藏数是高的redhat镜像docker pull redhat/ubi8步骤5：将redhat镜像标签名修改为redhat:v8.0docker tag redhat/ubi8:latest redhat:v8.0步骤6：将nginx:latest镜像导出，命名为nginx.tardocker save -o nginx.tar nginx:latest步骤7：删除nginx:latest镜像，并运行docker images命令查看docker rmi -f nginx:latest步骤8：将nginx.tar导入，并运行docker images命令查看docker load --input nginx.tar docker images步骤9：删除本地主机中所有的镜像，要求逐一删除docker rmi nginx:latest docker rmi busybox:latest docker rmi centos:latest docker rmi redhat:v7.0 docker rmi hjd48/redhat:latest docker rm -v $(docker ps -aq -f status=created) docker rm -v $(docker ps -aq -f status=exited)这里还有两个冲突：

云与虚拟化_14_K8S
type: item
date: 2023-11-23T13:29:32+08:00
description: K8SK8S部署先创建一个debian模板选择iso快速安装一下即可：安装完成克隆成模板：Master节点直接克隆一个就可以克隆两个本地nodesed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources sed -i 's|security.debian.org/debian-security|mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list echo "export PATH=$PATH:/usr/sbin:/home/$(whoami)/.local/bin" >> ~/.bashrc source ~/.bashrc apt install ufw apt install sudo vim wget curl -y sudo hostnamectl set-hostname dayi-cloud-k8s-master 这里HOSTS用了tailscile 来进行相互访问curl -fsSL https://tailscale.com/install.sh | sh这样就配好hosts了dayi-cloud-k8s-master dayi-cloud-k8s-node1 dayi-cloud-k8s-node2Mastersudo ufw allow 6443/tcp sudo ufw allow 2379/tcp sudo ufw allow 2380/tcp sudo ufw allow 10250/tcp sudo ufw allow 10251/tcp sudo ufw allow 10252/tcp sudo ufw allow 10255/tcp sudo ufw reload cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF sudo sysctl --systemOthersudo ufw allow 10250/tcp sudo ufw allow 30000:32767/tcp sudo ufw reload cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF sudo sysctl --systemSSH-密钥复制mkdir ~/.ssh echo "ssh-rsa [binary] root@dayi-cloud-k8s-maste" >> ~/.ssh/authorized_keys 安装containerdapt install containerd containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1 sudo vi /etc/containerd/config.toml scp /etc/containerd/config.toml dayi-cloud-k8s-node1:/etc/containerd/config.toml scp /etc/containerd/config.toml dayi-cloud-k8s-node2:/etc/containerd/config.toml sudo systemctl restart containerd sudo systemctl enable containerd安装K8S仓库 sudo…

云与虚拟化_实验12 Rancher平台部署应用
type: item
date: 2023-11-23T13:26:17+08:00
description: 云与虚拟化_实验12 Rancher平台部署应用实验要求掌握 Rancher 平台部署。前置准备要求实验主机能够连接外网，已经正确安装 Docker，并关闭防火墙和 selinux。实验步骤这个东西蛮大的。docker pull rancher/rancher:stable docker run -d --restart=unless-stopped --privileged -p 8443:443 rancher/rancher:stableFRP:FRP：进入：加入：节点添加：步骤1：拉取 Rancher 镜像。[root@localhost ~]# docker pull rancher/server:stable步骤2：利用 Rancher 镜像生成 Rancher 容器。[root@localhost ~]# docker run -d --restart=unless-stopped -p 8080:8080 rancher/server:stable主机上复制 Rancher 脚本代码。[root@localhost ~]# sudo docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11 http://192.168.5.100:8080/v1/scripts/33363BDEA2105F76C889:1577750400000:7pDzaq5dOUcHCFdLqfZ2lyvGex0步骤11：添加主机成功。移动窗口底部，点击“创建”按钮。不过..更新也容易卡住..好像不是很稳定的样子..

云与虚拟化_实验10 Compose编排工具应用
type: item
date: 2023-11-23T13:24:29+08:00
description: 云与虚拟化_实验10 Compose编排工具应用实验要求掌握Compose编排工具的安装和使用。前置准备要求实验主机能够连接外网，已经正确安装Docker ce，版本号为18.03.0-ce，并关闭防火墙和selinux。实验步骤步骤1：安装Compose编排工具直接用docker官方安装源代的插件也可以滴！测试安装结果。root@registry:/home/dayi# root@registry:/home/dayi# find / -name docker-compose /usr/libexec/docker/cli-plugins/docker-compose root@registry:/home/dayi# ln -s /usr/libexec/docker/cli-plugins/docker-compose /bin/docker-compose root@registry:/home/dayi# docker-compose --version Docker Compose version v2.21.0 root@registry:/home/dayi# 步骤2：编排启动镜像创建文件目录。[root@docker01 ~]# mkdir /opt/my_wordpress/ [root@docker01 ~]# cd /opt/my_wordpress/编写编排文件。[root@docker01 my_wordpress]# vi docker-compose.ymlversion: '3' services: db: image: mysql:5.7 volumes: - /data/db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress ports: - "3306:3306" wordpress: depends_on: - db image: wordpress:latest volumes: - /data/web_data:/var/www/html ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress启动。[root@docker01 my_wordpress]# docker-compose up -d # 启动方法：docker-compose up # 后台启动方法：docker-compose up -d在浏览器上访问http://192.168.5.100:8000，进行WordPress的安装即可。删库跑路

云与虚拟化_实验7 Docker网络管理应用
type: item
date: 2023-11-23T13:19:39+08:00
description: 云与虚拟化_实验7 Docker网络管理应用实验要求了解Docker常用网络模式，掌握Docker常用网络模式的使用。本实验主要任务是利用busybox镜像建立容器，容器名称为test_busybox1和test_busybox2，将网络模式设置为none，并为容器配置IP地址，容器test_busybox1的IP设置为172.17.0.100，容器test_busybox2的IP设置为172.17.0.200，要求实现两容器互通。前置准备要求实验主机能够连接外网，已经正确安装Docker，并关闭防火墙和selinux。实验过程步骤1-3# 步骤1.1: 创建容器test_busybox1，设置网络模式为none docker run -dit --name=test_busybox1 --net=none busybox:latest # 进入容器test_busybox1 docker exec -it test_busybox1 /bin/sh # 步骤1.2: 查看IP地址（容器test_busybox1） ip addr # 从现象可以得知容器test_busybox1没有IP地址。 # 退出容器test_busybox1 exit# 步骤2.1: 创建容器test_busybox2，设置网络模式为none docker run -dit --name test_busybox2 --net=none busybox:latest # 进入容器test_busybox2 docker exec -it test_busybox2 /bin/sh # 步骤2.2: 查看IP地址（容器test_busybox2） ip address # 退出容器test_busybox2 exit从现象可以得知容器test_busybox1,test_busybox2都没有IP地址。步骤4# 步骤3: 为容器test_busybox1设置IP地址为172.17.0.100 # 安装bridge-utils软件包 yum -y install bridge-utils # 创建veth对，并将veth0加入docker0网桥 ip link add veth0 type veth peer name veth1 # 虚拟网桥 peer的name brctl addif docker0 veth0 # 桥接管理器 添加 管理桥接 brctl show # 启动veth0，原神启动 (另外一个veth1也会自动启动) ip link set veth0 up # 获取容器test_busybox1的PID pid1=$(docker inspect -f '{{.State.Pid}}' test_busybox1) echo "容器test_busybox1的PID是：$pid1" #有两种途径索引network namespace：名字（例如netns1）或者属于该namespace的进程PID。 #使用命名（Name）：为网络命名空间分配可读的名称，然后使用该名称来引用和操作命名空间。这使得管理网络命名空间更加方便和直观。 #使用进程PID：每个网络命名空间都与一个进程相关联，通常是一个子进程。可以使用该进程的PID来访问和管理与之关联的网络命名空间。 # 创建network namespace软连接 mkdir -p /var/run/netns ln -s /proc/$pid1/ns/net /var/run/netns/$pid1 ip netns ls # 将veth1连接到容器test_busybox1的network namespace，并重命名为eth0 ip link set veth1 netns $pid1 ip netns exec $pid1 ip link set dev veth1 name eth0 # 启用eth0 ip netns exec $pid1 ip link set eth0 up # 分配IP地址和设置网关 ip netns exec $pid1 ip addr add 172.17.0.100/24 dev eth0 ip netns exec $pid1 ip route add default via 172.17.0.1安装包：网桥：veth0启动：PID:Docker State信息.Id: 容器的唯一标识符，通常是一个长字符串，也被称为容器ID。.Name: 容器的名称，通常是用户定义的名称，可以用来引用容器。.State.Status: 容器的状态，如运行中、停止等。.State.Running: 表示容器是否正在运行（布尔值）。.State.Pid: 容器内部主进程的PI…

云与虚拟化_实验9 Docker数据卷和数据卷容器应用
type: item
date: 2023-11-23T13:18:00+08:00
description: 云与虚拟化_实验9 Docker数据卷和数据卷容器应用实验要求掌握Docker数据卷和数据卷容器使用方法。前置准备要求实验主机能够连接外网，已经正确安装Docker，并关闭防火墙和selinux。实验步骤步骤1：创建数据卷创建容器，为容器添加一个数据卷，容器名为mycentos，数据卷在容器里的目录是/opt/data。[root@master ~]# docker pull centos:7 // 拉取所需镜像 [root@master ~]# docker run -it --name mycentos -v /opt/data centos:7 /bin/bash [root@7908b98ed9e6 /]# cd /opt/data [root@7908b98ed9e6 data]# echo "centos1">centos1 [root@7908b98ed9e6 data]# echo "centos2">centos2 [root@7908b98ed9e6 data]# ls centos1 centos2新建一个终端，连接到主机，在主机上查看容器对应数据卷的目录路径。[root@master ~]# docker inspect mycentos|grep /var/lib/docker/volumes "Source": "/var/lib/docker/volumes/ceb3146a0edcbe16a525bff78f06ae9169b471459678695db8155a14e629cbb0/_data", [root@master ~]# ls /var/lib/docker/volumes/ceb3146a0edcbe16a525bff78f06ae9169b471459678695db8155a14e629cbb0/_data centos1 centos2 [root@master ~]# echo "123" >> /var/lib/docker/volumes/ceb3146a0edcbe16a525bff78f06ae9169b471459678695db8155a14e629cbb0/_data/123root@dayi-cloud-k8s-master:/home/dayi# docker inspect mycentos|grep /var/lib/docker/volumes "Source": "/var/lib/docker/volumes/bd8e9cc17f888e8ecda307c6040aae00a8b17b7de051ec4064e83477fe26d923/_data", root@dayi-cloud-k8s-master:/home/dayi# 在mycentos容器中再次查看目录信息。[root@6d7542b2ab36 data]# ls 123 centos1 centos2 [root@6d7542b2ab36 data]# cat 123 123 [root@6d7542b2ab36 data]# 步骤2：挂载宿主机文件或目录到容器数据卷建立容器，将容器里挂载的共享数据设置为只读，以使数据修改只能在宿主机上操作。[root@master ~]# docker run -it --name mynginx -v /root/index.html:/myweb/index.html:ro nginx /bin/bash root@3feb79f12fb3:/# cd /myweb/ root@3feb79f12fb3:/myweb# echo "123">index.html //写入数据 bash: index.html: Read-only file system //只读，无法写入噗，成目录了。这样就可以啦：echo " ovo " >>/opt/index.html && docker run -it --name mynginx2 -v /opt/index.html:/myweb/index.html:ro nginx /bin/bash root@registry:/home/dayi# echo " ovo " >>/opt/index.html && docker run -it --name mynginx2 -v /opt/index.html:/myweb/index.html:ro nginx /bin/bash root@2dc277e6ec93:/# cd m media/ mnt/ myweb/ root@2dc277e6ec93:/# cd myweb/ root@2dc277e6ec93:/myweb# ls index…

云与虚拟化_实验8 利用Docker实现容器互连
type: item
date: 2023-11-23T13:17:11+08:00
description: 云与虚拟化_实验8 利用Docker实现容器互连主机名IP地址/子网掩码容器名容器IP地址node-a192.168.59.128/24node1_busybox172.100.0.10node-b192.168.59.130/24node2_busybox172.100.1.101. 需要两个虚拟机克隆一个OVO具体的机子：node-anode-b#修改克隆机子的主机名 vim /etc/hostname reboot查看IP地址ip addr我这里两个机子的IP：192.168.59.128 node-a192.168.59.130 node-b步骤1-4node-a上创建网桥和容器# 创建自定义网桥，并分配网段172.100.0.0/24 docker network create --subnet=172.100.0.0/24 node1-br0 # 查看网桥信息 docker network inspect node1-br0 # 启动一个容器，并设置IP地址为172.100.0.10/24 docker run -itd --net=node1-br0 --ip=172.100.0.10 --name node1_busybox busybox # 查看容器的IP docker exec -it node1_busybox ip addr # 测试容器和网桥是否能通 docker exec -it node1_busybox ping -c 4 172.100.0.1node-b 上创建网桥和容器# 创建自定义网桥，并分配网段172.100.1.0/24 docker network create --subnet=172.100.1.0/24 node2-br0 # 查看网桥信息 docker network inspect node2-br0 # 启动一个容器，并设置IP地址为172.100.1.10/24 docker run -itd --net=node2-br0 --ip=172.100.1.10 --name node2_busybox busybox # 查看容器的IP docker exec -it node2_busybox ip addr # 测试容器和网桥是否能通 docker exec -it node2_busybox ping -c 4 172.100.1.1测试两个容器之间是否可以相通结果应该是不通！node-adocker exec -it node1_busybox ping -c 4 172.100.1.10node-bdocker exec -it node2_busybox ping -c 4 172.100.0.10蚌埠，通了，真蚌埠住了（因为这个公网IP，主机开了tun的网卡，然后就通了）关掉tun网卡：这样是正常的:然后这个通了（但通的是一个美国的机子，这次实验的ip是公网IP，172的IP只有部分（0-31）是公网）：步骤5在node-a节点和node-b节点上配置路由表和iptable规则。把iptables全部清除了之后加了个路由表。node-a#添加路由表 ip route add 172.100.1.0/24 via 192.168.59.130 dev ens33 # 清除iptables规则，并设置默认策略为接受 iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -F iptables -L -nnode-bip route add 172.100.1.0/24 via 192.168.59.128 dev ens33 # 清除iptables规则，并设置默认策略为接受 iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -F iptables -L -n步骤6 再次测试node1节点上的node1-busybox容器与node2节点上的node2-busybox容器与是否可以连通。在node1节点上进行测试。ping -c 4 172.100.1.10 PING 172.100.1.10 (172.100.1.10): 56 data bytes 64 bytes from 172.100.1.10: seq=0 ttl=62 time=12.601 ms通啦

云与虚拟化_虚拟化和容器——6 Docker资源控制
type: item
date: 2023-11-23T13:15:57+08:00
description: 云与虚拟化_虚拟化和容器——6 Docker资源控制基于cgroupshttps://tech.meituan.com/2015/03/31/cgroups.html1. 对CPU的控制步骤1：限制CPU命令速率。（1）利用centos:7镜像分别生成容器名为centos1和centos2的容器，其中centos1容器不限制cpu的使用率，centos2容器将cpu的使用率限制为20%。docker pull centos:7 docker run -dit --name centos1 centos:7 /bin/bash # 限制CPU百分之20000 docker run -dit --name centos2 --cpu-quota 20000 centos:7 /bin/bash100000微秒020000只能使用百分之20--cpu-quota 20000: --cpu-quota定义了容器每--cpu-period（默认为100000微秒，即100ms）可以获得的最大CPU时间，单位为微秒。--cpu-quota 20000意味着在默认的100ms周期中，容器最多只能使用20ms的CPU时间。（2）通过查看对应的cgroup配置文件 /sys/fs/cgroup/cpu/docker/容器编号/cpu.cfs_quota_us来查看各容器cpu的使用率。#这里是你的容器名 cat /sys/fs/cgroup/cpu/docker/86ff33795a71f86236011598c9cbaea55c4a319bd142e6ffb845e055d4db4fd9/cpu.cfs_quota_us没限制的（-1）（3）如需修改对应容器的cpu使用率，可以直接修改cgroup配置文件 /sys/fs/cgroup/cpu/docker/容器编号/cpu.cfs_quota_us的值来实现。修改占用为百分之40echo 40000 >> /sys/fs/cgroup/cpu/docker/9b19d5677dd03ad0f0f4bd3eee7659b7845fb34e78e42e819f21b6338fdc6342/cpu.cfs_quota_us cat /sys/fs/cgroup/cpu/docker/9b19d5677dd03ad0f0f4bd3eee7659b7845fb34e78e42e819f21b6338fdc6342/cpu.cfs_quota_us这里虽然是追加写，但是并不会追加，linux都是文件，估计是直接内核交互了。？删掉这俩实验容器docker rm -f centos1 centos2步骤2：多任务按比例分享CPU(1)利用centos:7镜像创建centos3和centos4容器。设置容器权重，使用centos3和centos4的cpu占比为33.3%和66.7% 。docker run -dit --name=centos3 --cpu-shares 512 centos:7 /bin/bash docker run -dit --name=centos4 --cpu-shares 1024 centos:7 /bin/bashdocker ps -a（2）打开另一个终端，使用docker stats命令查看状态。docker stats（3）分别打开两个终端，利用两个终端分别进行centos1和centos2容器，安装压力测试包stress。（4）分别在两个容器内启用4个线程。容器3#进入容器 docker exec -it centos3 /bin/bash yum -y install epel-release yum -y install stress stress -c 4容器4docker exec -it centos4 /bin/bash yum -y install epel-release yum -y install stress stress -c 4（5）再次利用docker stats命令查看。还是挺准的132/(66+132)=0.666666666667步骤3： 查看cpu内核使用通过查看Cgroup配置文件为/sys/fs/cgroup/cpuset/docker/容器编号/cpuset.cpus。1.CPU限制这个没有文件诶。应该是默认没有启用docker run -dit --cpuset-cpus="0,1" --name my_container nginx 这样就有啦[root@node-a cpuset]# cd docker/8aae2d1e6621d076570cb4e9fc10d099a46475f25add3440848ec1bd243…