Commit bd7880a6 authored by xuezj's avatar xuezj

联调

parent bc4bf8e7
const Router = require('koa-router')
const yaml = require('js-yaml')
const qs = require('querystring')
const templates = require('../serviceTemplate')
let newNsKey = ''
......@@ -12,9 +13,16 @@ router.get('/', async (ctx) => {
ctx.body = ctx.ok(data)
})
router.get('/info', async (ctx) => {
const data = await ctx.cluster.namespace_get()
const ns = data.namespaces.find(item => item.name === qs.unescape(ctx.request.query.namespace))
ctx.body = ctx.ok(ns)
})
router.post('/create', async (ctx) => {
await ctx.cluster.namespace_create(ctx.request.body.name)
await ctx.cluster.ingress_create(ctx.request.body.name)
// await ctx.cluster.ingress_create(ctx.request.body.name)
ctx.body = ctx.ok()
})
......@@ -92,7 +100,7 @@ function generateUUID() {
const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
const r = (d + Math.random() * 16) % 16 | 0;
d = Math.floor(d / 16);
return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
return (c === 'x' ? r : ((r & 0x3) | 0x8)).toString(16);
});
return uuid;
}
......
const Router = require('koa-router')
const yaml = require('js-yaml')
const logger = require('koa-log4').getLogger()
const templates = require('../serviceTemplate')
const { ingressCreate, ingressDelete } = require('../kubeService/ingress')
const TYPES = ['ui', 'java', 'node', 'python', 'go']
const router = new Router()
module.exports = router
......@@ -17,32 +15,31 @@ router.get('/', async (ctx) => {
router.post('/create', async (ctx) => {
const {
type, serviceName, namespace, image, system_name, lable,
type, serviceName, namespace, image, system_name, domain, label,
} = ctx.request.body
if (!TYPES.includes(type)) {
ctx.body = ctx.fail('不支持的服务类型')
return ctx.body
}
logger.info('创建服务', ctx.request.body)
const data = {
serviceName,
namespace,
image,
system_name,
lable,
}
if (!system_name) {
// ui abTest的时候不一样
data.system_name = serviceName
}
const template = templates[type].replace(/{{([A-Za-z0-9_]+)}}/g, function () {
if (data[arguments[1]] === undefined) {
throw new Error('缺少模板所需变量')
throw new Error(`缺少模板所需变量: ${arguments[1]}`)
}
return data[arguments[1]]
})
const params = yaml.load(template)
await ctx.cluster.service_create(params, type)
await ingressCreate(namespace, serviceName)
await ctx.cluster.service_create(params, label)
if (domain) {
await ingressCreate({ namespace, serviceName, domain })
}
ctx.body = ctx.ok('创建成功')
})
router.post('/details', async (ctx) => {
......
......@@ -2,20 +2,17 @@ const path = require('path')
const Client = require('kubernetes-client').Client
const config = require('kubernetes-client').config
// const client = new Client({ config: config.fromKubeconfig(), version: '1.9' })
console.log(path.resolve(__dirname, './kubeConfig.yaml'))
const client = new Client({
config: config.fromKubeconfig(
path.resolve(__dirname, './kubeConfig.yaml'),
),
version: '1.10',
})
const getManifest = (namespace, servicename) => ({
const getManifest = ({ namespace, serviceName, domain }) => ({
apiVersion: 'extensions/v1beta1',
kind: 'Ingress',
metadata: {
name: servicename,
name: serviceName,
namespace,
annotations: {
'kubernetes.io/ingress.class': 'traefik',
......@@ -24,13 +21,13 @@ const getManifest = (namespace, servicename) => ({
spec: {
rules: [
{
host: `${servicename}-${namespace}.liangkebang.net`,
host: `${domain}-${namespace}.liangkebang.net`,
http: {
paths: [
{
path: '/',
backend: {
serviceName: `${servicename}`,
serviceName: `${serviceName}`,
servicePort: 80,
},
},
......@@ -42,17 +39,20 @@ const getManifest = (namespace, servicename) => ({
})
const ingressGet = async (namespace, servicename) => client.apis.extensions.v1beta1.namespaces(namespace)
.ingresses(servicename).get()
const ingressCreate = async (namespace, servicename) => {
const Manifest = getManifest(namespace, servicename)
await client.apis.extensions.v1beta1.namespace(namespace).ingresses
.post({ body: Manifest })
const ingressCreate = async (options) => {
const m = getManifest(options)
await client.apis.extensions.v1beta1.namespace(options.namespace).ingresses
.post({ body: m })
}
const ingressUpdate = async (namespace, servicename, host) => {
const Manifest = getManifest(namespace, servicename)
Manifest.spec.rules[0].host = host
await client.apis.extensions.v1beta1.namespace(namespace).ingresses(servicename)
.patch({ body: Manifest })
}
const ingressDelete = async (namespace, servicename) => {
await client.apis.extensions.v1beta1.namespaces(namespace).ingresses(servicename).delete()
}
......
......@@ -8,7 +8,7 @@ portMappings.0.lbPort: 80
portMappings.0.containerPort: 80
containers.0.containerName: {{system_name}}
containers.0.image: {{image}}
containers.0.image: ccr.ccs.tencentyun.com/{{image}}
containers.0.envs.0.name: SYSTEM_NAME
containers.0.envs.0.value: {{system_name}}
containers.0.envs.1.name: NAMESPACE
......
......@@ -8,7 +8,7 @@ portMappings.0.lbPort: 3306
portMappings.0.containerPort: 3306
containers.0.containerName: mysql
containers.0.image: {{image}}
containers.0.image: ccr.ccs.tencentyun.com/{{image}}
containers.0.volumeMounts.0.volumeName: mysql-vol
containers.0.volumeMounts.0.mountPath: /var/lib/mysql
containers.0.volumeMounts.0.mode: rw
......
......@@ -8,7 +8,7 @@ portMappings.0.lbPort: 80
portMappings.0.containerPort: 80
containers.0.containerName: {{serviceName}}
containers.0.image: {{image}}
containers.0.image: ccr.ccs.tencentyun.com/{{image}}
containers.0.envs.0.name: SYSTEM_NAME
containers.0.envs.0.value: {{serviceName}}
containers.0.envs.1.name: NAMESPACE
......
......@@ -12,7 +12,7 @@ portMappings.1.lbPort: 15672
portMappings.1.containerPort: 15672
containers.0.containerName: rabbitmq
containers.0.image: {{image}}
containers.0.image: ccr.ccs.tencentyun.com/{{image}}
containers.0.volumeMounts.0.volumeName: rabbitmq-vol
containers.0.volumeMounts.0.mountPath: /var/lib/rabbitmq
containers.0.volumeMounts.0.mode: rw
......
......@@ -24,7 +24,7 @@ portMappings.4.lbPort: 6383
portMappings.4.containerPort: 6383
containers.0.containerName: redis
containers.0.image: {{image}}
containers.0.image: ccr.ccs.tencentyun.com/{{image}}
containers.0.volumeMounts.0.volumeName: redis-vol
containers.0.volumeMounts.0.mountPath: /var/lib/redis
containers.0.volumeMounts.0.mode: rw
......
......@@ -8,7 +8,7 @@ portMappings.0.lbPort: 80
portMappings.0.containerPort: 80
containers.0.containerName: {{system_name}}
containers.0.image: {{image}}
containers.0.image: ccr.ccs.tencentyun.com/{{image}}
containers.0.envs.0.name: SYSTEM_NAME
containers.0.envs.0.value: {{system_name}}
containers.0.envs.1.name: NAMESPACE
......
......@@ -12,7 +12,7 @@ portMappings.1.lbPort: 9090
portMappings.1.containerPort: 9090
containers.0.containerName: zookeeper
containers.0.image: {{image}}
containers.0.image: ccr.ccs.tencentyun.com/{{image}}
containers.0.volumeMounts.0.volumeName: zookeeper-vol
containers.0.volumeMounts.0.mountPath: /var/lib/zookeeper
containers.0.volumeMounts.0.mode: rw
......
const logger = require('koa-log4').getLogger()
const Client = require('./tke.service')
const domainConfig = require('../config')
......@@ -28,6 +30,7 @@ class Cluster extends Client {
}
async service_create(params, type) {
logger.info('创建服务详细信息:', params, type)
params.clusterId = this.clusterId
const str = JSON.stringify(params)
await this.post('CreateClusterService', params)
......@@ -68,6 +71,7 @@ class Cluster extends Client {
}
ingress_create(namespace) {
logger.info()
return this.post('CreateIngress', {
ingressName: `qa-${namespace}`,
ingressDesc: '',
......
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