设为首页 收藏本站
查看: 596|回复: 0

[经验分享] Openstack(2)

[复制链接]

尚未签到

发表于 2018-5-31 09:16:44 | 显示全部楼层 |阅读模式
  

   上上周,有个大公司面试机会,但是吧,我没有准备好,就说我暂时不去了,等下轮消息,但是目前看来,电话也不打来了,应该是人招满了,虽然我还是没有足够的信心,感觉去了就是被虐,心里面还是空落落的。唉,感觉从事这个行业实在太累了,学的东西太多太杂,实际用到的是又不一定有多少,python这个也只是有点简单基础,真正开发那我肯定不行。就运维来说,也是让人头疼,永远解决的不了的问题,就是学的东西太难,领域太广,脑仁疼。所以我还是想从事openstack,毕竟实习公司给了我一个正确的方向,只需抓这几个领域就好了,我主动离开了,反正我肯定要吃到苦头才有感悟的。一搬真正云计算公司都是要求openstack开发的,运维很少,除了电商平台。我这毕业设计也是一脸蒙逼,不知道从何入手,烦死了都!
  

  

  1、Zabbix监控为什么分为主动和被动?
  答:在这里,主动和被动都是针对被监控端agent来说的。
  被动:zabbix server向zabbix_agent讨要数据
  主动:agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy
  

  2、Saltstack中,Master与Minion是如何进行通信的?
  答:分为两个阶段。Master与Minion进程通过ZeroMQ消息队列进行通信
  (1)Master与Minion认证:minion第一次启动的时候,会生成密钥对,私钥放在本地,而公钥复制一份发送给Master,Master接收到公钥后,通过salt-key命令进行接受认证,这样认证通过就能对Minion发送指令了。
  (2)Master与Minion的连接:Master启动后,会监听2个端口,4505端口负责消息发布,4506端口负责与Minion端进行ZeroMQ通信。
  

  3、QEMU和KVM有什么联系吗?(真心记不住这些,我为啥就不敏感呢?!)
  答:(1)KVM模块在运行时按需加载进入内核空间运行,KVM模块本身不进行任何设备的模拟,需要用户空间程序QEMU通过/dev/kvm接口设置一个虚拟客户机的地址空间,向它提供模拟的I/O设备,并将它的视频显示映射回宿主机的显示屏。
  (2)虚拟机运行期间,QEMU会通过KVM模块提供的系统调用进入内核,由KVM模块负责把虚拟机置于处理器的特殊模式运行。
  

  4、KVM中,vCPU的工作模式有哪几种?
  答:(1)用户模式:主要处理I/O的模拟和管理,由用户空间的应用程序QEMU的代码实现
  (2)内核模式:执行一些安全的和高性能的特权指令,
  (3)客户模式:执行大部分的非特权指令。当发出关机指令的时候会被Hypervisor截获并进行模拟
  

  5、Openstack最简单的逻辑结构,在每个节点安装什么?
  答:(1)控制节点:keystone提供身份认证服务、glance提供镜像资源服务、Nova-api计算资源管理服务、数据库服务MySQL、RabbitMQ消息队列服务,Memcached缓存token服务(可选)、Neturon服务
  (2)计算节点:nova-compute、neutron插件、KVM虚拟化系统。
  

  6、虚拟化和云计算有什么区别?(厉害了陈沙克,之前在这家公司实习过,听说过这个人,比较叼)
  答:云计算是在虚拟化基础之上的
  (1)API接口
  (2)弹性扩展:横向是指自动增加和减少机器的数量、纵向是指自动增加和减少cpu和内存
  (3)分布式技术
  (4)自服务
  (5)节点规模
  参考文档:http://www.chenshake.com/chat-virtualization-and-cloud-computing/
  

  7、简述/etc/ld.so.conf文件有何作用?
  答:/etc/ld.so.conf 此文件记录了编译时使用的动态库的路径,也就是加载so(share object)库的路径。
  ldconfig命令把件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用
  参考文档:http://www.cnblogs.com/chris-cp/p/3591306.html
  

  8、简述ext4文件系统的特点。
  答:(1)碎片整理
  (2)与ext3系统兼容
  (3)无限数量的子目录
  (4)日志校验
  (5)快速fsck文件系统修复
  参考文档:http://evilv5.blog.51cto.com/76947/757619
  

  9、fsck工作原理和使用场景?(这玩意听说过,但用的不多,一考到就懵逼了)
  答:fsck检查文件系统时,首先判断出此文件系统是什么类型,然后检查superblock(超级块记录块大小、块个数、Inode节点数)的可用性,再然后扫描并初始化inode,最后检验并修复出现有错误的superblock、inode和block,最后做一个总结报告出哪些已经修复好的问题。
  导致文件系统损坏的原因可能是因为中途有非法关机造成的,fsck不仅可以对文件系统进行扫描,还能修正文件系统的一些问题。
  应用场景:值得注意的是fsck扫描文件系统时一定要在单用户模式、修复模式或把设备umount后进行。警告:如果扫描运行中的系统,会造成系统文件损坏!
  参考文档:http://blog.chinaunix.net/uid-29209863-id-5756928.html
  

  10、mysql备份?
  答:(1)mysqldump全量备份,mysqlbinlog可以从指定时间和指定位置进行增量备份
  (2)一主一从模式下延时一天同步,对从机器进行停掉SQL线程备份
  (3)对于Myisam存储类型的表使用mysqlhoscopy进行热备,对使用Innodb类型的表用xtraBACKUP进行在线备份
  

  11、当前路径下很多不同目录(如a、b、c)下面都有1个相同的文件名test.txt,但每个test.txt内容有可能不同,如何把所有test.txt里所有内容放入一个新的文件里1.txt(注:内容不能有重复行)?
  答:cat */test.txt | sort -n| uniq >>1.txt
  

  12、介绍下IO虚拟化?
  答:(1)当客户机的设备驱动程序发起IO请求时,KVM中的IO操作会拦截这次IO,然后将本次IO请求的信息存放到共享页,并通知Hypervisor用户空间的QEMU。
  (2)QEMU模拟程序获得IO操作信息之后,交由硬件模拟代码模拟出本次的IO操作。完成之后,将结果放回在共享页中,并通知KVM模块中的IO操作捕获代码
  (3)最后KVM将信息返回给客户机。
  由此可见,KVM IO是连接客户机和QEMU的中间件。IO又分为网络IO和磁盘IO
  这样我们做个总结:
  QEMU的优点是可以模拟出各种很老很金典的设备,而且不需要修改Guest Os。 缺点是每次IO操作的路径很长,需要多次上下文切换,性能较差
  参考文档:http://blog.csdn.net/u012606764/article/details/37958609
  

  13、对于Openstack,应该备份什么?
  答:(1)mysql数据库备份,比如keystone/glance/nova/neutron/cinder
  [root@controller ~]# mysqldump --opt --all-databases >all.sql  ##一键备份所有数据库也行,厉害了,备份单个数据库把--all-databases换了就行
  (2)对控制节点和计算节点的/etc/nova目录进行备份
  (3)对glance镜像进行备份
  (4)对云主机实例进行备份。
  (5)对/var/lib/cinder块存储进行备份
  

  14、VXLAN网络中VM间通信过程?(比较复杂,可以想象是一个三层网络设备将源VTEP和目的VTEP互联)
  答:在VXLAN模式的网络环境中:源虚拟机发送出去的L2数据包(Inner Ethernet Header + Payload),由send VTEP使用VXLAN Header (由VNI标识所属的segment)将L2数据包封装,然后依次追加UDP Header + 标准IP Header + 标准MAC Header;发出后由L3协议通过标准IP Header转发;匹配VNI找到receives VTEP;最后receives VTEP解包,由L2数据包头找到目标虚拟机,交互Payload数据。
  参考文档:http://www.aboutyun.com/thread-11189-1-1.html
  

  15、KVM模块分为几部分?IO设备用KVM不能被虚拟化么?
  答:KVM 分为了两个模块,一个是KVM Driver, 另一个是QEMU。前者负责CPU和内存的虚拟化,后者负责IO的虚拟化。用户空间的QEMU调用一系列的ioctl() 函数进入内核空间,然后内核空间再调用一系列函数进入Guest OS客户空间运行虚拟机。因为KVM是linux内核加载的一个模块,modprobe  kvm执行之后呢,kernel马上就变成了Hypervisor。这里kvm能利用linux本身的系统调用,内存管理等进程管理的办法,提升了很大的效率,也很简便。
  IO设备一般都是用QEMU来虚拟的,在不支持硬件虚拟化的机器上,QEMU也可以用来虚拟CPU,只是采用二进制动态翻译效率不是很好。远不及KVM。
  参考文档:http://blog.csdn.net/u012606764/article/details/38558493
  

  16、python如何实现两个字典合并?
  答:>>> dict1 = {1:2,3:4}
  >>> dict2 = {
  5:6,
  7:8
  }
  >>> dict1.update(dict2)
  >>> dict1
  {1: 2, 3: 4, 5: 6, 7: 8}
  

  17、元组和列表有什么区别?元组和列表如何相互转换,举个例子。
  答:(1)元组是不可变对象,一旦创建,值就不会发生变化。而列表中元素的值是可以发生改变的
  (2)元组一般使用小括号,列表一般使用中括号
  >>> a =(1,2,3)
  >>> b=[1,2,3]
  >>> a =list((a))  ##元组转为列表
  >>> a
  [1, 2, 3]
  >>> b =tuple((b)) ##列表转为元组
  >>> b
  (1, 2, 3)
  >>>
  

  18、写一下冒泡排序。
  def bubble_sort(lists):
  count = len(lists)
  for i in range(0, count):
  for j in range(i + 1, count):
  if lists > lists[j]:
  lists, lists[j] = lists[j], lists
  print(lists)
  list1 =[5,2,4,6,9,1]
  bubble_sort(list1)
  

  19、python中 xrange()和range()的区别
  答:(1)range是产生一个列表,xrange返回的是一个可迭代的对象。
  (2)xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间
  

  20、saltstack中pillar和granis有何区别?
  答:(1)grains是用来探测出minion的一些变量,比如主机名,内存大小,IP地址,系统及版本号等。相对来说,grains存储的是不常变化的内容,客户端汇报你想要的数据到服务器。grains可以在master端定义,但是要同步到minion端,也可以在minion端进行定义
  pillar用于给特定的minion定义任何你需要的数据(数据是动态的),这些数据可以被Salt的其他组件(如state)使用,一般是服务器主动要求收集minion端的信息
  (2)grains和pillar的另一个区别就是grains是存储在minion本地,所以grains可以进行新增、变更、删除等操作(通过grains模块append、remove、setval、delval等方法); 而pillar是存储在master本地或者第三方平台上,minion只能查看自己的缓存,没有权限做新增、变更、删除操作
  参考文档:http://732233048.blog.51cto.com/9323668/1640792
  

  21、如何保证Mysql数据库的可靠性?(忘完了尼玛,不过看到还能想起,说不出来)
  答:DRBD+Mysql+Heartbeat高可用方案
  DRBD---Distributed Replicated Block Device 是一种基于Linux的软件组件, 它是由内核模块和相关程序而组成的,通过网络镜像促进共享存储系统的替换。也就是说:当你将数据写入本地的DRBD设备上的文件系统时,数据会同时被发送到网络中的另外一台主机之上,并以完全相同的形式记录在一个文件系统中(实际上文件系统的创建也是由DRBD的同步来实现的)。本地节点(主机)与远程节点(主机)的数据可以保证实时的同步,并保证IO的一致性。所以当本地节点的主机出现故障时,远程节点的主机上还会保留有一份完全相同的数据,可以继续使用,以达到高可用的目的。
  优点:安全性高、稳定性高、可用性高,出现故障自动切换。
  缺点:只有一台服务器提供服务,成本相对较高,不方便扩展,可能会发生脑裂。
  参考文档:http://www.cnblogs.com/gomysql/p/3674030.html
  

  22、谈谈*args和**kwargs的用法?
  答:都是用来传递多个变量作为参数的,*args将许多变量打包成列表的形式,而**kwargs把许多变量打包成字典键值对的形式进行传参。*args要在**kwargs之前
  def test_kwargs(first, *args, **kwargs):
  print 'Required argument: ', first
  for v in args:
  print 'Optional argument (*args): ', v
  for k, v in kwargs.items():
  print 'Optional argument %s (*kwargs): %s' % (k, v)
  

  test_kwargs(1, 2, 3, 4, k1=5, k2=6)
  # results:
  # Required argument:  1
  # Optional argument (*args):  2
  # Optional argument (*args):  3
  # Optional argument (*args):  4
  # Optional argument k2 (*kwargs): 6
  # Optional argument k1 (*kwargs): 5
  参考文档:http://kodango.com/variable-arguments-in-python
  

  23、python装饰器的用法?
  答:为了减少大量雷同的代码,把一个函数也作为参数
  def outer(func_var):
  def inner():
  print ("还没用调用func函数,这是第一步")
  ret = func_var()
  return ret+1
  return inner  ##可以返回内嵌函数名
  def func():
  print ("这是func函数,这是第二步")
  return 1
  ##调用
  decorated = outer(func)
  decorated()
  ================== RESTART: F:\Python3.5\Scripts\suning.py ==================
  还没用调用func函数,这是第一步
  这是func函数,这是第二
  

  24、创建虚拟机的流程?(搞不清楚创建和启动有啥区别)
  答:1)用户携带证书或密码进行Keystone认证。
  2)Keystone认证通过后返回Token,此Token带有角色限制。
  3)通过Token向Keystone获取服务访问目录。
  4)Keystone返回服务访问目录。
  5)携带Token进行虚拟机创建,将指令传递给nova-api
  6)Nova向Keystone验证Token。并把此创建虚拟机请求消息发送到消息队列中,nova scheduler调度到消息队列中的消息,决定从哪台计算节点创建云主机,
  7)而后被选中的计算节点的nova compute服务携带Token访问Glance,glance也要向keystone验证该token是否可信
  8)Glance返回镜像。
  9)Nova携带Token,向Neutron请求虚拟机网卡VIF设置参数。
  10)Neutron向Keystone验证Token
  11)Nova携带Token验证VIF是否可以访问。
  12)Neutron返回成功的信息给Nova
  13)Nova返回创建成功的信息给用户。
  14)虚拟机创建成功。
  

  

  25、copy()与deepcopy()的区别
  答:(1)浅拷贝就相当于给原有对象加了另一个标签,其实都是同一个东西。如果原有父对象发生改变,子对象也会跟着改变。
  (2)深拷贝相当于又在内存开辟一片空间放入一个新的对象,只不过把父对象的元素值拷贝了过来,如果父对象发生了改变,子对象是不会变化的,因为压根不是一个东西了。
  >>> import copy
  >>> list1 = [1,2,[3,4]]
  >>> list2 = copy.copy(list1)
  >>> list3 = copy.deepcopy(list1)
  >>> list2 == list3
  True
  >>> list2 is list3
  False
  >>> list1[2][0] = 100
  >>> list2
  [1, 2, [100, 4]]
  >>> list3
  [1, 2, [3, 4]]
  >>>
  参考文档:http://blog.csdn.net/qq_32907349/article/details/52190796
  

  26、介绍下CPU虚拟化?
  答:(1)CPU虚拟化技术把物理CPU抽象成虚拟CPU,任意时刻,一个物理CPU只能运行一个虚拟CPU的指令,每个客户机可以使用一个或多个虚拟CPU,在各个操作系统之间,虚拟CPU的运行相互隔离,互不影响。如果需要为多个客户机进行服务的话,需要把物理CPU时间分片。
  (2)CPU虚拟化需要解决正确运行和调度两个关键问题。当guest OS发出非特权指令的时候,指令直接运行在宿主机的物理核心上,如果guestOS发出特权指令的时
  候,先请求guest OS的内核调用,而后再次经过Hypervisor的KVM driver,Hypervisor决定此特权指令是否运行在物理核心上,最后把处理结果返回给guest OS。
  (3)调度问题是指Hypervisor决定guest OS的哪个虚拟CPU在物理CPU上执行,要保证隔离性、公平性和性能。
  

  27、虚拟机的动态迁移了解多少?
  答:所谓动态迁移就是指虚拟机在短时间内暂停运行(不是关机),关闭源计算机点的实例,启动目的计算节点相同的实例,完成所谓的“迁移”。大概的工作原理是保证目的端要有相同的虚拟机的镜像,而后启动实例起来,这一点可以通过NFS共享存储来实现,最大的难度是实现内存的迁移,那么因为数据随时在改变,大概分为3个节点,push-stop and copy-pull,其次是网络资源迁移,在局域网内发送ARP重定向包,将虚拟机的IP地址与目的机器的MAC地址进行绑定,而后再发其他
  包到目的机器上。最后是存储设备的迁移,应该是通过NAS进行文件传输共享数据。
  LiveMigarationa的意义和作用是:(1)负载均衡,将负载较重的物理服务器上迁移一部分虚拟机到另一个物理服务器(2)先进行迁移,方便升级维护物理机
  

  28、vxlan和vlan的区别?(vxlan这个东西如果要深入的话,可能会提数据包格式,没准备的话就完蛋了!)
  答:(1)vlan ID有12比特位,共有2^12个vlan,vxlan ID共有24位,vxlan共有2^24个vlan
  (2)vxlan主要用于虚拟化环境,vlan可以用于物理环境,也可以用于虚拟化环境。
  (3)不同网段的vxlan通信依然需要三层网络设备,vxlan的原理远比vlan复杂,但他们都具有隔离广播域作用
  (4)vxlan能够解决地址重叠问题,采用vlan技术的交换机所使用的MAC地址表空间有限,每次当有新的的主机发包的时候,就必须重新学习目的MAC地址,所以就会洪范,浪费网络带宽,以及CPU资源。
  

  29、KVM为什么叫基于内核的虚拟机?
  答:通过加载KVM模块,Linux内核就成为了一个Hypervisor,KVM就能够直接利用Linux系统本身的进程调度、内存管理、安全子系统、网络协议栈等功能,把内核当成KVM自己的东西,而KVM只负责虚拟化即可。/dev/kvm是内核空间的接口,可以直接用来跟KVM模块打交道,创建虚拟机的请求都要经过于此。
  

  30、实现最大公约数和最小公倍数
  答:
  a = int(input("请输入一个数a:"))
  b = int(input("请输入另一个数b:"))
  temp = 0
  if a < b:  ##确保a比b大
  temp = a
  a = b
  b = temp
  def maxCommon(a, b):
  while b: a,b = b, a%b  ##把a换成b,b换成a除以b的余数,继续除,知道余数b为0终止while循环
  return a
  

  def minCommon(a, b):
  c = a*b
  while b: a,b = b, a%b
  return c//a   ##最小公倍数=两个数的乘积除以最大公约数
  

  if __name__ == '__main__':
  print(maxCommon(a,b))
  print(minCommon(a,b))
  

  31、什么操作Horzion不能做,只能用命令行做?
  答:(1)批量迁移只能用命令行(单台虚拟机可以用horzion)
  (2)部署完虚拟机以后的网卡添加只能用命令行,部署前可以用horzion添加网卡。
  

  32、nova conductor的作用?
  答:(1)由nova conductor与数据库交互,避免nova compute直接与数据库进行交互,为防止云主机实例被攻击后数据库暴露,在所以nova conductor在一定程度
  上保证了安全。
  (2)nova conductor一般部署在控制节点上,nova compute运行在计算节点上,方便对
  参考文档:http://blog.csdn.net/lynn_kong/article/details/8606640
  

  

  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-483302-1-1.html 上篇帖子: Ocata发布 容器化OpenStack将成为潮流 下篇帖子: OpenStack Networking – FlatManager and FlatDHCPManager
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表