结合Cloudfoundry v2详解warden的源码分析与使用(一)
来源:互联网 发布:java高并发orm 编辑:程序博客网 时间:2024/06/07 06:16
warden原理解析
前提:安装好ruby环境
安装warden环境并启动warden服务
1.首先下载https://github.com/cloudfoundry/warden.git源码,对应warde目录为~/warden
上面截图,我们看到其中有vagrantfile说明可以使用vagrnt去启动单vm方式熟悉warden,但是这里我直接在我的虚机里面启动warden服务,并做操作,具体怎么操作下面会介绍到
第一步:
git clonehttps://github.com/cloudfoundry/warden.git
2.安装ruby环境
第二步:
PATH=/var/vcap/packages/ruby-2.1.4/bin/:$PATH(这里我直接使用了nisebosh环境下面已经搭建好的ruby环境)
3.bundle源码并下载离线库
分析cf源码安装:
https://github.com/cloudfoundry/cf-release/tree/master/packages/warden
通过源码可以看到,这里就是将源码放到指定建立warden的目录,并将其gems库下载下来存放到vendor目录
所以这里关键就是执行BUNDLE_WITHOUT=development:testbundle package --all即下载离线库
第三步:
cd ~/warden
BUNDLE_WITHOUT=development:test bundle package --all
4;启动warden服务器
分析cf job启动warden源码
https://github.com/cloudfoundry/cf-release/blob/master/jobs/dea_next/templates/warden_ctl.erb
通过上面源码我们知道cf是怎么启动warden的,其中还有对启动端口范围的限制,以及对于一个内核bug的屏蔽,主要是ipv6被禁止时候,命名空间被摧毁时候,网络接口无法被消除,所以需要打开ipv6开关
depot是容器存放的目录,安装之前需要清除depot存在容器目录
最后才是启动warden服务
cp/var/vcap/jobs/dea_next/config/warden.yml ~/warden/warden/(这里我偷懒直接从已经按照好的目录拷贝一份到我自己的warden源码目录)
修改warden.yml信息如下:
画圈的地方是我修改地方
unix_domain_path:与warden通信的目录
contanter_depot_path:存放容器目录的位置
pool_start_address:是网络池路由地址
设置10.254.0.0子网端,这里的网络其实是采用nat方式与host通信
pool_size是ip池ip的最大数量
设置好参数以后只exec bundle exec rake warden:start[warden.yml]
第四步:
cp/var/vcap/jobs/dea_next/config/warden.yml ~/warden/warden/
修改warden配置
exec bundle exec rake warden:start[warden.yml]
5.使用warden
通过warden.sock我们可以直接与服务通信
1.bin/warden --socket warden.sock
上面操作可以使得我们进入warden主进程,并进行warden操作
2.create
创建一个容器
3.列出所有容器
4.info --handle 18
可以看到刚刚创建的容器cpu,memory,cpu,带宽信息
5.limit_memory limit_cpu limit_disk 三个命令主要对cpu,内存,磁盘进行了资源隔离
limit_memory --handle 18pffh3g0bv --limit_in_bytes 51257600
这里就是其中一个操作对内存进行了限制500多M
6.这里对于cpu这块的限制主要还是cpushare,也就是cpu占用比例,如果是一块cpu,启动一个容器占用100%,再启动一个就是1:1,总之没启动一个容器,cpu占用将被平均瓜分
7如何将文件传人容器呢
这里有2种方式,
一种是直接共享网络,下载容器中
另外一种是通过copy_in进行宿主机到容器的copy
copy_in --handle 18pffh3g0bv --src_path /tmp/apache2 --dst_path/home/vcap(10000)
--src_path:源目录
--dst_path:容器目录
这里其实就是对于容器的文件系统的/tmp下面,我们知道cf在启动容器时候,其实是先安装rootfs文件系统的,然后启动容器时候会将rootfscopy一份到容器中,说白了也就copy了一份操作系统到容器目录里面
cf在copy应用时候其实是copy到/home/vcap下面去,并且每个容器vcap目录对应的宿主机用户组是不同的,比如10000,10001,我们可以cd~/warden/warden/depot/18pffh3g0bv/rootfs/home/vcap查看对应文件宿主,并且可以du -sh看到对应目录大小,也就是对应容器配额这块是通过用户组来进行磁盘配额定制,一旦超过配额超过将无法复制
7如何启动容器的应用呢
run --hanlde 18pffh3g0bv --script 'cd /home/vcap/apache2/bin &&sh ./apacheXX start'
这里并不是真正对应apache的命令,只是伪命令
对应warden容器资源限和读取这块主要源码:
https://github.com/cloudfoundry/warden/tree/master/warden/lib/warden/container/features
简介:
cgroup.rb:对应cgroup资源信息进行读取以及除内存资源的限制
mem_limit.rb主要对于cgroup内存进行限制
net.rb对网络的操作
quota.rb对配额进行限制,这里主要是磁盘的限制
- 结合Cloudfoundry v2详解warden的源码分析与使用(一)
- CloudFoundry之warden使用与原理分析
- CloudFoundry warden 启动源码分析
- 在Ubuntu12.04上部署CloudFoundry-ng (一) dea_ng和warden的部署
- CloudFoundry warden 创建container 源码研究
- Spring与Hibernate结合的细节源码分析(一)
- CloudFoundry源代码学习笔记之warden (一)
- CloudFoundry 学习之 warden 的安装
- Cloudfoundry之warden容器的资源限制
- warden wshd源码分析
- yolo v2 源码分析(一)
- CloudFoundry之warden安装
- CloudFoundry源码分析:Service框架(1)
- CloudFoundry源码分析:Service框架(2)
- CloudFoundry源码分析:NATS
- CloudFoundry源码分析:Router
- CloudFoundry源码分析:DEA
- Cloudfoundry之warden容器的核心进程wshd
- cocos2dx3.6 实现带光标的输入框
- Android Volley完全解析(一),初识Volley的基本用法
- redis设计与实现电子书合集
- glog的编译和使用(转+总结)
- 解析XML
- 结合Cloudfoundry v2详解warden的源码分析与使用(一)
- C++ 中的友元friend
- 几种常见的线性表存储结构
- Openlayers3 计算地图上任意两点间的距离
- 计算机视觉-sift(1)原理
- 面向模式的软件体系结构电子书合集
- 【Unity3d】资源依赖反查工具
- #if _MSC_VER > 1000 #pragma once #endif 作用解释
- 黑马程序员_java 数组