Commit 4aa6fbee authored by 智勇's avatar 智勇

Merge branch 'changeCluster' into 'master'

change cluster

See merge request QA/tke-eos!47
parents 8bd410e2 22a35a2e
......@@ -2,23 +2,18 @@ const schedule = require('node-schedule')
const _ = require('lodash')
const sleep = require('sleep')
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 container = require('../services/tke.containerService').create()
const getClient = require('../resource/getClient')
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({
config: config.fromKubeconfig(
path.resolve(__dirname, './../kubeService/kubeConfig-qa.yaml'),
),
version: '1.10',
})
const deploy = async () => {
const deploy = async (cluster) => {
if (!clientNew[cluster]) {
clientNew[cluster] = await getClient(cluster)
}
logger.info('deployLatest start')
for (const ns of repoNS) {
const repoNSData = await container.repository_get(ns)
......@@ -27,15 +22,15 @@ const deploy = async () => {
const repoName = repo.reponame.split('/')[1]
const latest = await container.getTagByName(repo.reponame, 'latest')
const latestImageID = _.get(latest.tagInfo, '[0].tagId', '')
const ns = await getAllNamespace(client)
// ns = ns.namespaces && ns.namespaces.filter(item => testNamespace.includes(item.name))
for (const namespace of ns.namespaces) {
const svcs = await getServicesFormat(client, namespace.name)
let ns = await getAllNamespace(clientNew[cluster])
ns = ns.namespaces && ns.namespaces.filter(item => testNamespace.includes(item.name))
for (const namespace of ns) {
const svcs = await getServicesFormat(clientNew[cluster], namespace.name)
for (const svc of svcs) {
if (svc.serviceName === repoName && svc.image.indexOf('latest') !== -1) {
if (latestImageID !== svc.imageID.split('@')[1]) {
logger.info('部署项目', namespace.name, svc.podName)
await serviceRestart(client, namespace.name, svc.podName)
await serviceRestart(clientNew[cluster], namespace.name, svc.podName)
sleep.msleep(500)
}
}
......@@ -51,7 +46,7 @@ module.exports = () => {
// schedule.scheduleJob('*/2 * * * *', async () => {
schedule.scheduleJob('0 2 * * *', async () => {
try {
await deploy()
await deploy('qa')
} catch (e) {
logger.info('deployLatest', e)
}
......
......@@ -2,17 +2,11 @@ const schedule = require('node-schedule')
const request = require('request')
const moment = require('moment')
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 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 awaitRequest = function (options) {
return new Promise((resolve, reject) => {
......@@ -67,8 +61,7 @@ const dingTalkPush = async function (item, is_recover) {
+ `> 命名空间 : ${item.metadata.namespace}\n\n`
+ `> 异常原因 : ${message}\n\n`
+ `> 异常时间 : ${moment()
.format('YYYY-MM-DD HH:mm:ss')}\n\n`
+ `[查看详情](http://qa2.liangkebang.com/dockers/runingEnv/${item.metadata.namespace})`,
.format('YYYY-MM-DD HH:mm:ss')}\n\n`,
},
};
await awaitRequest({
......@@ -90,7 +83,10 @@ const checkRecoverPod = async () => {
const podname = resKeys[i].split('#')[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) => {
if (item.metadata.name.indexOf(podname) > -1) {
if (item.status.conditions.length === 3) {
......@@ -122,7 +118,10 @@ const checkRecoverPod = 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) => {
const key = `${item.metadata.namespace}:${item.metadata.name}#${item.metadata.labels['qcloud-app']}`
item.status.conditions.forEach(async (value) => {
......
......@@ -50,12 +50,12 @@ const createService = async (ctx) => {
data.resources = resources
logger.info('创建服务', data)
await serviceCreate(ctx.cluster, ctx.client, data)
await serviceCreate(ctx.cluterParams, ctx.client, data)
if (label !== 'base') {
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('创建成功')
}
......@@ -153,7 +153,7 @@ router.get('/listEnvVars', async (ctx) => {
cluster = parmars.split('@')[1]
}
if (!clientNew[cluster]) {
clientNew[cluster] = getClient(cluster)
clientNew[cluster] = await getClient(cluster)
}
const res = await Promise.all([
getPods(clientNew[cluster], namespace),
......@@ -201,7 +201,7 @@ router.get('/listEnvVarsNew', async (ctx) => {
cluster = parmars.split('@')[1]
}
if (!clientNew[cluster]) {
clientNew[cluster] = getClient(cluster)
clientNew[cluster] = await getClient(cluster)
}
const res = await Promise.all([
getPods(clientNew[cluster], namespace),
......
......@@ -85,8 +85,9 @@ const createNamespace = async (client, name, description) => {
}
const serviceCreate = async (cluster, client, data) => {
data.cluster = cluster
const serviceCreate = async (cluterParams, client, data) => {
data.cluster = cluterParams.cluster
data.hosts = cluterParams.hosts
const { namespace, serviceName } = data
const manifestArray = makeManifest(data)
......
const path = require('path')
const Client = require('kubernetes-client').Client
const config = require('kubernetes-client').config
const awaitRequest = require('../../utils/awaitRequest')
module.exports = function client() {
const client = {}
const domain = {}
return async function (ctx, next) {
const exclude = [
'/service/listEnvVarsNew',
......@@ -17,39 +18,31 @@ module.exports = function client() {
await next()
} else {
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]) {
// 请求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({
config: config.fromKubeconfig(
path.resolve(__dirname, yaml),
),
config: config.fromKubeconfig(ca.clusterCA),
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.cluster = cluster
ctx.clusterDomain = clusterDomain
ctx.cluterParams = domain[`${cluster}domain`]
console.log(ctx.cluterParams)
await next()
}
}
......
const path = require('path')
const Client = require('kubernetes-client').Client
const config = require('kubernetes-client').config
const awaitRequest = require('../utils/awaitRequest')
module.exports = function getClient(cluster) {
let yaml = ''
switch (cluster) {
case 'qa':
yaml = './../kubeService/kubeConfig-qa.yaml'
break;
case 'dev-ops':
yaml = './../kubeService/kubeConfig-dev-ops.yaml'
break
case 'qke':
yaml = './../kubeService/kubeConfig-qke.yaml'
break
default:
throw Error('未获取到Client')
}
module.exports = async function getClient(cluster) {
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]
return new Client({
config: config.fromKubeconfig(
path.resolve(__dirname, yaml),
),
config: config.fromKubeconfig(ca.clusterCA),
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:
value: {{cluster}}
- name: SYSTEM_NAME
value: {{serviceName}}
- name: HOSTS
value: {{hosts}}
- name: DEBUG
value: {{debug}}
- name: MOCK
......
......@@ -52,6 +52,8 @@ spec:
value: {{serviceName}}
- name: DEBUG
value: {{debug}}
- name: HOSTS
value: {{hosts}}
- name: NODE_ENV
value: test
- 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