Magnum版本说明

本文以magnum的mitaka版本代码为基础进行分析。

Magnum Kubernetes

Magnum主要支持的概念有bay,baymodel,node,pod,rc,service。其中Magnum可以创建kubernetes的bay,即kubernetes的集群。本文主要介绍的就是magnum中kubernetes bay的创建过程。

Kubernetes Bay创建流程

首先通过magnum-api发起创建bay的请求,api的入口函数在这里

@expose.expose(Bay, body=Bay, status_code=201)
def post(self, bay):
"""Create a new bay.
:param bay: a bay within the request body.
"""
...
res_bay = pecan.request.rpcapi.bay_create(new_bay,
bay.bay_create_timeout) # Set the HTTP Location Header
pecan.response.location = link.build_url('bays', res_bay.uuid)
return Bay.convert_with_links(res_bay)

接着通过rpc调用,将创建请求发送给magnum-conductor,从而调用了bay_conductor的bay_create函数进行处理。

def bay_create(self, context, bay, bay_create_timeout):
...
try:
# Generate certificate and set the cert reference to bay
cert_manager.generate_certificates_to_bay(bay) //为bay创建秘钥
created_stack = _create_stack(context, osc, bay, //驱动heat,为bay创建对应的stack
bay_create_timeout)
...

接着我们来分析创建stack的过程

def _create_stack(context, osc, bay, bay_create_timeout):
template_path, heat_params = _extract_template_definition(context, bay) //获取模板文件的地址和参数 tpl_files, template = template_utils.get_template_contents(template_path) //获取模板文件内容和其他需要的文件
# Make sure no duplicate stack name
stack_name = '%s-%s' % (bay.name, short_id.generate_id()) //生成stack name
if bay_create_timeout:
heat_timeout = bay_create_timeout
elif bay_create_timeout == 0:
heat_timeout = None
else:
# no bay_create_timeout value was passed in to the request
# so falling back on configuration file value
heat_timeout = cfg.CONF.bay_heat.bay_create_timeout
fields = {
'stack_name': stack_name,
'parameters': heat_params,
'template': template,
'files': tpl_files,
'timeout_mins': heat_timeout
} //拼成heat的参数
created_stack = osc.heat().stacks.create(**fields) //驱动heat创建stack return created_stack

kubernets的模板文件是kubecluster.yaml。这是一个heat的模板文件。下文主要对这个文件进行分析。

至此,一个bay就可以完整创建出来了。

kubernetes bay stack

kubecluster.yaml是一个标准的heat模板。heat模板的说明可以参看Heat Orchestration Template (HOT) Guide

kubernetes中节点分为master和minion两个。

  • master部署有etcd,kube-apiserver,kube-scheduler,kube-controllermanager。master主要负责对于集群的管理和kubernetes的数据存储。master支持多节点部署,通过LB实现etcd和kubernetes服务的高可用。master的数量在baymodel中定义。
  • minion部署有kubelet,kube-proxy,flannel,docker-io。minion是实际创建容器的节点,也就是k8s中的minion。minion节点同样可以有多个。初始的数量在baymodel中定义。

从这个文件,可以看到创建一个kubernetes集群需要的资源。下文对各个resource进行一一分析。

resources:
fixed_network: //kubernetes集群的内网,所有创建出来的node,都会在该内网中
type: OS::Neutron::Net
properties:
name: private fixed_subnet: //kubernetes集群的内网子网,所有创建出来的node,都会分配该子网的ip地址
type: OS::Neutron::Subnet
properties:
cidr: {get_param: fixed_network_cidr}
network: {get_resource: fixed_network}
dns_nameservers:
- {get_param: dns_nameserver} extrouter: //对外的外网路由
type: OS::Neutron::Router
properties:
external_gateway_info:
network: {get_param: external_network} extrouter_inside: //内网路由,连接外网
type: OS::Neutron::RouterInterface
properties:
router_id: {get_resource: extrouter}
subnet: {get_resource: fixed_subnet} secgroup_base: //基础安全组
type: OS::Neutron::SecurityGroup
properties:
rules:
- protocol: icmp
- protocol: tcp
port_range_min: 22
port_range_max: 22 secgroup_kube_master: //供master使用的安全组
type: OS::Neutron::SecurityGroup
properties:
rules:
- protocol: tcp
port_range_min: 7080
port_range_max: 7080
- protocol: tcp
port_range_min: 8080
port_range_max: 8080
- protocol: tcp
port_range_min: 2379
port_range_max: 2379
- protocol: tcp
port_range_min: 2380
port_range_max: 2380
- protocol: tcp
port_range_min: 6443
port_range_max: 6443
- protocol: tcp
port_range_min: 30000
port_range_max: 32767 secgroup_kube_minion: //供minion使用的安全组
type: OS::Neutron::SecurityGroup
properties:
rules:
- protocol: icmp
- protocol: tcp
- protocol: udp ######################################################################
#
# load balancers.
# api_monitor: //kube-api的负载均衡监控
type: OS::Neutron::HealthMonitor
properties:
type: TCP
delay: 5
max_retries: 5
timeout: 5 api_pool: //kube-api的负载均衡池
type: OS::Neutron::Pool
properties:
protocol: {get_param: loadbalancing_protocol}
monitors: [{get_resource: api_monitor}]
subnet: {get_resource: fixed_subnet}
lb_method: ROUND_ROBIN
vip:
protocol_port: {get_param: kubernetes_port} api_pool_floating: //kube-api的浮动ip
type: OS::Neutron::FloatingIP
depends_on:
- extrouter_inside
properties:
floating_network: {get_param: external_network}
port_id: {get_attr: [api_pool, vip, port_id]} etcd_monitor: //etcd的负载均衡监控
type: OS::Neutron::HealthMonitor
properties:
type: TCP
delay: 5
max_retries: 5
timeout: 5 etcd_pool: //etcd的负载均衡池
type: OS::Neutron::Pool
properties:
protocol: HTTP
monitors: [{get_resource: etcd_monitor}]
subnet: {get_resource: fixed_subnet}
lb_method: ROUND_ROBIN
vip:
protocol_port: 2379 ######################################################################
#
# kubernetes masters. This is a resource group that will create
# <number_of_masters> masters.
# kube_masters: //master资源组
type: OS::Heat::ResourceGroup
depends_on:
- extrouter_inside
properties:
count: {get_param: number_of_masters} //创建的master数量
resource_def:
type: kubemaster.yaml //创建master的模板
properties:
... ######################################################################
#
# kubernetes minions. This is an resource group that will initially
# create <number_of_minions> minions, and needs to be manually scaled.
# kube_minions: //minion资源组
type: OS::Heat::ResourceGroup
depends_on:
- extrouter_inside
- kube_masters
properties:
count: {get_param: number_of_minions} //创建的minion数量
removal_policies: [{resource_list: {get_param: minions_to_remove}}]
resource_def:
type: kubeminion.yaml //创建minion的模板
properties:
...

每个master也是一个stack,它不仅仅包含一个虚拟机,还包括其他一些资源。master的模板在kubemaster.yaml进行了定义。同样,minion的模板在kubeminion.yaml进行了定义。后面再对这些文件进行分析。

Magnum Kubernetes源码分析(一)的更多相关文章

  1. Magnum Kubernetes源码分析(二)

    Kubernetes Master Stack kubernetes master的stack的resources主要分为三个部分. master wait handle wait handle主要用 ...

  2. Magnum Kuernetes源码分析(一)

    Magnum版本说明 本文以magnum的mitaka版本代码为基础进行分析. Magnum Kubernetes Magnum主要支持的概念有bay,baymodel,node,pod,rc,ser ...

  3. Magnum Kuernetes源码分析(二)

    Kubernetes Master Stack kubernetes master的stack的resources主要分为三个部分. master wait handle wait handle主要用 ...

  4. kubernetes源码分析 -- kube-proxy

       Kube-proxy需要在每一个minion结点上运行.他的作用是service的代理,负责将业务连接到service后面具体执行结点(endpoints). 我们列一下体现kube-proxy ...

  5. kubernetes垃圾回收器GarbageCollector Controller源码分析(二)

    kubernetes版本:1.13.2 接上一节:kubernetes垃圾回收器GarbageCollector Controller源码分析(一) 主要步骤 GarbageCollector Con ...

  6. client-go客户端自定义开发Kubernetes及源码分析

    介绍 client-go 是一种能够与 Kubernetes 集群通信的客户端,通过它可以对 Kubernetes 集群中各资源类型进行 CRUD 操作,它有三大 client 类,分别为:Clien ...

  7. Kubernetes client-go Indexer / ThreadSafeStore 源码分析

    Kubernetes client-go Indexer / ThreadSafeStore 源码分析   请阅读原文:原文地址   Contents 概述 Indexer 接口 ThreadSafe ...

  8. Kubernetes client-go 源码分析 - Reflector

    概述入口 - Reflector.Run()核心 - Reflector.ListAndWatch()Reflector.watchHandler()NewReflector()小结 概述 源码版本: ...

  9. Kubernetes Deployment 源码分析(一)

    概述Deployment 基础创建 DeploymentReplicaSet滚动更新失败回滚历史版本回滚其他特性小结 概述 Deployment 是最常用的 Kubernetes 原生 Workloa ...

随机推荐

  1. EL的隐含对象 (二)【访问作用域范围的隐含对象】

    在EL中提供了4个用于访问作用域范围的隐含对象,即pageScope.requestScope.sessionScope和applicationScope.应用这4个隐含对象指定所要查找的标识符的作用 ...

  2. phpcs

    phpcs(代码规范) https://juejin.im/post/5b18fdeb6fb9a01e573c3cb3 https://laravel-china.org/docs/psr/psr-2 ...

  3. Unity shader学习之阴影,衰减统一处理

    使用unity AutoLight.cginc文件里的内置函数 UNITY_LIGHT_ATTENUATION shader如下: // Upgrade NOTE: replaced 'mul(UNI ...

  4. xml 的 <![CDATA["URL"]]>

    <![CDATA["URL"]]>:用于 xml 处理特殊字符,比如:& <PolicyURL><![CDATA[ http://ectp.t ...

  5. sqlyog下载

    sqlyog下载(附注册码):http://www.onlinedown.net/soft/24926.htm

  6. 2017-2018-2 20165215 实验二 Java面向对象程序设计

    20165215 实验二 Java面向对象程序设计 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:张家佳 学号:20165215 指导教师:娄嘉鹏 实验日期:2018年4月16日 ...

  7. linux基础命令---显示进程ps

    ps ps指令可以显示系统中当前进程的信息,它的输出结果是高度可定制的.如果您希望重复更新所选内容和显示的信息,请使用top(1)代替. 请注意,“ps-aux”与“ps aux”不同.POSIX和U ...

  8. 随笔 js-----------------------------------------------------------------------------------------------------

    http://www.cnblogs.com/liuling/p/2014-4-19-04.html   redis Base64.encode($( "#byerName").v ...

  9. Qt 之 模态、非模态、半模态窗口的介绍及 实现QDialog的exec()方法

    一.简述 先简单介绍一下模态与非模态对话框. 模态对话框 简单一点讲就是在弹出模态对话框时,除了该对话框整个应用程序窗口都无法接受用户响应,处于等待状态,直到模态对话框被关闭.这时一般需要点击对话框中 ...

  10. 75.Java异常处理机制-自定义异常

    package testDate; //自定义异常 public class MyException extends Exception{ public MyException(){ } public ...