首页 文章 精选 留言 我的

精选列表

搜索[Bot管理],共10000篇文章
优秀的个人博客,低调大师

docker管理神器—kubernetes—直接路由篇

一般情况下,两个node之间并不能通信,现在使用直连路由加Quagga的方式实现不同Node节点间的pod互联。 4.1、修改docker0的ip地址 在minion1上 #ifconfig docker0 10.1.10.1/24 修改docker配置文件 vi/etc/sysconfig/docker 添加: OPTIONS='--bip=10.1.10.1/24' 重启 systemctl restart docker 在centos-minion01上添加到centos-minion2的路由 route add -net 10.1.20.0 netmask 255.255.255.0 gw 192.168.137.100 在centos-minion02上, 添加到centos-minion01路由 route add -net 10.1.10.0 netmask 255.255.255.0 gw 192.168.137.101 (我这里因为只用了一个minion,所以直接使用master测试) 4.2、使用Quagga动态添加路由 为了减少手工添加路由,可以使用Quagga实现路由规则的动态添加。为简单起见,我们使用docker镜像。 #docker pull index.alauda.cn/georce/router 在每个node上启动容器 Quagga需要以–privileged特权模式运行,并且指定–net=host,表示直接使用物理机的网络。 #docker run -itd --name=router --privileged --net=host index.alauda.cn/georce/router 启动成功后,Quagga会相互学习来完成到其他机器的docker0路由规则的添加。 # route -n 测试: # ping 10.1.10.1 本文转自 sykmiao 51CTO博客,原文链接:http://blog.51cto.com/syklinux/1860298,如需转载请自行联系原作者

优秀的个人博客,低调大师

docker管理神器—kubernetes—flannel网络篇

5.1、flannel介绍 flannel 是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络 (overlay network) 工具,其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。Kubernetes 会为每一个 POD 分配一个独立的 IP 地址,这样便于同一个 POD 中的 Containers 彼此连接,flannel通过在集群中创建一个覆盖网格网络 (overlay mesh network) 为主机设定一个子网。 5.2、etcd设置 5.2.1、设置fannel网络段 # etcdctl set /coreos.com/network/config '{"Network":"10.2.0.0/16"}' 5.2.2、修改配置文件 把/etc/etcd/etcd.conf里的ETCD_LISTEN_CLIENT_URLS=”http://localhost:2379″中的locahost改为0.0.0.0 5.3、flannel安装配置(所有node节点都需要安装) 5.3.1、wgethttps://github.com/coreos/flannel/releases/download/v0.5.5/flannel-0.5.5-linux-amd64.tar.gz 5.3.2、tar -xzvf flannel-0.5.5-linux-amd64.tar.gz 5.3.3、安装 直接复制解压出来的两个文件到可执行目录就可以 #cp flannel-0.5.5/flanneld /usr/bin #cp flannel-0.5.5/mk-docker-opts.sh /usr/bin 5.3.4、配置 vi/etc/sysconfig/flanneld 添加: # Flanneld configuration options # etcd url location FLANNEL_ETCD="http://centos-master:2379" # etcs config key FLANNEL_ETCD_KEY="/coreos.com/network" # Any additonal options #FLANNEL_OPTIONS= 5.3.5、编辑服务文件/usr/lib/systemd/system/flanneld.service 添加: [Unit] Description=Flanneld overlay address etcd agent After=network.target Before=docker.service [Service] Type=notify EnvironmentFile=-/etc/sysconfig/flanneld EnvironmentFile=-/etc/sysconfig/docker-network ExecStart=/usr/bin/flanneld \ -etcd-endpoints=${FLANNEL_ETCD} \ $FLANNEL_OPTIONS [Install] RequiredBy=docker.service WantedBy=multi-user.target 或者直接启动: flanneld -iface=eno16777736 -etcd-endpoints=http://centos-master:2379& (绑定一个正常工作的网卡) 5.4、暂停docker服务 #systemctl stop docker 5.6、执行脚本(修改一下docker) #systemctl start flanneld #mk-docker-opts.sh -i #source /run/flannel/subnet.env #ifconfig docker0 ${FLANNEL_SUBNET} #systemctl start docker 5.7、测试 在centos-minion上ip a查看可以看到flannel0的网卡信息 本文转自 sykmiao 51CTO博客,原文链接:http://blog.51cto.com/syklinux/1860301,如需转载请自行联系原作者

优秀的个人博客,低调大师

虚拟化技术—docker容器—管理篇

一、我们怎么更方便的进去已经start的容器呢? nsenter:可以通过这个命令进去docker的images里 首先获取一个容器的id: docker inspect --format "``.`State`.`Pid`"centos_with_nettools 获取一个id 10592 nsenter --target10592 --mount --yts --ipc --net 这样就进去了,当然这样很麻烦,所以可以写一个脚本: cat in.sh CNAME=$1 CPID=$(docker inspect --format "``.`State`.`Pid`" $CNAME) nsenter --target $CPID--mount --uts --ipc --net 设置权限: chmod +x in.sh 使用:./in.shcentos_with_nettools 二、查看docker网络 brctlshow 查看docker的网桥 iptables -t nat -L -n 三、容器创建好了,怎么对外提供服务呢? 容器都是独立的,资源隔离的,一个容器最常见的是只跑一个服务,但凡服务都都是有端口的,那么我们就要把容器内的端口映射到本机的端口上,然后对外提供服务 第一种:随机映射 docker run -P -d --name nginx1 nginx 第二种:指定映射 docker run -d -p 91:80 --name nginx2 nginx 四、数据卷 什么是数据卷? 当然是存放数据的,那么我们用来做什么?打个比方,一个网站后端不可能只有一台服务器,那么多台服务器怎么保证一些需要的数据一致呢?这里就要用到数据卷了,一个容器只用来保存数据,其他后台服务器都到这个容器里取数据,这样就可以保证数据一致性了。 先创建一个容器: dockerrun-it--namevolume-test1-hnginx-v/datanginx docker ps -l查看一下: dockerinspect-f"``.`Volumes`"volume-test1查看卷: 挂载: dockerrun-it--namevolume-test2-hnginx1-v/opt:/optcentos 注意:/opt后面不能有/号 dockerrun-it--namevolume-test2-hnginx1-v/opt:/opt:ro centos ro:表示在容器里不能写 这时创建新容器时就可以指定了 新建容器,数据卷从volume-test1上取 dockerrun-it--namevolume-test34--volumes-fromvolume-test1centos 本文转自 sykmiao 51CTO博客,原文链接:http://blog.51cto.com/syklinux/1860219,如需转载请自行联系原作者

优秀的个人博客,低调大师

Linux内存管理--物理内存分配【转】

阅读目录 2.3.1 __alloc_bootmem 2.3.2__alloc_bootmem_core 转自:http://blog.csdn.net/myarrow/article/details/8682819 1. First Fit分配器 First Fit分配器是最基本的内存分配器,它使用bitmap而不是空闲块列表来表示内存。在bitmap中,如果page对应位为1,则表示此page已经被分配,为0则表示此page没有被分配。为了分配小于一个page的内存块,First Fit分配器记录了最后被分配的PFN (Page Frame Number)和分配的结束地址在页内的偏移量。随后小的内存分配被Merge到一起并存储到同一页中。 First Fit分配器不会造成严重的内存碎片,但其效率较低,由于内存经常通过线性地址进行search,而First Fit中的小块内存经常在物理内存的开始处,为了分配大块内存而不得不扫描前面大量的内存。 2. Boot Memory分配器 物理内存分配器如何分配内存来初始化其自己呢? 答案是:通过Boot Memory分配器来实现,而Boot Memory分配器则通过最基本的First Fit分配器来实现。 2.1 Boot Map定义 Boot Map通过数据结构bootmem_data来定义,详见<linux/bootmem.h>,其定义如下所示: [cpp] view plain copy typedefstructbootmem_data{ unsignedlongnode_boot_start;//描述的物理内存的起始地址 unsignedlongnode_low_pfn;//结束物理地址,即ZONE_NORMAL的结束 void*node_bootmem_map;//描述“使用或空闲的位图”的地址 unsignedlonglast_offset;//最后被分配的页内偏移量,即在llast_pos描述的物理页中, //从last_offset开始,没有被分配 unsignedlonglast_pos;//最后被分配的页的PFN }bootmem_data_t; 所有bootmem_data被放于全局变量bdata_list中。 2.2 Boot Memory分配器初始化 每一个CPU架构被要求提供setup_arch函数,它负责获取初始化boot memory分配器的必要参数。不同的CPU架构通过不同的函数来实现,如ARM通过bootmem_init来实现。它负责获取以下参数: •min_low_pfn: 系统中可获得的最小的PFN,装载kernel image结束之后的第一页,在mm/bootmem.c中定义 •max_low_pfn:低端内存(ZONE_NORMAL)中可获得的最大PFN •highstart_pfn:高端内存(ZONE_HIGHMEM)的起始PFN •highend_pfn:高端内存(ZONE_HIGHMEM)的结束PFN •max_pfn:系统中可获得的最大的PFN, 在mm/bootmem.c中定义 PFN是在物理内存map的偏移量,以page为单位。Kernel可直接访问ZONE_NORMAL,其偏移量为:PAGE_OFFSET。 通过以上5个参数明确了可用物理内存之后,调用init_bootmem->init_bootmem_core来初始化contig_page_data。它主要完成以下两件事: 1) 将把与此node对应pgdat_data_t插入到pgdat_list中 2) 初始化bootmem_data_t的中参数,并分配表示页分配状态的bitmap,其大小为: (end_pfn-start_pfn+7)/8 bitmap的物理地址为:bootmem_data_t->node_boot_start bitmap的虚拟地直为:bootmem_data_t->node_bootmem_map 2.3 分配内存 •reserve_bootmem:用于预留物理页面。但用于通用的内存分配是低率的,它主要用于各种驱动(如:Video Codec)预留内存。 常用的内存分配函数如下(in UMA架构,我们常的ARM架构为UMA架构): •alloc_bootmem •alloc_bootmem_low •alloc_bootmem_pages •alloc_bootmem_low_pages 其调用关系如下图所示: 回到顶部 2.3.1 __alloc_bootmem __alloc_bootmem() 需要以下参数: • pgdat 用于分配内存块的节点,在UMA架构中,它被忽略,因为它总是为:contig_page_data •size 指定请求分配的内存大小,以字节为单位 • align 请求以多少字节对齐,地于小块内存分配,一般以SMP_CACHE_BYTES对齐,如在X86上,与L1硬件cache对齐 • goal 偏好的分配内存的起始地址, 回到顶部 2.3.2__alloc_bootmem_core 它从goal指定的地址开始,线性地扫描内存,以寻找可以满足内存分配要求的内存块。它的另外一项功能是决定是否需要把新分配的内存块与以前已经分配的内存块merge到一起。 分配内存常用函数定义如下: [cpp] view plain copy #ifdefCONFIG_NO_BOOTMEM /*Weareusingtopdown,soitissafetouse0here*/ #defineBOOTMEM_LOW_LIMIT0 #else #defineBOOTMEM_LOW_LIMIT__pa(MAX_DMA_ADDRESS) #endif #definealloc_bootmem(x)\ __alloc_bootmem(x,SMP_CACHE_BYTES,BOOTMEM_LOW_LIMIT) #definealloc_bootmem_align(x,align)\ __alloc_bootmem(x,align,BOOTMEM_LOW_LIMIT) #definealloc_bootmem_nopanic(x)\ __alloc_bootmem_nopanic(x,SMP_CACHE_BYTES,BOOTMEM_LOW_LIMIT) #definealloc_bootmem_pages(x)\ __alloc_bootmem(x,PAGE_SIZE,BOOTMEM_LOW_LIMIT) #definealloc_bootmem_pages_nopanic(x)\ __alloc_bootmem_nopanic(x,PAGE_SIZE,BOOTMEM_LOW_LIMIT) #definealloc_bootmem_node(pgdat,x)\ __alloc_bootmem_node(pgdat,x,SMP_CACHE_BYTES,BOOTMEM_LOW_LIMIT) #definealloc_bootmem_node_nopanic(pgdat,x)\ __alloc_bootmem_node_nopanic(pgdat,x,SMP_CACHE_BYTES,BOOTMEM_LOW_LIMIT) #definealloc_bootmem_pages_node(pgdat,x)\ __alloc_bootmem_node(pgdat,x,PAGE_SIZE,BOOTMEM_LOW_LIMIT) #definealloc_bootmem_pages_node_nopanic(pgdat,x)\ __alloc_bootmem_node_nopanic(pgdat,x,PAGE_SIZE,BOOTMEM_LOW_LIMIT) #definealloc_bootmem_low(x)\ __alloc_bootmem_low(x,SMP_CACHE_BYTES,0) #definealloc_bootmem_low_pages(x)\ __alloc_bootmem_low(x,PAGE_SIZE,0) #definealloc_bootmem_low_pages_node(pgdat,x)\ __alloc_bootmem_low_node(pgdat,x,PAGE_SIZE,0) 2.4 释放内存 调用free_bootmem来释放内存。 [cpp] view plain copy void__initfree_bootmem(unsignedlongaddr,unsignedlongsize) { unsignedlongstart,end; kmemleak_free_part(__va(addr),size); start=PFN_UP(addr); end=PFN_DOWN(addr+size); mark_bootmem(start,end,0,0); } 本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sky-heaven/p/4837250.html,如需转载请自行联系原作者

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册