Commit 0ef51ab9 authored by 智勇's avatar 智勇

go

parent c671ba7d
...@@ -7,19 +7,24 @@ const { ...@@ -7,19 +7,24 @@ const {
} = require('../kubeService/service') } = require('../kubeService/service')
const container = require('../services/tke.containerService').create() const container = require('../services/tke.containerService').create()
const getClient = require('../resource/getClient') const getClient = require('../resource/getClient')
const dingTalk = require('../utils/dingTalk')
const makeResouce = require('./../resource/makeResouce') const makeResouce = require('./../resource/makeResouce')
const address = 'https://oapi.dingtalk.com/robot/send?access_token=99e801a2cf26680e6ce09cb12f830c21a03ae3df07d18f6a38e1db54c0e95f2c'
const deploy = async (cluster) => { const deploy = async (cluster) => {
logger.info('deployLatest start') logger.info('deployLatest start')
const client = await getClient(cluster) const client = await getClient(cluster)
const ns = await getAllNamespace(client.clientInfo) const ns = await getAllNamespace(client.clientInfo)
// // for test // // for test
// const testNamespace = ['fis'] // const testNamespace = ['ka3']
// const nsTest = ns.namespaces && ns.namespaces.filter(item => testNamespace.includes(item.name)) // const nsTest = ns.namespaces && ns.namespaces.filter(item => testNamespace.includes(item.name))
// for (const namespace of nsTest) { // for (const namespace of nsTest) {
for (const namespace of ns.namespaces) { for (const namespace of ns.namespaces) {
logger.info('开始检查ns:', namespace.name) logger.info('开始检查ns:', namespace.name)
const latestArray = []
const masterArray = []
const svcs = await getServicesFormat(client.clientInfo, namespace.name) const svcs = await getServicesFormat(client.clientInfo, namespace.name)
for (const svc of svcs) { for (const svc of svcs) {
...@@ -31,9 +36,10 @@ const deploy = async (cluster) => { ...@@ -31,9 +36,10 @@ const deploy = async (cluster) => {
const latestImageID = _.get(latest.tagInfo, '[0].tagId', '') const latestImageID = _.get(latest.tagInfo, '[0].tagId', '')
if (svc.imageID.split('@')[1] !== latestImageID) { if (svc.imageID.split('@')[1] !== latestImageID) {
logger.info('latest不一致,部署项目', namespace.name, svc.podName) logger.info('latest不一致,部署项目', namespace.name, svc.podName)
latestArray.push(svc.image.split('/')[2])
await serviceRestart(client.clientInfo, namespace.name, svc.podName) await serviceRestart(client.clientInfo, namespace.name, svc.podName)
} }
sleep.msleep(1000) sleep.msleep(5 * 1000)
} }
// 把master更新部署成lastet // 把master更新部署成lastet
if (~svc.image.search(':master-')) { if (~svc.image.search(':master-')) {
...@@ -54,17 +60,22 @@ const deploy = async (cluster) => { ...@@ -54,17 +60,22 @@ const deploy = async (cluster) => {
const resources = await makeResouce(data.serviceName, data.label) const resources = await makeResouce(data.serviceName, data.label)
data.resources = resources data.resources = resources
await deployUpdate(client.clusterInfo, client.clientInfo, data) await deployUpdate(client.clusterInfo, client.clientInfo, data)
sleep.msleep(1000) masterArray.push(svc.image.split('/')[2])
sleep.msleep(5 * 1000)
} }
} }
const text = `namespace : ${namespace.name}\n\n`
+ `重新部署的latest : \n\n${latestArray.join('\n\n')}\n\n`
+ `重新部署的master : \n\n${masterArray.join('\n\n')}`
dingTalk(`${namespace.name} latest 部署结果`, text, address)
logger.info('ns:', namespace.name, '检查完毕') logger.info('ns:', namespace.name, '检查完毕')
} }
logger.info('deployLatest end') logger.info('deployLatest end')
} }
module.exports = () => { module.exports = () => {
// schedule.scheduleJob('*/2 * * * *', async () => { // schedule.scheduleJob('*/4 * * * *', async () => {
schedule.scheduleJob('0 2 * * *', async () => { schedule.scheduleJob('0 3 * * *', async () => {
try { try {
await deploy('qa') await deploy('qa')
} catch (e) { } catch (e) {
......
...@@ -70,10 +70,11 @@ const createService = async (ctx) => { ...@@ -70,10 +70,11 @@ const createService = async (ctx) => {
logger.info('创建服务', data) logger.info('创建服务', data)
await serviceCreate(ctx.cluterParams, ctx.client, data) await serviceCreate(ctx.cluterParams, ctx.client, data)
if (label !== 'base') { if (label !== 'base') {
const port = serviceName === 'heimdallr' ? 5555 : 80
if (serviceName === 'xyqb-user2') { if (serviceName === 'xyqb-user2') {
await ingressCreate(ctx.client, namespace, 'xyqb-user2-2', 'passportapi2', ctx.cluterParams.clusterDomain) await ingressCreate(ctx.client, namespace, 'xyqb-user2-2', 'passportapi2', ctx.cluterParams.clusterDomain, port)
} }
await ingressCreate(ctx.client, namespace, serviceName, domain, ctx.cluterParams.clusterDomain) await ingressCreate(ctx.client, namespace, serviceName, domain, ctx.cluterParams.clusterDomain, port)
} }
ctx.body = ctx.ok('创建成功') ctx.body = ctx.ok('创建成功')
} }
......
const logger = require('koa-log4').getLogger('ingressHandle') const logger = require('koa-log4').getLogger('ingressHandle')
const getManifest = (namespace, servicename, doamin, clusterDomain) => ({ const getManifest = (namespace, servicename, doamin, clusterDomain, port) => ({
apiVersion: 'extensions/v1beta1', apiVersion: 'extensions/v1beta1',
kind: 'Ingress', kind: 'Ingress',
metadata: { metadata: {
...@@ -20,7 +20,7 @@ const getManifest = (namespace, servicename, doamin, clusterDomain) => ({ ...@@ -20,7 +20,7 @@ const getManifest = (namespace, servicename, doamin, clusterDomain) => ({
path: '/', path: '/',
backend: { backend: {
serviceName: `${servicename}`.replace('-2', ''), serviceName: `${servicename}`.replace('-2', ''),
servicePort: 80, servicePort: port,
}, },
}, },
], ],
...@@ -32,8 +32,8 @@ const getManifest = (namespace, servicename, doamin, clusterDomain) => ({ ...@@ -32,8 +32,8 @@ const getManifest = (namespace, servicename, doamin, clusterDomain) => ({
const ingressGet = async (client, namespace, servicename) => client.apis.extensions.v1beta1.namespaces(namespace) const ingressGet = async (client, namespace, servicename) => client.apis.extensions.v1beta1.namespaces(namespace)
.ingresses(servicename).get() .ingresses(servicename).get()
const ingressCreate = async (client, namespace, servicename, doamin, clusterDomain) => { const ingressCreate = async (client, namespace, servicename, doamin, clusterDomain, port) => {
const Manifest = getManifest(namespace, servicename, doamin, clusterDomain) const Manifest = getManifest(namespace, servicename, doamin, clusterDomain, port)
logger.info('创建ingress', JSON.stringify(Manifest)) logger.info('创建ingress', JSON.stringify(Manifest))
await client.apis.extensions.v1beta1.namespace(namespace).ingresses await client.apis.extensions.v1beta1.namespace(namespace).ingresses
.post({ body: Manifest }) .post({ body: Manifest })
......
...@@ -31,6 +31,17 @@ const defaultZookeeper = { ...@@ -31,6 +31,17 @@ const defaultZookeeper = {
}, },
} }
const defaultConsul = {
memory: {
request: 300,
limit: 300,
},
cpu: {
request: 100,
limit: 200,
},
}
const defaultRedis = { const defaultRedis = {
memory: { memory: {
request: 100, request: 100,
...@@ -74,6 +85,7 @@ exports.defaultConfig = { ...@@ -74,6 +85,7 @@ exports.defaultConfig = {
redis: defaultRedis, redis: defaultRedis,
'redis-sentinel': defaultRedis, 'redis-sentinel': defaultRedis,
zookeeper: defaultZookeeper, zookeeper: defaultZookeeper,
consul: defaultConsul,
mysql: defaultMysql, mysql: defaultMysql,
rabbitmq: defaultRabbitmq, rabbitmq: defaultRabbitmq,
java: defaultJava, java: defaultJava,
......
const logger = require('koa-log4').getLogger('dingtalk')
const awaitRequest = require('./awaitRequest')
module.exports = async (title, text, url) => {
const dingData = {
msgtype: 'markdown',
markdown: {
title,
text,
},
}
if (url) {
await awaitRequest({
url,
method: 'POST',
headers: {
'Content-Type': 'application/json;charset=utf-8',
},
body: JSON.stringify(dingData),
})
logger.info(`发送 dingtalk ${JSON.stringify(dingData)}`)
}
}
apiVersion: v1
kind: Service
metadata:
labels:
type: base
qcloud-app: {{serviceName}}
name: {{serviceName}}
namespace: {{namespace}}
spec:
type: NodePort
ports:
- port: 8500
selector:
qcloud-app: {{serviceName}}
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: {{serviceName}}-{{namespace}}
namespace: {{namespace}}
spec:
# storageClassName: cbs-3
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
labels:
type: base
qcloud-app: {{serviceName}}
name: {{serviceName}}
namespace: {{namespace}}
spec:
replicas: 1
revisionHistoryLimit: 1
selector:
matchLabels:
qcloud-app: {{serviceName}}
strategy:
type: Recreate
template:
metadata:
labels:
qcloud-app: {{serviceName}}
type: base
spec:
containers:
- image: ccr.ccs.tencentyun.com/{{image}}
imagePullPolicy: Always
name: {{serviceName}}
resources:
requests:
cpu: {{resources.cpu.request}}m
memory: {{resources.memory.request}}Mi
limits:
cpu: {{resources.cpu.limit}}m
memory: {{resources.memory.limit}}Mi
env:
volumeMounts:
- mountPath: "/var/lib/mysql"
name: {{serviceName}}
volumes:
- name: {{serviceName}}
persistentVolumeClaim:
claimName: {{serviceName}}-{{namespace}}
imagePullSecrets:
- name: qcloudregistrykey
- name: tencenthubkey
restartPolicy: Always
terminationGracePeriodSeconds: 30
status: {}
apiVersion: v1
kind: Service
metadata:
labels:
type: {{label}}
qcloud-app: {{serviceName}}
name: {{serviceName}}
namespace: {{namespace}}
spec:
type: NodePort
ports:
- name: '5555'
port: 5555
- name: '9100'
port: 9100
- name: '9999'
port: 9999
selector:
qcloud-app: {{serviceName}}
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: {{serviceName}}
namespace: {{namespace}}
labels:
type: {{label}}
qcloud-app: {{serviceName}}
spec:
# replicas: 1
revisionHistoryLimit: 1
# selector:
# matchLabels:
# qcloud-app: {{serviceName}}
strategy:
type: Recreate
template:
metadata:
labels:
qcloud-app: {{serviceName}}
type: {{label}}
spec:
terminationGracePeriodSeconds: 0
containers:
- name: {{serviceName}}
image: ccr.ccs.tencentyun.com/{{image}}
# imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /home/logs
name: filelog
env:
- name: NAMESPACE
value: {{namespace}}
- name: SYSTEM_NAME
value: {{serviceName}}
- name: DEBUG
value: {{debug}}
- name: HOSTS
value: {{hosts}}
- name: NODE_ENV
value: test
- name: CLUSTER
value: {{cluster}}
resources:
requests:
cpu: {{resources.cpuRequest}}m
memory: {{resources.memRequest}}Mi
limits:
cpu: {{resources.cpuLimit}}m
memory: {{resources.memLimit}}Mi
# livenessProbe:
# exec:
# command:
# - /home/quant_group/readyCheck.sh
# initialDelaySeconds: 100
# successThreshold: 1
# readinessProbe:
# exec:
# command:
# - /home/quant_group/readyCheck.sh
# initialDelaySeconds: 2
# timeoutSeconds: 1
# periodSeconds: 5
# successThreshold: 1
volumes:
- name: filelog
hostPath:
path: /var/log/containers2/{{namespace}}/{{serviceName}}
restartPolicy: Always
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: qcloudregistrykey
- name: tencenthubkey
...@@ -6,9 +6,11 @@ const redis_sentinel = fs.readFileSync('yamls/redis.sentinel.yaml', 'utf8') ...@@ -6,9 +6,11 @@ const redis_sentinel = fs.readFileSync('yamls/redis.sentinel.yaml', 'utf8')
const rabbitmq = fs.readFileSync('yamls/rabbitmq.pvc.yaml', 'utf8') const rabbitmq = fs.readFileSync('yamls/rabbitmq.pvc.yaml', 'utf8')
const mongodb = fs.readFileSync('yamls/mongo.pvc.yaml', 'utf8') const mongodb = fs.readFileSync('yamls/mongo.pvc.yaml', 'utf8')
const zookeeper = fs.readFileSync('yamls/zookeeper.pvc.yaml', 'utf8') const zookeeper = fs.readFileSync('yamls/zookeeper.pvc.yaml', 'utf8')
const consul = fs.readFileSync('yamls/consul.pvc.yaml', 'utf8')
const ui = fs.readFileSync('yamls/ui.node.yaml', 'utf8') const ui = fs.readFileSync('yamls/ui.node.yaml', 'utf8')
const node = fs.readFileSync('yamls/ui.node.yaml', 'utf8') const node = fs.readFileSync('yamls/ui.node.yaml', 'utf8')
const java = fs.readFileSync('yamls/java.yaml', 'utf8') const java = fs.readFileSync('yamls/java.yaml', 'utf8')
const go = fs.readFileSync('yamls/go.yaml', 'utf8')
const python = fs.readFileSync('yamls/python.yaml', 'utf8') const python = fs.readFileSync('yamls/python.yaml', 'utf8')
const tencenthubkey = fs.readFileSync('yamls/tencenthubkey.yaml', 'utf8') const tencenthubkey = fs.readFileSync('yamls/tencenthubkey.yaml', 'utf8')
...@@ -19,9 +21,11 @@ module.exports = { ...@@ -19,9 +21,11 @@ module.exports = {
rabbitmq, rabbitmq,
mongodb, mongodb,
zookeeper, zookeeper,
consul,
ui, ui,
node, node,
java, java,
go,
python, python,
tencenthubkey, tencenthubkey,
} }
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