Commit 2da84211 authored by 智勇's avatar 智勇

Merge branch 'master' of http://git.quantgroup.cn/QA/tke-eos

parents 7fc08eaa b66bc2d3
const Router = require('koa-router') const Router = require('koa-router')
const yaml = require('js-yaml') const yaml = require('js-yaml')
const _ = require('lodash')
const logger = require('koa-log4').getLogger() const logger = require('koa-log4').getLogger()
const templates = require('../serviceTemplate') const templates = require('../serviceTemplate')
const lruCache = require('../services/lruCache.service')
const { ingressCreate, ingressDelete } = require('../kubeService/ingress') const { ingressCreate, ingressDelete } = require('../kubeService/ingress')
const router = new Router() const router = new Router()
module.exports = router module.exports = router
router.get('/', async (ctx) => { router.get('/', async (ctx) => {
// 取节点列表的第一个作为服务的访问ip
const cacheKey = 'k8s.nodes.first'
let c = lruCache.get(cacheKey)
let wanIp = lruCache.get(cacheKey)
if (!c) {
const res = await ctx.cluster.node_list()
wanIp = _.get(res, 'nodes[0].wanIp', '')
lruCache.set(cacheKey, wanIp)
}
const data = await ctx.cluster.service_list(ctx.query.namespace) const data = await ctx.cluster.service_list(ctx.query.namespace)
const getDetail = async (item) => { const getDetail = async (item) => {
const detaildata = await ctx.cluster.service_get(item.serviceName, ctx.query.namespace) let resData = await ctx.cluster.service_get(item.serviceName, ctx.query.namespace)
return detaildata item.portMappings = resData.service.portMappings
item.image = resData.service.containers[0].image
item.wanIp = wanIp
return
} }
const task = [] const task = []
for (let i = 0; i < data.services.length; i += 1) { for (let i = 0; i < data.services.length; i += 1) {
...@@ -20,15 +35,7 @@ router.get('/', async (ctx) => { ...@@ -20,15 +35,7 @@ router.get('/', async (ctx) => {
task.push(getDetail(data.services[i])) task.push(getDetail(data.services[i]))
} }
} }
const result = await Promise.all(task) await Promise.all(task)
for (let i = 0; i < data.services.length; i += 1) {
for (let j = 0; j < result.length; j += 1) {
if (data.services[i].serviceName === result[j].service.serviceName) {
data.services[i].portMappings = result[j].service.portMappings
data.services[i].image = result[j].service.containers[0].image
}
}
}
ctx.body = ctx.ok(data) ctx.body = ctx.ok(data)
}) })
......
...@@ -670,6 +670,24 @@ ...@@ -670,6 +670,24 @@
"lru-cache": "^4.0.1", "lru-cache": "^4.0.1",
"shebang-command": "^1.2.0", "shebang-command": "^1.2.0",
"which": "^1.2.9" "which": "^1.2.9"
},
"dependencies": {
"lru-cache": {
"version": "4.1.5",
"resolved": "http://npmprivate.quantgroups.com/lru-cache/-/lru-cache-4.1.5.tgz",
"integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
"dev": true,
"requires": {
"pseudomap": "^1.0.2",
"yallist": "^2.1.2"
}
},
"yallist": {
"version": "2.1.2",
"resolved": "http://npmprivate.quantgroups.com/yallist/-/yallist-2.1.2.tgz",
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
"dev": true
}
} }
}, },
"crypto-random-string": { "crypto-random-string": {
...@@ -2955,12 +2973,11 @@ ...@@ -2955,12 +2973,11 @@
"integrity": "sha1-b54wtHCE2XGnyCD/FabFFnt0wm8=" "integrity": "sha1-b54wtHCE2XGnyCD/FabFFnt0wm8="
}, },
"lru-cache": { "lru-cache": {
"version": "4.1.5", "version": "5.1.1",
"resolved": "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz", "resolved": "http://npmprivate.quantgroups.com/lru-cache/-/lru-cache-5.1.1.tgz",
"integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"requires": { "requires": {
"pseudomap": "^1.0.2", "yallist": "^3.0.2"
"yallist": "^2.1.2"
} }
}, },
"make-dir": { "make-dir": {
...@@ -3402,6 +3419,15 @@ ...@@ -3402,6 +3419,15 @@
"url-to-options": "^1.0.1" "url-to-options": "^1.0.1"
} }
}, },
"lru-cache": {
"version": "4.1.5",
"resolved": "http://npmprivate.quantgroups.com/lru-cache/-/lru-cache-4.1.5.tgz",
"integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
"requires": {
"pseudomap": "^1.0.2",
"yallist": "^2.1.2"
}
},
"prepend-http": { "prepend-http": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "http://npmprivate.quantgroups.com/prepend-http/-/prepend-http-2.0.0.tgz", "resolved": "http://npmprivate.quantgroups.com/prepend-http/-/prepend-http-2.0.0.tgz",
...@@ -3414,6 +3440,11 @@ ...@@ -3414,6 +3440,11 @@
"requires": { "requires": {
"prepend-http": "^2.0.0" "prepend-http": "^2.0.0"
} }
},
"yallist": {
"version": "2.1.2",
"resolved": "http://npmprivate.quantgroups.com/yallist/-/yallist-2.1.2.tgz",
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
} }
} }
}, },
...@@ -3652,7 +3683,7 @@ ...@@ -3652,7 +3683,7 @@
}, },
"pseudomap": { "pseudomap": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", "resolved": "http://npmprivate.quantgroups.com/pseudomap/-/pseudomap-1.0.2.tgz",
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
}, },
"psl": { "psl": {
...@@ -4827,9 +4858,9 @@ ...@@ -4827,9 +4858,9 @@
"dev": true "dev": true
}, },
"yallist": { "yallist": {
"version": "2.1.2", "version": "3.0.3",
"resolved": "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", "resolved": "http://npmprivate.quantgroups.com/yallist/-/yallist-3.0.3.tgz",
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A=="
}, },
"ylru": { "ylru": {
"version": "1.2.1", "version": "1.2.1",
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
"kubernetes-client": "^6.3.2", "kubernetes-client": "^6.3.2",
"lodash": "^4.17.11", "lodash": "^4.17.11",
"log4js": "^4.0.2", "log4js": "^4.0.2",
"lru-cache": "^5.1.1",
"request": "^2.88.0" "request": "^2.88.0"
}, },
"devDependencies": { "devDependencies": {
......
const LRU = require('lru-cache')
const cache = new LRU(50)
module.exports = cache
...@@ -90,6 +90,10 @@ class Cluster extends Client { ...@@ -90,6 +90,10 @@ class Cluster extends Client {
rules.clusterId = this.clusterId rules.clusterId = this.clusterId
return this.post('MosifyIngress', rules) return this.post('MosifyIngress', rules)
} }
node_list(limit = 1) {
return this.post('DescribeClusterInstances', { limit, clusterId: this.clusterId })
}
} }
exports.create = function () { exports.create = function () {
......
apiVersion: v1
kind: Service
metadata:
name: mongodb
namespace: test1
labels:
qcloud-app: mongodb
type: base
spec:
type: NodePort
ports:
- port: 27017
targetPort: 27017
selector:
qcloud-app: mongodb
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: mongodb
namespace: test1
labels:
qcloud-app: mongodb
spec:
serviceName: mongodb
replicas: 1
revisionHistoryLimit: 1
template:
metadata:
labels:
qcloud-app: mongodb
spec:
terminationGracePeriodSeconds: 10
imagePullSecrets:
- name: qcloudregistrykey
- name: tencenthubkey
containers:
- name: mongodb
image: ccr.ccs.tencentyun.com/qa-base/mongodb:3.6
ports:
- containerPort: 27017
env:
- name: MONGO_INITDB_ROOT_USERNAME
value: qa
- name: MONGO_INITDB_ROOT_PASSWORD
value: qatest
volumeMounts:
- name: mongodb-ps
mountPath: /data/db
volumeClaimTemplates: # 自动创建pvc,进而自动创建pv
- metadata:
name: mongodb-ps
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: cbs
resources:
requests:
storage: 10Gi
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
qcloud-app: {{app}}
name: {{app}}
namespace: {{namespace}}
spec:
replicas: 1
revisionHistoryLimit: 1
selector:
matchLabels:
qcloud-app: {{app}}
strategy:
type: Recreate
template:
metadata:
labels:
qcloud-app: {{app}}
spec:
containers:
- image: ccr.ccs.tencentyun.com/{{image}}
imagePullPolicy: Always
name: {{app}}
resources:
requests:
memory: 400Mi
cpu: 100m
limits:
memory: 1024Mi
cpu: 500m
securityContext:
privileged: false
terminationMessagePath: /dev/termination-log
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: qcloudregistrykey
- name: tencenthubkey
restartPolicy: Always
terminationGracePeriodSeconds: 30
status: {}
---
apiVersion: v1
kind: Service
metadata:
labels:
type: base
qcloud-app: {{app}}
name: {{app}}
namespace: {{namespace}}
spec:
type: NodePort
ports:
- name: 3306
nodePort: 0
port: 3306
protocol: TCP
targetPort: 3306
selector:
qcloud-app: {{app}}
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
qcloud-app: rabbitmq
name: rabbitmq
namespace: test1
spec:
replicas: 1
revisionHistoryLimit: 1
selector:
matchLabels:
qcloud-app: rabbitmq
strategy:
type: Recreate
template:
metadata:
labels:
qcloud-app: rabbitmq
spec:
containers:
- image: ccr.ccs.tencentyun.com/qa-base/rabbitmq:3.6
imagePullPolicy: Always
name: rabbitmq
resources:
requests:
memory: 100Mi
cpu: 100m
limits:
memory: 500Mi
cpu: 500m
securityContext:
privileged: false
terminationMessagePath: /dev/termination-log
env:
- name: RABBITMQ_DEFAULT_USER
value: qa
- name: RABBITMQ_DEFAULT_PASS
value: qatest
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: qcloudregistrykey
- name: tencenthubkey
restartPolicy: Always
terminationGracePeriodSeconds: 30
status: {}
---
apiVersion: v1
kind: Service
metadata:
labels:
type: base
qcloud-app: rabbitmq
name: rabbitmq
namespace: test1
spec:
type: NodePort
ports:
- name: tcp-5672-5672
nodePort: 0
port: 5672
protocol: TCP
targetPort: 5672
- name: tcp-15672-15672
nodePort: 0
port: 15672
protocol: TCP
targetPort: 15672
selector:
qcloud-app: rabbitmq
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
qcloud-app: redis
name: redis
namespace: {{namespace}}
spec:
replicas: 1
revisionHistoryLimit: 1
selector:
matchLabels:
qcloud-app: redis
strategy:
type: Recreate
template:
metadata:
labels:
qcloud-app: redis
spec:
containers:
- image: ccr.ccs.tencentyun.com/{{image}}
imagePullPolicy: Always
name: redis
resources:
requests:
memory: 40Mi
cpu: 100m
limits:
memory: 128Mi
cpu: 500m
securityContext:
privileged: false
terminationMessagePath: /dev/termination-log
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: qcloudregistrykey
- name: tencenthubkey
restartPolicy: Always
terminationGracePeriodSeconds: 30
status: {}
---
apiVersion: v1
kind: Service
metadata:
labels:
type: base
qcloud-app: redis
name: redis
namespace: {{namespace}}
spec:
type: NodePort
ports:
- name: tcp-6379-6379
nodePort: 0
port: 6379
protocol: TCP
targetPort: 6379
- name: tcp-6380-6380
nodePort: 0
port: 6380
protocol: TCP
targetPort: 6380
- name: tcp-6381-6381
nodePort: 0
port: 6381
protocol: TCP
targetPort: 6381
- name: tcp-6382-6382
nodePort: 0
port: 6382
protocol: TCP
targetPort: 6382
- name: tcp-6383-6383
nodePort: 0
port: 6383
protocol: TCP
targetPort: 6383
selector:
qcloud-app: redis
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: mongodb.test1
namespace: test1
spec:
rules:
- host: mongodb-test1.liangkebang.net
http:
paths:
- path: /
backend:
serviceName: mongodb
servicePort: 27017
\ No newline at end of file
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
qcloud-app: zookeeper
name: zookeeper
namespace: {{namespace}}
spec:
replicas: 1
revisionHistoryLimit: 1
selector:
matchLabels:
qcloud-app: zookeeper
strategy:
type: Recreate
template:
metadata:
labels:
qcloud-app: zookeeper
spec:
containers:
- image: ccr.ccs.tencentyun.com/{{image}}
imagePullPolicy: Always
name: zookeeper
resources:
requests:
memory: 40Mi
cpu: 100m
limits:
memory: 128Mi
cpu: 500m
securityContext:
privileged: false
terminationMessagePath: /dev/termination-log
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: qcloudregistrykey
- name: tencenthubkey
restartPolicy: Always
terminationGracePeriodSeconds: 30
status: {}
---
apiVersion: v1
kind: Service
metadata:
labels:
type: base
qcloud-app: zookeeper
name: zookeeper
namespace: {{namespace}}
spec:
type: NodePort
ports:
- name: tcp-2181-2181
nodePort: 0
port: 2181
protocol: TCP
targetPort: 2181
- name: tcp-9090-9090
nodePort: 0
port: 9090
protocol: TCP
targetPort: 9090
selector:
qcloud-app: zookeeper
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