kuboard-v2.0.0-beta.3

This commit is contained in:
huanqing.shao
2020-05-31 12:46:56 +08:00
parent 2196e16b72
commit d936393bd3
50 changed files with 12564 additions and 2808 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 KiB

View File

@ -0,0 +1,12 @@
* 安装授权文件
* Port-forward
* Addons
* Service:
* SessionAffinity
* 节点管理操作,驱逐、封禁等
增加个按内存排序使用量排序的功能, 在那个TOP的地方

View File

@ -1,37 +1,69 @@
Kuboard v1.0.x 的更新说明
v1.0.7 已经支持了 kubectl proxy 的功能、v1.0.8 做 Deployment 的滚动更新、v1.0.9 做 kubectl port-forward v1.0.10 做 kubectl cp、v1.0.11 做 Job 和 CronJob。
这几样做完以后,就 v1.1.0
kubectl port-forward
kubectl cp
Job / CronJob
**优化**
* 事件通知
* 可以关闭事件通知;
* 设置菜单中可以重新开启事件通知;
* 切换名称空间
* 部分情况下,切换名称空间时,应该直接进入名称空间首页;
* 高亮当前所在的名称空间;
* 日志/终端界面
* 可以调整字体大小;
**BUG修正**
* 部分情况下,切换名称空间时,内容未刷新;
调整控制台字体大小
删除 NFS StorageClass 出错
BUG:
arm 环境下,应该使用镜像: https://hub.docker.com/r/vbouchaud/nfs-client-provisioner/tags
Calico 指定网卡的方式:
- name: IP_AUTODETECTION_METHOD
value: "interface=em1"
补充文档,描述如何授权一个 ServiceAccount 访问多个名称空间
Deployment 页面,可能存在请求线程过多导致页面部分内容显示为加载状态的情况;
安装 kube-prometheus 后,与 kuboard 安装的 metrics-server 有冲突:
按照 https://github.com/coreos/kube-prometheus clone 下来后执行:
kubectl create -f manifests/setup
until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done
kubectl create -f manifests/
**优化**
* 提示用户怎么填写 Command 命令
* 通过 YAML 文件创建对象时,如果名称空间和当前不一致,应该给出提示
* 将 secret 绑定到环境变量
* 默认 StorageClass
* 图形化实例 Service 的 NodePort/Port/targetPort
**BUG修正**
* Kubernetes 版本过低时Ingress列表页加载失败
* 部分情况下,终端界面打不开时,未弹出错误提示对话框
删除 PV 时,出现 /notsupported 错误
Start by reading through this tutorial on windows services:
https://github.com/iswix-llc/iswix-tutorials
Now read this article to understand how any old script/EXE can be made a service using srvany.exe:
https://support.microsoft.com/en-us/help/137890/how-to-create-a-user-defined-service
Take a look at my answer to see how it all comes together:
Wix installer to replace INSTSRV and SRVANY for user defined service installation
If that still isn't enough, send me an email and I'll give you a complimentary 30-60 minute session to show you.
---
* 修改套件的信息之后,需要重新 apply
* 工作负载编辑器
* 保存前对比 YAML

139
support/change-log/env.yaml Normal file
View File

@ -0,0 +1,139 @@
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/instance: tsp
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: tsp
app.kubernetes.io/version: 1.16.0
helm.sh/chart: tsp-0.1.0
name: tsp
namespace: default
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app.kubernetes.io/instance: tsp
app.kubernetes.io/name: tsp
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app.kubernetes.io/instance: tsp
app.kubernetes.io/name: tsp
spec:
containers:
- env:
- name: MEM_TOTAL_MB
valueFrom:
resourceFieldRef:
divisor: "0"
resource: limits.memory
image: k8s.tf56.com:32571/tsp:latest
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
initialDelaySeconds: 120
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: http
timeoutSeconds: 1
name: tsp
ports:
- containerPort: 8080
name: http
protocol: TCP
readinessProbe:
failureThreshold: 3
initialDelaySeconds: 120
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: http
timeoutSeconds: 1
resources:
limits:
cpu: "2"
memory: 4000Mi
securityContext: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /httx/logs
name: tsp-logs
dnsPolicy: ClusterFirst
hostAliases:
- hostnames:
- web-tffcachecloud-vip
ip: 10.77.1.18
- hostnames:
- mt-party-vip
ip: 10.77.35.205
- hostnames:
- mt-apollo-1
ip: 10.77.0.163
- hostnames:
- mt-apollo-2
ip: 10.77.0.164
- hostnames:
- mt-eureka-1
- mt-eureka-2
ip: 10.77.1.29
- hostnames:
- mt-zookeeper-vip
- mt-tffjobzk-vip
ip: 10.77.1.29
- hostnames:
- web-dfssweb-vip
- web-sms-vip
- mt-doggy-vip
- web-ram2-vip
- web-creditinvestchannel-vip
- mt-creditinvestservice-vip
- mt-tffauthservice-vip
- mt-messagecenterservice-vip
- web-goldenleopard-vip
ip: 10.77.1.17
- hostnames:
- mt-uuidserver-vip
ip: 10.77.34.12
- hostnames:
- mt-tffzk-vip
ip: 10.77.32.3
- hostnames:
- web-openapitest-1
ip: 10.7.29.39
- hostnames:
- mt-tffxxljob-1
ip: 10.77.32.182
- hostnames:
- web-athena-vip
ip: 10.7.13.222
- hostnames:
- mt-payrocketmqdispatch-vip
- mt-payrocketmqdispatch-1
- mt-payrocketmqdispatch-2
ip: 10.77.1.29
- hostnames:
- ops-cachecloud-vip
ip: 10.77.0.5
imagePullSecrets:
- name: registry-key
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: tsp
serviceAccountName: tsp
terminationGracePeriodSeconds: 30
volumes:
- name: tsp-logs
persistentVolumeClaim:
claimName: tsp-logs

View File

@ -0,0 +1,33 @@
# cat sms-h5-backend.yaml
---
apiVersion: v1
kind: Service
metadata:
annotations:
k8s.eip.work/workload: sms-h5-backend
getambassador.io/config: |
---
apiVersion: ambassador/v1
kind: Mapping
name: sms-h5-backend_mapping
prefix: /sms-h5-backend/
service: sms-h5-backend:30003
labels:
app: sms-h5-backend
name: sms-h5-backend
namespace: default
spec:
ports:
- name: hx8s7a
nodePort: 30003
port: 30003
protocol: TCP
targetPort: 30003
selector:
app: sms-h5-backend
sessionAffinity: None
type: NodePort

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

View File

@ -0,0 +1,122 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: '2'
k8s.kuboard.cn/ingress: 'false'
k8s.kuboard.cn/service: ClusterIP
k8s.kuboard.cn/workload: nginx-deployment
kubectl.kubernetes.io/last-applied-configuration: >
{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"labels":{"app":"nginx"},"name":"nginx-deployment","namespace":"default"},"spec":{"replicas":1,"selector":{"matchLabels":{"app":"nginx"}},"template":{"metadata":{"labels":{"app":"nginx"}},"spec":{"containers":[{"image":"nginx:1.7.9","name":"nginx"}]}}}}
creationTimestamp: '2020-05-13T13:53:22Z'
generation: 2
labels:
app: nginx
name: nginx-deployment
namespace: default
resourceVersion: '165068'
selfLink: /apis/apps/v1/namespaces/default/deployments/nginx-deployment
uid: cf76662d-4b76-49b3-95c0-0912c0d175bd
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: 'nginx:1.7.9'
imagePullPolicy: IfNotPresent
name: nginx
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
terminationGracePeriodSeconds: 30
status:
availableReplicas: 1
conditions:
- lastTransitionTime: '2020-05-18T11:46:29Z'
lastUpdateTime: '2020-05-18T11:46:29Z'
message: Deployment has minimum availability.
reason: MinimumReplicasAvailable
status: 'True'
type: Available
- lastTransitionTime: '2020-05-13T13:53:22Z'
lastUpdateTime: '2020-05-18T12:07:38Z'
message: ReplicaSet "nginx-deployment-564949df9d" has successfully progressed.
reason: NewReplicaSetAvailable
status: 'True'
type: Progressing
observedGeneration: 2
readyReplicas: 1
replicas: 1
updatedReplicas: 1
---
apiVersion: v1
kind: Service
metadata:
annotations:
k8s.kuboard.cn/workload: nginx-deployment
creationTimestamp: '2020-05-18T12:13:31Z'
labels:
app: nginx
name: nginx-deployment
namespace: default
resourceVersion: '167877'
selfLink: /api/v1/namespaces/default/services/nginx-deployment
uid: f00605fb-d534-4eb0-a72a-86a4128aa998
spec:
clusterIP: 10.99.104.165
ports:
- name: hcwdid
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
sessionAffinity: None
type: ClusterIP
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: >
{"apiVersion":"networking.k8s.io/v1beta1","kind":"Ingress","metadata":{"annotations":{"kubernetes.io/ingress.class":"nginx"},"name":"nginx-deployment","namespace":"default"},"spec":{"rules":[{"host":"a.demo.kuboard.cn","http":{"paths":[{"backend":{"serviceName":"nginx-deployment","servicePort":80},"path":"/"}]}}]}}
kubernetes.io/ingress.class: nginx
creationTimestamp: '2020-05-18T12:36:23Z'
generation: 1
name: nginx-deployment
namespace: default
resourceVersion: '168334'
selfLink: >-
/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/nginx-deployment
uid: 67bb41ae-e95e-4adc-91dd-b3d4738c4bad
spec:
rules:
- host: a.demo.kuboard.cn
http:
paths:
- backend:
serviceName: nginx-deployment
servicePort: 80
path: /
status:
loadBalancer:
ingress:
- hostname: localhost

View File

@ -0,0 +1,176 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: '1'
kubectl.kubernetes.io/last-applied-configuration: >
{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"controller","app.kubernetes.io/instance":"ingress-nginx","app.kubernetes.io/managed-by":"Helm","app.kubernetes.io/name":"ingress-nginx","app.kubernetes.io/version":"0.32.0","helm.sh/chart":"ingress-nginx-2.0.3"},"name":"ingress-nginx-controller","namespace":"ingress-nginx"},"spec":{"minReadySeconds":0,"revisionHistoryLimit":10,"selector":{"matchLabels":{"app.kubernetes.io/component":"controller","app.kubernetes.io/instance":"ingress-nginx","app.kubernetes.io/name":"ingress-nginx"}},"template":{"metadata":{"labels":{"app.kubernetes.io/component":"controller","app.kubernetes.io/instance":"ingress-nginx","app.kubernetes.io/name":"ingress-nginx"}},"spec":{"containers":[{"args":["/nginx-ingress-controller","--publish-service=ingress-nginx/ingress-nginx-controller","--election-id=ingress-controller-leader","--ingress-class=nginx","--configmap=ingress-nginx/ingress-nginx-controller","--validating-webhook=:8443","--validating-webhook-certificate=/usr/local/certificates/cert","--validating-webhook-key=/usr/local/certificates/key"],"env":[{"name":"POD_NAME","valueFrom":{"fieldRef":{"fieldPath":"metadata.name"}}},{"name":"POD_NAMESPACE","valueFrom":{"fieldRef":{"fieldPath":"metadata.namespace"}}}],"image":"quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.32.0","imagePullPolicy":"IfNotPresent","lifecycle":{"preStop":{"exec":{"command":["/wait-shutdown"]}}},"livenessProbe":{"failureThreshold":3,"httpGet":{"path":"/healthz","port":10254,"scheme":"HTTP"},"initialDelaySeconds":10,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":1},"name":"controller","ports":[{"containerPort":80,"name":"http","protocol":"TCP"},{"containerPort":443,"name":"https","protocol":"TCP"},{"containerPort":8443,"name":"webhook","protocol":"TCP"}],"readinessProbe":{"failureThreshold":3,"httpGet":{"path":"/healthz","port":10254,"scheme":"HTTP"},"initialDelaySeconds":10,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":1},"resources":{"requests":{"cpu":"100m","memory":"90Mi"}},"securityContext":{"allowPrivilegeEscalation":true,"capabilities":{"add":["NET_BIND_SERVICE"],"drop":["ALL"]},"runAsUser":101},"volumeMounts":[{"mountPath":"/usr/local/certificates/","name":"webhook-cert","readOnly":true}]}],"dnsPolicy":"ClusterFirst","serviceAccountName":"ingress-nginx","terminationGracePeriodSeconds":300,"volumes":[{"name":"webhook-cert","secret":{"secretName":"ingress-nginx-admission"}}]}}}}
creationTimestamp: '2020-05-13T14:22:12Z'
generation: 1
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/version: 0.32.0
helm.sh/chart: ingress-nginx-2.0.3
name: ingress-nginx-controller
namespace: ingress-nginx
resourceVersion: '50463'
selfLink: /apis/apps/v1/namespaces/ingress-nginx/deployments/ingress-nginx-controller
uid: 8baad61e-27ea-4237-8aa5-f7ac289bbe65
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
spec:
containers:
- args:
- /nginx-ingress-controller
- '--publish-service=ingress-nginx/ingress-nginx-controller'
- '--election-id=ingress-controller-leader'
- '--ingress-class=nginx'
- '--configmap=ingress-nginx/ingress-nginx-controller'
- '--validating-webhook=:8443'
- '--validating-webhook-certificate=/usr/local/certificates/cert'
- '--validating-webhook-key=/usr/local/certificates/key'
env:
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
image: >-
quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.32.0
imagePullPolicy: IfNotPresent
lifecycle:
preStop:
exec:
command:
- /wait-shutdown
livenessProbe:
failureThreshold: 3
httpGet:
path: /healthz
port: 10254
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
name: controller
ports:
- containerPort: 80
name: http
protocol: TCP
- containerPort: 443
name: https
protocol: TCP
- containerPort: 8443
name: webhook
protocol: TCP
readinessProbe:
failureThreshold: 3
httpGet:
path: /healthz
port: 10254
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
resources:
requests:
cpu: 100m
memory: 90Mi
securityContext:
allowPrivilegeEscalation: true
capabilities:
add:
- NET_BIND_SERVICE
drop:
- ALL
runAsUser: 101
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /usr/local/certificates/
name: webhook-cert
readOnly: true
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: ingress-nginx
serviceAccountName: ingress-nginx
terminationGracePeriodSeconds: 300
volumes:
- name: webhook-cert
secret:
defaultMode: 420
secretName: ingress-nginx-admission
---
apiVersion: v1
kind: Service
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: >
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"controller","app.kubernetes.io/instance":"ingress-nginx","app.kubernetes.io/managed-by":"Helm","app.kubernetes.io/name":"ingress-nginx","app.kubernetes.io/version":"0.32.0","helm.sh/chart":"ingress-nginx-2.0.3"},"name":"ingress-nginx-controller","namespace":"ingress-nginx"},"spec":{"externalTrafficPolicy":"Local","ports":[{"name":"http","port":80,"protocol":"TCP","targetPort":"http"},{"name":"https","port":443,"protocol":"TCP","targetPort":"https"}],"selector":{"app.kubernetes.io/component":"controller","app.kubernetes.io/instance":"ingress-nginx","app.kubernetes.io/name":"ingress-nginx"},"type":"LoadBalancer"}}
creationTimestamp: '2020-05-13T14:22:12Z'
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/version: 0.32.0
helm.sh/chart: ingress-nginx-2.0.3
name: ingress-nginx-controller
namespace: ingress-nginx
resourceVersion: '50411'
selfLink: /api/v1/namespaces/ingress-nginx/services/ingress-nginx-controller
uid: 7ad2c0d7-6fbb-437e-a6e5-a60a6de27db6
spec:
clusterIP: 10.104.20.134
externalTrafficPolicy: Local
healthCheckNodePort: 32155
ports:
- name: http
nodePort: 32412
port: 80
protocol: TCP
targetPort: http
- name: https
nodePort: 31845
port: 443
protocol: TCP
targetPort: https
selector:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
sessionAffinity: None
type: LoadBalancer

View File

@ -0,0 +1,42 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: config-center
namespace: antucd
spec:
serviceName: "config-center"
selector:
matchLabels:
app: config-center
replicas: 1
template:
metadata:
labels:
app: config-center
spec:
imagePullSecrets:
- name: $SECRET_NAME
containers:
- image: $IMAGE_NAME
name: config-center
imagePullPolicy: Always
ports:
- containerPort: 3301
---
apiVersion: v1
kind: Service
metadata:
name: config-center
namespace: antucd
labels:
app: config-center
spec:
type: NodePort
ports:
- port: 3301
name: config-center
targetPort: 3301
selector:
app: config-center

View File

@ -13,6 +13,47 @@ Kuboard v2.0.x 的更新说明
了解 [从Kuboard v1.0.x 升级到 Kuboard v2.0.x](./upgrade-1-2.html)
## v2.0.0-beta.3.b
**发布日期**
2020年5月31日
**新特性**
* 套件功能重构
* 使用 CRD 存储套件相关信息
* 优化套件安装过程的体验
* 将套件编辑器与套件安装过程整合,降低套件开发的难度(开发一个全新套件的门槛仍然比较高,但是基于已有套件改造和提升的门槛变得很低)
* 资源监控套件
* 基于 Prometheus/Grafana 提供资源监控套件
* i18n
* 可以在设置中修改语言偏好
* 提高 i18n 的完成度(工作负载查看页等)
* 日志/终端界面
* 修改前景色,以适应不同的光线环境
**优化**
* 节点详情页
* Pod 列表排序
* 完善加载出错时的错误提示信息
**BUG修正**
* Pod 详情页未显示面包屑
## v2.0.0-beta.2.c
**发布日期**
2020年5月24日
**BUG修正**
* 列表页中,删除按钮可能对应到错误的条目
## v2.0.0-beta.2
**发布日期**