Commit 60464d13 authored by 智勇's avatar 智勇

暂存

parent adce3387
...@@ -6,8 +6,8 @@ const logger = require('koa-log4').getLogger() ...@@ -6,8 +6,8 @@ const logger = require('koa-log4').getLogger()
const templates = require('../serviceTemplate') const templates = require('../serviceTemplate')
const lruCache = require('../services/lruCache.service') const lruCache = require('../services/lruCache.service')
const { ingressCreate, ingressDelete } = require('../kubeService/ingress') const { ingressCreate, ingressDelete } = require('../kubeService/ingress')
const { podGet } = require('../kubeService/service') const { projectConfig, defaultConfig } = require('../serviceTemplate/resourceLimit')
const {projectConfig, defaultConfig} = require('../serviceTemplate/resourceLimit') const { podGet, serviceCreate } = require('../kubeService/service')
const router = new Router() const router = new Router()
module.exports = router module.exports = router
...@@ -50,6 +50,11 @@ const createService = async (ctx) => { ...@@ -50,6 +50,11 @@ const createService = async (ctx) => {
type, serviceName, namespace, image, system_name, domain, label, type, serviceName, namespace, image, system_name, domain, label,
} = ctx.request.body } = ctx.request.body
logger.info('创建服务', ctx.request.body) logger.info('创建服务', ctx.request.body)
if (serviceName === 'mysql') {
serviceCreate(namespace, serviceName, image)
ctx.body = ctx.ok('创建成功')
return
}
const data = { const data = {
serviceName, serviceName,
namespace, namespace,
...@@ -62,7 +67,7 @@ const createService = async (ctx) => { ...@@ -62,7 +67,7 @@ const createService = async (ctx) => {
} }
// 资源限制 // 资源限制
let resources = projectConfig[data.system_name] || defaultConfig[type] const resources = projectConfig[data.system_name] || defaultConfig[type]
logger.info('资源限制', JSON.stringify(resources)) logger.info('资源限制', JSON.stringify(resources))
data.resources = resources data.resources = resources
...@@ -76,10 +81,8 @@ const createService = async (ctx) => { ...@@ -76,10 +81,8 @@ const createService = async (ctx) => {
// todo: 放开限制,暂时只更新了clotho的镜像 // todo: 放开限制,暂时只更新了clotho的镜像
// java项目的就绪检查需要定制 // java项目的就绪检查需要定制
if (type === 'java' && data.system_name !== 'clotho' ) { if (type === 'java' && data.system_name !== 'clotho') {
params = _.omitBy(params, function (value, key) { params = _.omitBy(params, (value, key) => key.indexOf('healthCheck') !== -1)
return key.indexOf('healthCheck') !== -1
})
} }
logger.info(params) logger.info(params)
......
const path = require('path') const path = require('path')
const Client = require('kubernetes-client').Client const Client = require('kubernetes-client').Client
const config = require('kubernetes-client').config const config = require('kubernetes-client').config
const _ = require('lodash')
const YAML = require('yamljs');
const yamls = require('../yamls')
const client = new Client({ const client = new Client({
config: config.fromKubeconfig( config: config.fromKubeconfig(
...@@ -12,7 +15,31 @@ const client = new Client({ ...@@ -12,7 +15,31 @@ const client = new Client({
const serviceGet = async (namespace, serviceName) => client.api.v1.namespaces(namespace).services(serviceName).get() const serviceGet = async (namespace, serviceName) => client.api.v1.namespaces(namespace).services(serviceName).get()
const podGet = async namespace => client.api.v1.namespaces(namespace).pods.get() const podGet = async namespace => client.api.v1.namespaces(namespace).pods.get()
const serviceCreate = async (namespace, serviceName, image) => {
const data = {
namespace,
app: serviceName,
image,
}
const yamlManifest = yamls[serviceName].replace(/{{([A-Za-z0-9_\.]+)}}/g, function () {
if (_.get(data, arguments[1], null) === null) {
throw new Error(`缺少模板所需变量: ${arguments[1]}`)
}
return _.get(data, arguments[1])
})
const nativeObject = YAML.load(yamlManifest);
// console.log(1, nativeObject)
const jsonstr = JSON.stringify(nativeObject);
const jsonTemp = JSON.parse(jsonstr, null);
// jsonstr = JSON.parse(jsonstr, null);
client.api.v1.namespaces(namespace).services.post({ body: jsonTemp })
}
module.exports = { module.exports = {
serviceGet, serviceGet,
podGet, podGet,
serviceCreate,
} }
const fs = require('fs')
const mysql = fs.readFileSync('yamls/mysql.yaml', 'utf8')
module.exports = {
mysql,
}
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: {{app}}
namespace: {{namespace}}
spec:
storageClassName: cbs
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: extensions/v1beta1 apiVersion: extensions/v1beta1
kind: Deployment kind: Deployment
metadata: metadata:
...@@ -29,10 +44,22 @@ spec: ...@@ -29,10 +44,22 @@ spec:
limits: limits:
memory: 1024Mi memory: 1024Mi
cpu: 500m cpu: 500m
securityContext: env:
privileged: false - name: MYSQL_DATABASE
terminationMessagePath: /dev/termination-log value: db
dnsPolicy: ClusterFirst - name: MYSQL_PASSWORD
value: qatest
- name: MYSQL_ROOT_PASSWORD
value: Quantgroup2017
- name: MYSQL_USER
value: qa
volumeMounts:
- mountPath: "/data/mysql"
name: mysql
volumes:
- name: mysql
persistentVolumeClaim:
claimName: pvc-mysql-default
imagePullSecrets: imagePullSecrets:
- name: qcloudregistrykey - name: qcloudregistrykey
- name: tencenthubkey - name: tencenthubkey
...@@ -59,4 +86,3 @@ spec: ...@@ -59,4 +86,3 @@ spec:
targetPort: 3306 targetPort: 3306
selector: selector:
qcloud-app: {{app}} qcloud-app: {{app}}
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: {{app}}
namespace: {{namespace}}
labels:
qcloud-app: {{app}}
spec:
replicas: 1
selector:
matchLabels:
qcloud-app: {{app}}
strategy:
type: Recreate
template:
metadata:
labels:
qcloud-app: {{app}}
spec:
revisionHistoryLimit: 2
containers:
- image: ccr.ccs.tencentyun.com/{{image}}
imagePullPolicy: Always
name: {{app}}
resources:
requests:
memory: 64Mi
limits:
memory: 256Mi
securityContext:
privileged: false
terminationMessagePath: /dev/termination-log
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
ports:
- containerPort: 80
restartPolicy: Always
dnsPolicy: ClusterFirst
volumes:
- name: logs-vol
emptyDir: {}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment