3

本文从启动、配置、扩容、伸缩、存储等方面介绍如何使用开普勒云平台。

一、Kplcloud是什么?

kplcloud是一个基于Kubernetes的轻量级PaaS平台,通过可视化的界面对应用进行管理,降低应用容器化的对度,从而减少应用容器化的时间成本。

Kplcloud已在宜信服务于宜人财富等多个团队,稳定运行了近两年,目前平台已在生产环境跑着上百个应用,近千个容器。

一、登陆

登陆可以分为三种,分别是LDAP登陆、邮箱密码登陆、三方授权登陆,咱们没有注册功能。下面对这三种登陆方式进行讲解。

LDAP与邮箱登陆大同小异,只需要简单的配置即可。

1.1 LDAP登陆

在app.cfg文件找到[server]的login_type参数,设置为 ldap并且找到[ldap]块

[ldap]
ldap_host = 127.0.0.1
ldap_port = 389
ldap_base = DC=yourdomain,DC=corp
ldap_sseSSL = false
ldap_bindDN = 
ldap_bind_password = 
ldap_user_filter = (userPrincipalName=%s)
ldap_group_filter = (&(objectCategory=Group))
ldap_attr = name;mail

[server]
;auth_login 
login_type = ldap

输入你家LDAP的相关信息即可。

不要设置auth_login,应该把它注释掉。

1.2 邮箱登陆

在app.cfg文件找到[server]的login_type参数,设置为 email

[server]
;auth_login 
login_type = ldap

不要设置auth_login,应该把它注释掉。

1.3 Github授权登陆

通过Github授权登陆需要的app.cfg将[server]下的 auth_login参数设置为github

Github创建OAuth App

  • 打开github官网,进入https://github.com/settings/d..., 在左侧菜单栏找到“OAuth Apps”并点击进入
  • 如果没有OAuth App则点击“New OAuth App”按钮创建一个新的OAuth App
  • 创建完成之后 找到我们刚刚创建的OAuth App并进入就可以看到Client ID和Client Secret了
  • 将它们复制下来他贴到app.cfg的[server]块下的client_id和client_secret

  • 设置好Homepage URL和Authorization callback URL

1.4 授权登陆

上面设置好之后, 就可以使用github授权登陆的方式进入平台了,默认分配的空间及权限可以在app.cfg文件下的[server]块下的default_namespace和default_role_id配置。

[server]
client_id = balabalabalbabiubiubiu
client_secret = balabalabalbabiubiubiu
auth_login = github
default_namespace = default-app
default_role_id = 4C

二、Dashboard

2.1 工作台

工作台是我们进入之后看到的第一个页面,主要列出以下一些信息

  • 使用文档
  • 创建应用入口
  • 空间CPU及内存资源使用情况
  • 你可操作的最新的几个应用
  • 该空间下最近应用的动态
  • 您可操作的空间列表
  • 您规属于哪些权限组列表

2.2 全局监控

监控只是简易的集群网络,内存、CPU及语言,详情的监控可以从grafana查看。

2.3 上线统计

本模块主要是对一些应用发布的情况进行一些统计,如应用失败的应用的次数中断及回滚的次数,点击应用名称可以看应用详情。

三、应用管理

3.1 创建应用

创建一个Java应用

在创建应用之前,首先我们要做的是在你的git项目上将Dockerfile文件提交上去,并且生成一个Tag或releases版本。

Dockerfile 参考

FROM openjdk:latest

COPY xxxx.jar /opt/app

WORKDIR /opt/app
CMD ["java", "xxx.jar"]

进入创建应用页面,填写基本信息

  • 进入“创建项目”页面
  • 项目英文名填写项目的“英文名称” 名称的规则: ^[a-z0-9]([-a-z0-9])?([a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
  • 填写“项目描述” 可不填
  • 提交信息,进入第二步

填写详细信息

  • 选择项目语言Java
  • 项目地址:输入项目的址 kplcloud/hello 填写完后会自动获取项目的tags列表
  • 选择版本:选择获取回来的tags版本
  • POMFILE: pom.xml文件的路径
  • 构建路径:这是Dockerfile放到项目所在的路径地址
  • 容器数量:启动的Pods数量
  • 容器规格:该Pods的最大内存上限
  • 启动方式:jar 启动或 tomcat 启动
  • Args: 选择jar 启动会自动生成简单的 启动命令,如果是tomcat 启动则是其他命令 // 考虑去掉这个选项
  • dubbo 服务: 如果是dubbo服务则勾选,会为其开放20880端口
  • 如果选择了“增加端口” 会列出端口、协议填写
  • 端口及协议:如果选择了则会创建Service进行负载,注意端口名称的格式,必须是xxx-port,可以添加多个端口,但建议一个应用只启动一个端口。

提交成功之后会显示如下页面,管理就可以在审核页面进行部署。

(创建Golang/Python/NodeJs/静态应用的步骤请参看开源文档。)

3.2 自定义启动命令

应用服务启动可以在多个地方进行调整,以下介绍两种方案,Dockerfile 和 平台详情页调整

Dockerfile CMD启动方式

看一下简单的例子:

FROM hub.kpaas.nsini.com/app/hello:v0.0.3

CMD ["/go/bin/hello"]

启动命令写在CMD这个后面,如果后面有多个参数可以以逗号隔开例如: CMD ["static-web", "-path", "app", "-port", ":8080"]

平台详情页调整

打开应用详情页:

在详情这一选卡上找到“命令,参数”,点右边的编辑icon,弹出对话框进行填写:

填定启动的命令和参数,参数用逗号隔开。点提交服务会自动重启动。

注意:在平台详情页修改的命令会覆盖掉Dockerfile 下的CMD命令。

3.3 日志采集

日志采集配置

在应用详情页中间有一个叫作“日志采集”的模块

点击右边的“添加”按钮,在弹出的对话框中选择日志的路径及正则规则

  • 文件路径:你日志文件的位置
  • 日志规则:如果没有特殊需求的话默认就好

提交后服务会自动重启动。

日志采集

如果配置了上面采集器,那么它会向服务所在的Pod注入一个Filebeat采集器对应用服务的业务日志进行采集。把采集到的日志入到kafka集群,然后logstash进行消息处理及格式化。

处理完后入到ES集群,最终我们就可以通过kibana查询到我们的业务日志了。

当然kafka、logstash、es得您自己去搭建。

若您可把这几个服务跑在Kubernetes可以参考我给您生成的yaml 直接apply 进去就能跑。

模版配置

生成filebeat会用到两个模版,一个是容器的模版FilebeatContainer,另一个是ConfigMap的模版FilebeatConfigMap,您可根据自己的需求调整相应的模版文件。

3.4 查询构建应用日志

构建应用的流程是通过创建应用提交一些信息进行处理

  • 从git 仓库获取tags列表
  • 调用jenkins API 将应用的相关参数及版本信息传给它并进行构建
  • Jenkins Job执行Shell命令 执行docker build并上传致Docker 仓库
  • 平台监听到job已经执行完成并成功了,调用kubernetes API更新应用的Image地址
  • 监听升级情况
  • 发送通知

以上是构建应用的后端流程,而前端就变得比较简单了。只需要在应用详情页点击"Build"按钮,在弹出的对话框中选择相应用的tags版本并提交就行了,如下图:

查询构建日志

点击详情页的build日志选项卡,会显示最近的构建记录,点击左侧相应的版本可以查看该版本的构建情况,也可以对正在松建的应用进行中断,如下图:

3.5 切换服务模式

服务模式切换比较麻烦,需要您的Kubernetes支持,目前我们使用的是istio的方案,也就是说您需要在你的kubernetes上安装istio的相关服务,并且在我们的模版管理将istio所需要的几个模版配置上。才能开启此功能。

如果您没有安装Istio,可跳过此章。

依赖

在"模版管理"菜单找到Gateway、VritualService、InitContainer、IstioProxy这几个模版,根据自己环境的情况进行调整。

  • Gateway: 本平台设计的模式是一个Namespace所对应一个Gateway,多个Namespace空间就会有多个Gateway,VirtualService选择的是本Namespace下的Gateway。
  • VirtualService: 在生成应用的对外访问入口时与Ingress一起生成。

使用过Istio的同学应该都知道,要实现Istio所提供的相关功能需要在Pods里注入两个容器,一个是proxy_init,另一个是proxyv2

  • InitContainer: 模版是是初始化设置的yaml,比如将流量通过

iptables的方式转发给 proxy

  • IstioProxy: 模版就是将pods的所有流量代理的yaml

流程

下图是我们架构流量进入到我们容器所图:

  • DNS 将域名解析到VIP
  • VIP 将80的流量转发边缘节点的31380端口(这个是IstioIngressGateway控制器的Service的NodePort)
  • 前面我们所说过每个Namespace都会有至少一个对应的Gateway,Gateway的hosts就是xxx.{namespace}.xxx.com
  • VirtualService里的destination.host 就是Service的名称。

以上是kplcloud平台的流程,如果您有需要调整的,只需要修改模版就好,不需要调整代码。

一键切换

如下图,在应用详情页面选择“模式”按钮,在弹出的对话框中选择"Service Mesh"选项目,后点击提交后Pods会自动重起。

你需要在app.cfg文件开起ServiceMesh功能

[server]
service_mesh = true

3.6 扩容

扩容是对Pods的使用资源进行扩容,例如最大使用的CPU及内存资源。

在应用的详情页面,在右上角找到“扩容”按钮,并点开。

在弹出的对话框中拖动CPU和内存,可对其设置一个基础值及一个最大值,如下图:

选择好相应的值后点击“保存”按钮后,会重起该应用的所有POD。重启后的POD可使用的最大CPU及内存资源就是您刚刚设置的值。

所对应用以deployment的yaml参数:

requests:
    limits:
        cpu: 1
        memory: 128Mi
    requests:
        cpu: 500m
        memory: 64Mi

3.7 伸缩

伸缩是对该应用所启动的pods数量进行一个控制。

同样进入应用的详情页页,在右上角找到“伸缩”按钮并点开。

在弹出来的对话框中选择启动的POD数量,如下图:

提交之后若数量大于之前的数量,则会启动缺少的POD数量,若小于之前的值,将会逐步减少应用的POD。

目前给的最大值是8个pod,资源可使用的内存是16G,若您的应用超过我们所设定的最大值。想办法优化吧,64核128G内存都不够用,这种级别的应用不适合用Docker。

这种级别的应用最好是拆了吧。

3.8 挂载持久化存储卷

本平台是通过storageclass来动态创建PV。也就是说咱们依赖于storageclass,如果您的Kubernetes不支持相应的存储试,将无法非常方便的进行挂载。

目前暂不支持挂载多个PVC,或许以后会更新吧。

这里演示的是用的NFS进行演示,实际使用时可根据自己的需求配置相应的provisioner,其他配置是一样的不需要调整,只需要在“模版管理” 调整StorageClass和PersistentVolumeClaim模版。

创建持久化存储卷声明

在菜单找到“配置与存储”->"持久化存储卷声明"。

选择应用的空间,并点击“创建”按钮

在弹出的对话框中会有几个选项目:

  • 名称:存储卷的名称(规则: ^[a-z0-9]([-a-z0-9])?([a-z0-9]([-a-z0-9]*[a-z0-9])?)*$)
  • 容量:可以使用的存储区大小,最小单位Mi,最大Ti
  • 访问模式:

    • ReadWriteOnce——该卷可以被单个节点以读/写模式挂载
    • ReadOnlyMany——该卷可以被多个节点以只读模式挂载
    • ReadWriteMany——该卷可以被多个节点以读/写模式挂载
  • 存储类:如果没有存储类请查看创建存储类

挂载到应用目录

当存储卷创建好之后就可以在应用进行挂载了。

同样的进入应用详情页面,找到“持久化存储”选项卡,如图:

点击“添加”按钮,在弹出来的对话框加输入相关信息:

  • 持久化存储路径:该路径为容器里的挂载路径
  • 持久化存储卷声明:这里会列出您可以使用的存储卷

填写好路径及选择好存储卷后点击提交,改应用的所有POD的逐步重启动。

挂载完成之后可以看到所挂载的相关信息:

最终生成的yaml结果:

volumes:
- name: soup-hello-pvc
  persistentVolumeClaim:
    claimName: test-data
containers:
- volumeMounts: 
  - name: "soup-hello-pvc"
    mountPath: "/soupzhang"

四、应用审核部署

如果配置了邮箱,用户提交审核之后会给管理员发送邮件,邮件里带有审核地址。

或者您也可以在应用列表里找到未审核的应用进入。

4.1 审核应用

提交的基础信息

生成的kubernetes yaml

代码库中的Dockerfile文件

驳回

如果管理员觉得提交的有问题,可以进行驳回,驳回填定理由会发送至提交者的邮箱。

若没有啥问题,可以点击“开始部署”按钮。

开始部署之后应用会自动在jenkins上创建一个job,并自动进行build。

五、调整容器时间

在我们项目维护过程中,可能会遇到需要修改服务器时间,平台的工具集功能就可以满足您的需求了~

在这需要注意,此功能依赖faketime,请在宿主机编译faketime扩展。路径在 /usr/local/lib/libfaketime.so.1

调整服务时间(菜单栏:工具集->调整时间)

在项目列表中筛选您要修改的项目,点击 修改时间,确认之后会重启服务生效。

开源地址:

作者:宜人金科-财富技术部-创新团队

来源:宜信技术学院


宜信技术学院
4.3k 声望13.8k 粉丝

宜信技术学院是宜信旗下的金融科技能力展示与输出平台。通过分享在金融科技领域的开源成果、研发实践促进金融科技生态圈企业创新升级。