first-hexoblog


title: 答辩准备

公司项目比较好//不要把项目写的太大,不要全是你写的,不过你一定要做了一块主要的地方,把你工作内容写出来//论文设计部分和实现部分要对应起来

1.论文中使用的k8s集群(v1.12)涉及相关接口知识点

  • pods

    创建一个pod:本系统是通过rc来创建pod对象的

    获取指定pod信息:GET /api/v1/namespaces/{namespace}/pods/{name}

    如图所示是一个pods所有信息:1557384292002 其中status中的“phase”属性就是pod是否运行正常状态

    1557384445771

    1557384926009

    删除指定pod:DELETE /api/v1/namespaces/{namespace}/pods/{podsname}

    不过在采用rc创建pods后,采用如下方法删除pods

    1557385001177

    • rc(replication controller):

    创建rc对象接口:POST /api/v1/namespaces/{namespace}/replicationcontrollers

    删除RC: DELETE /api/v1/namespaces/{namespace}/replicationcontrollers/{name}

    获取rc列表:GET /api/v1/namespaces/{namespace}/replicationcontrollers

    替换指定rc:PUT /api/v1/namespaces/{namespace}/replicationcontrollers/{name}

    ​ 注意:所有的命名空间均使用的是默认命名空见default

  • service:

    创建service:POST /api/v1/namespaces/{namespace}/services

    删除指定service:DELETE /api/v1/namespaces/{namespace}/services/{name}

    获取某个service信息:GET /api/v1/namespaces/{namespace}/services/{name}

    显示所有service列表:GET /api/v1/namespaces/{namespace}/services

    ​ 注意:命名空间同样使用的是default默认命名空间({namespace}被替换为default)

  • 关于集群的RBAC验证关闭,采用token的方式对api请求做权限验证

    1557404577511

    采用静态token认证,引入静态token文件,讲–advertise-mode由之前RBAC修改为AlwaysAllow防止集群频繁重启

2.总结四种get,post,put,delete创建rc与service的方法,传入参数情况

get,post都差不多,采用你restTemplate.exchange()指定请求方式

delete:

1
2
3
4
5
6
7
8
9
 RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers=new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("Authorization","Bearer 7db2f1c02d721320");
HttpEntity<String> httpEntity=new HttpEntity<>(headers);//delete可以在路径中进行删除,可以不用传参数,传个头文件就ok了。
ResponseEntity<String> response=restTemplate.exchange( "https://192.168.172.135:6443/api/v1/namespaces/default/replicationcontrollers/mysql-rc",
HttpMethod.DELETE,
httpEntity,
String.class);

put:

1
2
3
4
5
6
7
8
9
 RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers=new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("Authorization","Bearer 7db2f1c02d721320");
HttpEntity<String> httpEntity=new HttpEntity<>(JSONObject.valueToString(RC),headers);//put需要传一个对象进来,讲副本数设置为0
ResponseEntity<String> response=restTemplate.exchange( "https://192.168.172.135:6443/api/v1/namespaces/default/replicationcontrollers/mysql-rc",
HttpMethod.PUT,
httpEntity,
String.class);

1557387109622

3.本文系统paas平台所涉及到的相关概念(租户,逻辑多租,物理多租)

paas(platform as a service):PAAS之所以能够推进SaaS的发展,主要在于它能够提供企业进行定制化研发的中间件平台,同时涵盖数据库和应用服务器等。

首先我们先确定PaaS的定义:即平台即服务,是指将软件研发的平台(也可以是业务基础平台)作为一种服务,PaaS的出现可以加快SaaS的发展,尤其是加快SaaS应用的开发速度。

​ PaaS的分类:应用部署和运行平台APaaS(application platform as a service)和集成平台IPaaS(integration as a service)。

  APaaS(application platform as a Service应用部署的运行平台及即务):是仅提供应用的部署和运行平台,目前国内大多数PaaS平台均为APaaS平台,如畅捷通、云之家、钉钉、明道。APaaS有一个突出的弊端:APaaS中的的APP是由若干个ISV提供,APP与平台的接入程度较浅,APP之间兼容性很差,信息流、财务流之间不能打通,如需实现则意味着大量的开发工作,ISV和平台是合作关系,并无依托关系,双方的目的明确:销售量的提升和平台功能的完善。

  IPaaS(Integration platform as a Service集成平台即服务):的功能可以理解为平台为开发者提供了一整套的开发工具和底层(比如数据库服务,缓存服务,消息中间件服务等),APP是依托于IPaaS开发的,所以APP和平台的接入程度很深,且依赖性很强。国外比较典型的IPaaS如salesforce,典型的ISV开发者Veeva是基于salesforce开发了针对医疗行业的CRM系统,且有着较为不错的销售额。基于IPaaS的属性,开发者veeva对于salesforce的依赖性很高,基本被锁定在salesforce,但可以实现各个APP之间的信息流打通。平台国内IPaaS提供商较少,比较有代表性的是青云。

paas平台服务商:新浪SAE或者google GAE(apaas平台),青云(比较典型的ipaas)

aws、azure、阿里云、腾讯云都在提供IAAS,PAAS和SAAS服务

4.集群的逻辑多组,物理多租问题

5.集群k8s核心组件

6.docker(v17.12)

​ 在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制.Docker利用Linux核心中的资源分离机制,例如cgroups,以及Linux核心名字空间(namespaces),来创建独立的容器(containers)。

  • 构建私有镜像仓库

    1. docker pull registry
    2. docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
      1. docker pull busybox//pull一个比较小的镜像来测试
    3. docker tag busybox 192.168.112.136:5000/busybox//来修改一下该镜像的tag
      1. docker push 192.168.112.136:5000/busybox//把打了tag的镜像上传到私服
  • 构建镜像(采用docker的maven插件构建用户自定义项目的maven插件)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <build>
    <finalName>app</finalName>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    <!--docker的maven插件,官网:https://github.com/spotify/docker‐maven‐plugin-->
    <plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.4.13</version>
    <configuration>
    <imageName>kinspire.cn:5000/${project.artifactId}:${project.version}</imageName>
    <baseImage>zkjdk1.8</baseImage>
    <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint>
    <resources>
    <resource>
    <targetPath>/</targetPath>
    <directory>
    ${project.build.directory}
    </directory>
    <include>
    ${project.build.finalName}.jar
    </include>
    </resource>
    </resources>
    <dockerHost>http://kinspire.cn:2375</dockerHost>
    </configuration>
    </plugin>
    </plugins>
    </build>
  • 采用docker hub上共有镜像

7.答辩可能遇到的问题总结以及扫盲一些知识点

  • 你们部门主要是做什么内容的?

    ​ 主要为GTS做一些业务,包括移动的一些业务,数据目录,数据治理的业务,也有一些大数据相关的业务。 我们组的主要工作就是做一个内部使用的PaaS平台系统。

  • docker核心:镜像(Image),容器(container),仓库(repository),//搭建、发送、运行//搭建一次到处能用

  • 如果想要将Docker应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对Docker及容器进行更高级更灵活的管理。于是出现了K8s(基于容器的集群管理平台),一个pod里面可以包含多个container(docker中概念)。

    Master节点包括API Server,Schedulee,Controller Manager,etcd

    //API Server:是整个系统的对外接口,供客户端和其它组件调用,相当于营业厅

    //Scheduler负责对集群内部的资源进行调度,相当于“调度室”。

    //Controller manager负责管理控制器,相当于“大总管”

Node节点包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选),还有就是Pod。Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。除了Pod之外,K8S还有一个Service的概念,一个Service可以看作一组提供相同服务的Pod的对外访问接口。

//Docker,不用说了,创建容器的。

//Kubelet,主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等。

//Kube-proxy,主要负责为Pod对象提供代理。

//Fluentd,主要负责日志收集、存储与查询。

  • Etcd是Kubernetes集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息
  • ​ 集群中如何处理负载均衡问题的?

    多个副本数首先可以对请求进行分流,同时Kubernetes中的可以创建Ingress服务,然后用户就可以通过POST ingress资源到APIServer的方式请求ingress,某种意义上相当于nginx,达到负载均衡的效果

https://hexo.io/docs/deployment.html)