Commit 22a35a2e authored by kewei.jia's avatar kewei.jia

change cluster

parent 8bd410e2
...@@ -2,23 +2,18 @@ const schedule = require('node-schedule') ...@@ -2,23 +2,18 @@ const schedule = require('node-schedule')
const _ = require('lodash') const _ = require('lodash')
const sleep = require('sleep') const sleep = require('sleep')
const logger = require('koa-log4').getLogger('deployLatest') const logger = require('koa-log4').getLogger('deployLatest')
// const cluster = require('../services/tke.clusterService').create()
const path = require('path')
const Client = require('kubernetes-client').Client
const config = require('kubernetes-client').config
const { serviceRestart, getServicesFormat, getAllNamespace } = require('../kubeService/service') const { serviceRestart, getServicesFormat, getAllNamespace } = require('../kubeService/service')
const container = require('../services/tke.containerService').create() const container = require('../services/tke.containerService').create()
const getClient = require('../resource/getClient')
const repoNS = ['qa-java', 'qa-ui', 'qa-node', 'qa-python'] const repoNS = ['qa-java', 'qa-ui', 'qa-node', 'qa-python']
// const testNamespace = ['qa', 'fe', 'data', 'fis', 'xyqb2'] const testNamespace = ['qa', 'fe', 'data', 'fis', 'xyqb2']
const clientNew = {}
const client = new Client({ const deploy = async (cluster) => {
config: config.fromKubeconfig( if (!clientNew[cluster]) {
path.resolve(__dirname, './../kubeService/kubeConfig-qa.yaml'), clientNew[cluster] = await getClient(cluster)
), }
version: '1.10',
})
const deploy = async () => {
logger.info('deployLatest start') logger.info('deployLatest start')
for (const ns of repoNS) { for (const ns of repoNS) {
const repoNSData = await container.repository_get(ns) const repoNSData = await container.repository_get(ns)
...@@ -27,15 +22,15 @@ const deploy = async () => { ...@@ -27,15 +22,15 @@ const deploy = async () => {
const repoName = repo.reponame.split('/')[1] const repoName = repo.reponame.split('/')[1]
const latest = await container.getTagByName(repo.reponame, 'latest') const latest = await container.getTagByName(repo.reponame, 'latest')
const latestImageID = _.get(latest.tagInfo, '[0].tagId', '') const latestImageID = _.get(latest.tagInfo, '[0].tagId', '')
const ns = await getAllNamespace(client) let ns = await getAllNamespace(clientNew[cluster])
// ns = ns.namespaces && ns.namespaces.filter(item => testNamespace.includes(item.name)) ns = ns.namespaces && ns.namespaces.filter(item => testNamespace.includes(item.name))
for (const namespace of ns.namespaces) { for (const namespace of ns) {
const svcs = await getServicesFormat(client, namespace.name) const svcs = await getServicesFormat(clientNew[cluster], namespace.name)
for (const svc of svcs) { for (const svc of svcs) {
if (svc.serviceName === repoName && svc.image.indexOf('latest') !== -1) { if (svc.serviceName === repoName && svc.image.indexOf('latest') !== -1) {
if (latestImageID !== svc.imageID.split('@')[1]) { if (latestImageID !== svc.imageID.split('@')[1]) {
logger.info('部署项目', namespace.name, svc.podName) logger.info('部署项目', namespace.name, svc.podName)
await serviceRestart(client, namespace.name, svc.podName) await serviceRestart(clientNew[cluster], namespace.name, svc.podName)
sleep.msleep(500) sleep.msleep(500)
} }
} }
...@@ -51,7 +46,7 @@ module.exports = () => { ...@@ -51,7 +46,7 @@ module.exports = () => {
// schedule.scheduleJob('*/2 * * * *', async () => { // schedule.scheduleJob('*/2 * * * *', async () => {
schedule.scheduleJob('0 2 * * *', async () => { schedule.scheduleJob('0 2 * * *', async () => {
try { try {
await deploy() await deploy('qa')
} catch (e) { } catch (e) {
logger.info('deployLatest', e) logger.info('deployLatest', e)
} }
......
...@@ -2,17 +2,11 @@ const schedule = require('node-schedule') ...@@ -2,17 +2,11 @@ const schedule = require('node-schedule')
const request = require('request') const request = require('request')
const moment = require('moment') const moment = require('moment')
const Redis = require('ioredis') const Redis = require('ioredis')
const path = require('path')
const Client = require('kubernetes-client').Client
const config = require('kubernetes-client').config
const { podGetstatus, getPods } = require('../kubeService/service') const { podGetstatus, getPods } = require('../kubeService/service')
const getClient = require('../resource/getClient')
const clientNew = {}
const client = new Client({
config: config.fromKubeconfig(
path.resolve(__dirname, './../kubeService/kubeConfig-qa.yaml'),
),
version: '1.10',
})
const redis = new Redis(6380, '172.30.220.22') const redis = new Redis(6380, '172.30.220.22')
const awaitRequest = function (options) { const awaitRequest = function (options) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
...@@ -67,8 +61,7 @@ const dingTalkPush = async function (item, is_recover) { ...@@ -67,8 +61,7 @@ const dingTalkPush = async function (item, is_recover) {
+ `> 命名空间 : ${item.metadata.namespace}\n\n` + `> 命名空间 : ${item.metadata.namespace}\n\n`
+ `> 异常原因 : ${message}\n\n` + `> 异常原因 : ${message}\n\n`
+ `> 异常时间 : ${moment() + `> 异常时间 : ${moment()
.format('YYYY-MM-DD HH:mm:ss')}\n\n` .format('YYYY-MM-DD HH:mm:ss')}\n\n`,
+ `[查看详情](http://qa2.liangkebang.com/dockers/runingEnv/${item.metadata.namespace})`,
}, },
}; };
await awaitRequest({ await awaitRequest({
...@@ -90,7 +83,10 @@ const checkRecoverPod = async () => { ...@@ -90,7 +83,10 @@ const checkRecoverPod = async () => {
const podname = resKeys[i].split('#')[1] const podname = resKeys[i].split('#')[1]
// 获取新的状态 // 获取新的状态
if (podname.indexOf(resKeys[i].split('#')[1]) > -1) { if (podname.indexOf(resKeys[i].split('#')[1]) > -1) {
const Pod = await getPods(client, namespace) if (!clientNew.qa) {
clientNew.qa = await getClient('qa')
}
const Pod = await getPods(clientNew.qa, namespace)
Pod.body.items.forEach(async (item) => { Pod.body.items.forEach(async (item) => {
if (item.metadata.name.indexOf(podname) > -1) { if (item.metadata.name.indexOf(podname) > -1) {
if (item.status.conditions.length === 3) { if (item.status.conditions.length === 3) {
...@@ -122,7 +118,10 @@ const checkRecoverPod = async () => { ...@@ -122,7 +118,10 @@ const checkRecoverPod = async () => {
}); });
} }
const checkErrorPod = async () => { const checkErrorPod = async () => {
const listPods = await podGetstatus(client) if (!clientNew.qa) {
clientNew.qa = await getClient('qa')
}
const listPods = await podGetstatus(clientNew.qa)
listPods.body.items.forEach((item) => { listPods.body.items.forEach((item) => {
const key = `${item.metadata.namespace}:${item.metadata.name}#${item.metadata.labels['qcloud-app']}` const key = `${item.metadata.namespace}:${item.metadata.name}#${item.metadata.labels['qcloud-app']}`
item.status.conditions.forEach(async (value) => { item.status.conditions.forEach(async (value) => {
......
...@@ -50,12 +50,12 @@ const createService = async (ctx) => { ...@@ -50,12 +50,12 @@ const createService = async (ctx) => {
data.resources = resources data.resources = resources
logger.info('创建服务', data) logger.info('创建服务', data)
await serviceCreate(ctx.cluster, ctx.client, data) await serviceCreate(ctx.cluterParams, ctx.client, data)
if (label !== 'base') { if (label !== 'base') {
if (serviceName === 'xyqb-user2') { if (serviceName === 'xyqb-user2') {
await ingressCreate(ctx.client, namespace, 'xyqb-user2-2', 'passportapi2', ctx.clusterDomain) await ingressCreate(ctx.client, namespace, 'xyqb-user2-2', 'passportapi2', ctx.cluterParams.clusterDomain)
} }
await ingressCreate(ctx.client, namespace, serviceName, domain, ctx.clusterDomain) await ingressCreate(ctx.client, namespace, serviceName, domain, ctx.cluterParams.clusterDomain)
} }
ctx.body = ctx.ok('创建成功') ctx.body = ctx.ok('创建成功')
} }
...@@ -153,7 +153,7 @@ router.get('/listEnvVars', async (ctx) => { ...@@ -153,7 +153,7 @@ router.get('/listEnvVars', async (ctx) => {
cluster = parmars.split('@')[1] cluster = parmars.split('@')[1]
} }
if (!clientNew[cluster]) { if (!clientNew[cluster]) {
clientNew[cluster] = getClient(cluster) clientNew[cluster] = await getClient(cluster)
} }
const res = await Promise.all([ const res = await Promise.all([
getPods(clientNew[cluster], namespace), getPods(clientNew[cluster], namespace),
...@@ -201,7 +201,7 @@ router.get('/listEnvVarsNew', async (ctx) => { ...@@ -201,7 +201,7 @@ router.get('/listEnvVarsNew', async (ctx) => {
cluster = parmars.split('@')[1] cluster = parmars.split('@')[1]
} }
if (!clientNew[cluster]) { if (!clientNew[cluster]) {
clientNew[cluster] = getClient(cluster) clientNew[cluster] = await getClient(cluster)
} }
const res = await Promise.all([ const res = await Promise.all([
getPods(clientNew[cluster], namespace), getPods(clientNew[cluster], namespace),
......
...@@ -85,8 +85,9 @@ const createNamespace = async (client, name, description) => { ...@@ -85,8 +85,9 @@ const createNamespace = async (client, name, description) => {
} }
const serviceCreate = async (cluster, client, data) => { const serviceCreate = async (cluterParams, client, data) => {
data.cluster = cluster data.cluster = cluterParams.cluster
data.hosts = cluterParams.hosts
const { namespace, serviceName } = data const { namespace, serviceName } = data
const manifestArray = makeManifest(data) const manifestArray = makeManifest(data)
......
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 awaitRequest = require('../../utils/awaitRequest')
module.exports = function client() { module.exports = function client() {
const client = {} const client = {}
const domain = {}
return async function (ctx, next) { return async function (ctx, next) {
const exclude = [ const exclude = [
'/service/listEnvVarsNew', '/service/listEnvVarsNew',
...@@ -17,39 +18,31 @@ module.exports = function client() { ...@@ -17,39 +18,31 @@ module.exports = function client() {
await next() await next()
} else { } else {
const cluster = ctx.request.headers.cluster const cluster = ctx.request.headers.cluster
let yaml = ''
let clusterDomain = ''
switch (cluster) {
case 'qa':
yaml = './../../kubeService/kubeConfig-qa.yaml'
clusterDomain = 'liangkebang.net'
break
case 'dev-ops':
yaml = './../../kubeService/kubeConfig-dev-ops.yaml'
clusterDomain = 'liangkebang.net'
break
case 'qke':
yaml = './../../kubeService/kubeConfig-qke.yaml'
clusterDomain = 'liangkebang.com'
break
default:
ctx.body = {
code: '0001',
msg: '请选择集群的名字',
}
return
}
if (!client[cluster]) { if (!client[cluster]) {
// 请求qa-api
const res = await awaitRequest({
url: `http://127.0.0.1:3003/cluster/list?clusterName=${cluster}`,
method: 'get',
})
const ca = JSON.parse(res.body).data[0]
client[cluster] = new Client({ client[cluster] = new Client({
config: config.fromKubeconfig( config: config.fromKubeconfig(ca.clusterCA),
path.resolve(__dirname, yaml),
),
version: '1.10', version: '1.10',
}) })
let hosts = ''
ca.hosts.forEach((item) => {
console.log(item)
hosts += `${item.value}&`
})
domain[`${cluster}domain`] = {
clusterDomain: ca.clusterDomain,
cluster: ca.clusterName,
hosts,
}
} }
ctx.client = client[cluster] ctx.client = client[cluster]
ctx.cluster = cluster ctx.cluterParams = domain[`${cluster}domain`]
ctx.clusterDomain = clusterDomain console.log(ctx.cluterParams)
await next() await next()
} }
} }
......
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 awaitRequest = require('../utils/awaitRequest')
module.exports = function getClient(cluster) { module.exports = async function getClient(cluster) {
let yaml = '' const res = await awaitRequest({
switch (cluster) { url: `http://127.0.0.1:3003/cluster/list?clusterName=${cluster}`,
case 'qa': method: 'get',
yaml = './../kubeService/kubeConfig-qa.yaml' })
break; const ca = JSON.parse(res.body).data[0]
case 'dev-ops':
yaml = './../kubeService/kubeConfig-dev-ops.yaml'
break
case 'qke':
yaml = './../kubeService/kubeConfig-qke.yaml'
break
default:
throw Error('未获取到Client')
}
return new Client({ return new Client({
config: config.fromKubeconfig( config: config.fromKubeconfig(ca.clusterCA),
path.resolve(__dirname, yaml),
),
version: '1.10', version: '1.10',
}) })
} }
const request = require('request')
module.exports = function (options) {
return new Promise((resolve, reject) => {
request(Object.assign(options, {
headers: {
'Content-Type': 'application/json;charset=utf-8',
},
}), (error, res) => {
if (error) {
reject(error)
} else {
resolve(res)
}
})
})
}
...@@ -58,6 +58,8 @@ spec: ...@@ -58,6 +58,8 @@ spec:
value: {{cluster}} value: {{cluster}}
- name: SYSTEM_NAME - name: SYSTEM_NAME
value: {{serviceName}} value: {{serviceName}}
- name: HOSTS
value: {{hosts}}
- name: DEBUG - name: DEBUG
value: {{debug}} value: {{debug}}
- name: MOCK - name: MOCK
......
...@@ -52,6 +52,8 @@ spec: ...@@ -52,6 +52,8 @@ spec:
value: {{serviceName}} value: {{serviceName}}
- name: DEBUG - name: DEBUG
value: {{debug}} value: {{debug}}
- name: HOSTS
value: {{hosts}}
- name: NODE_ENV - name: NODE_ENV
value: test value: test
- name: CLUSTER - name: CLUSTER
......
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