本文介绍开普勒云平台如何安装依赖。
kplcloud是一个基于Kubernetes的轻量级PaaS平台,通过可视化的界面对应用进行管理,降低应用容器化的对度,从而减少应用容器化的时间成本。
Kplcloud已在宜信服务于宜人财富等多个团队,稳定运行了近两年,目前平台已在生产环境跑着上百个应用,近千个容器。
建议将与开普勒相关的服务独立到一个专有的 Namespace下,在Kubernetes创建新的空间。您可以执行以下命令创建该空间
$ kubectl create namespace kpaas或执行以下命令 :
$ kubectl apply -f install/kubernetes/namespace.yaml这里使用的是NFS的方式进行持久化,如果您有自己的持久化方案可以不使用改方案。
$ kubectl apply -f install/kubernetes/storage/serviceaccount.yaml $ kubectl apply -f install/kubernetes/storage/rbac.yaml $ kubectl apply -f install/kubernetes/storage/provisioner.yaml $ kubectl apply -f install/kubernetes/storage/stroageclass.yaml根据您自己的环境调service地址及path。
volumes: - name: kpl-nfs-client-root nfs: server: 172.16.0.4 path: "/home/data" containers: - name: kpl-nfs-client-provisioner image: quay.io/external_storage/nfs-client-provisioner:latest env: - name: PROVISIONER_NAME value: fuseim.pri/ifs - name: NFS_SERVER value: 172.16.0.4 - name: NFS_PATH value: "/home/data"
为了方便给大家演示,redis也使用的docker版本部署在kubernetes集群上,真实环境请使用独立的redis服务器或集群
如果您还没有初始化持久化存储的,请在这里持久化存储配置好存储类再安装Redis服务。
redis的配置相关信息写在configmap里面 statefulset.yaml
官方redis默认的存在/data目录,所以我们需要将持久化存储目标配置在/data目录下。
如果您的独立的Consul集群或不想使用Consul的话,不需要执行以下命令。 以下命令是将docker版的consul集群安装在您的kubernetes集群上前提是前必须有持久化存储。
如果您还没有初始化持久化存储的,请在这里持久化存储配置好存储类再安装consul集群。
咱们采用的是StatefulSet的方式部署集群,若您已经有了持久化的存储类,将storageClassName修改成您的存储类包就好。
ingress.yaml 提供对外访问的入口
configmap.yaml consul cluster server的配置文件
这个kubernetes亲和度问题您可能需要关注一下,如果您的kubernetes是单点,请使用以下注释掉的代码。否由会无法起动服务。
affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app: consul component: server topologyKey: kubernetes.io/hostname # # 单节点用这个 # preferredDuringSchedulingIgnoredDuringExecution: # - wight: 100 # podAffinityTerm: # topologyKey: kubernetes.io/hostname为了方便给大家演示,rabbitmq也使用的docker版本部署在kubernetes集群上,真实环境请使用独立的rabbitmq服务器
如果您还没有初始化持久化存储的,请在这里持久化存储配置好存储类再安装rabbitMQ服务。
有状态服务: statefulset.yaml 入口: ingress.yaml
kpass在rabbitmq里需要创建:
Vhost: kplcloudExchanges: kplcloud-exchangeUser: kplcloudRoutingKey: kplcloud为了方便给大家演示,mysql也使用的docker版本部署在kubernetes集群上,真实环境请使用独立的mysql服务器
如果您还没有初始化持久化存储的,请在这里持久化存储配置好存储类再安装mysql服务。
statefulset.yaml
本项目需要创建数据库: kplcloud
Logstash、ES对机器要的求比较高,建议使用独立的ELK集群负责日志的采集分析
如果您非要使用Docker版的elk的并且部署在Kubernetes集群里,如果还没有初始货持久化存储,先初始化持久化存储的,请在这里持久化存储配置好存储类再安装相关服务服务。
ELK主要包含Elasticsearch、Logstash、Kibana几个服务,kibana和logstash可以做在Deployment,全ES需要持久化,因为日志数据是存在ES上的。
$ kubectl apply -f install/kubernetes/elk/elasticsearch.yaml $ kubectl apply -f install/kubernetes/elk/logstash.yaml $ kubectl apply -f install/kubernetes/elk/kibana.yaml $ kubectl apply -f install/kubernetes/elk/ingress.yaml镜像仓库就别在跑kubernetes集群上了,似乎也跑不了,找一台容量大的有安装Docker的服务器进行搭建。
安装启动方式,请查看官方说明:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md
下载Harbor安装文件,我这下的是离线处理,如果下载不了请加代理
$ https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.1.tgz如果还没有初始货持久化存储,先初始化持久化存储的,请在这里持久化存储配置好存储类再安装相关服务服务。
Prometheus 需要将数据存在本地,所以需要挂载持久化存储。
$ kubectl apply -f install/kubernetes/prometheus/deployment.yaml $ kubectl apply -f install/kubernetes/prometheus/ingress.yaml $ kubectl apply -f install/kubernetes/prometheus/configmap.yaml $ kubectl apply -f install/kubernetes/prometheus/serviceaccount.yaml $ kubectl apply -f install/kubernetes/prometheus/service.yaml $ kubectl apply -f install/kubernetes/prometheus/persistentvolumeclaim.yamlconfigmap.yaml文件有五个文件:
etcd3.rules.ymlkube-state-metrics_rules.ymlkubelet_rule.ymlkubernetes_rule.ymlprometheus.yml在prometheus里引用了上面4个文件。如果您有新的规则可以在这里增加。
在prometheus.yml 文件里有配置 alerting 目前默认发身 alertmanager:9093 ,若您有自己的报警管理平台,修改该地址就行,若还想使用alertmanager的话请看安装AlertManager。
Alertmanager 主要是接收来自prometheus 的alert数据
可以独立安装不使用Docker,以下案例是部署在kubernetes集群上。
$ kubectl apply -f install/kubernetes/alertmanager/deployment.yaml $ kubectl apply -f install/kubernetes/alertmanager/ingress.yaml $ kubectl apply -f install/kubernetes/alertmanager/configmap.yaml $ kubectl apply -f install/kubernetes/alertmanager/service.yaml这里采用webhook的方式将报警信息发送到kplcloud平台,kplcloud接收数据处理并入rabbitmq。
apiVersion: v1 data: config.yml: |- global: route: group_by: ['alertname', 'cluster', 'service'] group_wait: 30s group_interval: 5m repeat_interval: 10m receiver: webhook receivers: - name: 'webhook' webhook_configs: - url: 'http://kplcloud:8080/public/prometheus/alerts' kind: ConfigMap metadata: name: alertmanagerkplcloud处理完的数据最终根据相应的规则推送给相应的用户及平台等。
基础服务安装: install.md
若您的其他服务都已经准备好了,可以直接执行以下命令在kubernetes上进行部署开普勒云平台。
$ kubectl apply -f install/kubernetes/kpaas/configmap.yaml $ kubectl apply -f install/kubernetes/kpaas/deployment.yaml $ kubectl apply -f install/kubernetes/kpaas/service.yaml $ kubectl apply -f install/kubernetes/kpaas/ingress.yaml如果您有私有仓库,记得在master节点上执行一下:
$ kubectl create secret generic regcred --from-file=.dockerconfigjson=/root/.docker/config.json --type=kubernetes.io/dockerconfigjson -n default在每个namespace下都创建一下,这样k8s就有权限拉取私有仓库的镜像了
Deployment需要把imagePullSecrets加上:
imagePullSecrets: - name: regcred作者:宜人金科-财富技术部-创新团队
来源:宜信技术学院