Kubernetes Kuboard部署
Kuboard是一款免费的Kubernetes管理工具,提供了丰富的功能,结合已有或新建的代码仓库、镜像仓库、CI/CD工具等,
可以便捷的搭建一个生产可用的Kubernetes容器云平台,轻松管理和运行云原生应用。
也可以直接将Kuboard安装到现有的Kubernetes集群,通过Kuboard提供的Kubernetes RBAC管理界面,将Kubernetes提供的能力开放给开发/测试团队。
项目地址:https://kuboard.cn/
部署
#提前部署好MetalLB 负载均衡 支持 LoadBalancer
[root@k8s-master01 Kuboard]# cat deploy.yaml
---
apiVersion: v1
kind: Namespace
metadata:
name: kuboard
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: kuboard-boostrap
namespace: kuboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kuboard-boostrap-crb
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kuboard-boostrap
namespace: kuboard
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s.kuboard.cn/name: kuboard-v3
name: kuboard-v3
namespace: kuboard
spec:
replicas: 1
selector:
matchLabels:
k8s.kuboard.cn/name: kuboard-v3
template:
metadata:
labels:
k8s.kuboard.cn/name: kuboard-v3
spec:
containers:
- env:
- name: "KUBOARD_ENDPOINT"
value: "http://kuboard-v3:80"
- name: "KUBOARD_AGENT_SERVER_TCP_PORT"
value: "10081"
image: eipwork/kuboard:v3
volumeMounts:
- name: kuboard-data
mountPath: /data
readOnly: false
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
httpGet:
path: /
port: 80
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
name: kuboard
ports:
- containerPort: 80
name: web
protocol: TCP
- containerPort: 443
name: https
protocol: TCP
- containerPort: 10081
name: peer
protocol: TCP
- containerPort: 10081
name: peer-u
protocol: UDP
readinessProbe:
failureThreshold: 3
httpGet:
path: /
port: 80
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
volumes:
- name: kuboard-data
emptyDir: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
serviceAccount: kuboard-boostrap
serviceAccountName: kuboard-boostrap
---
apiVersion: v1
kind: Service
metadata:
labels:
k8s.kuboard.cn/name: kuboard-v3
name: kuboard-v3
namespace: kuboard
spec:
ports:
- name: web
nodePort: 30080
port: 80
protocol: TCP
targetPort: 80
- name: tcp
nodePort: 30081
port: 10081
protocol: TCP
targetPort: 10081
- name: udp
nodePort: 30081
port: 10081
protocol: UDP
targetPort: 10081
selector:
k8s.kuboard.cn/name: kuboard-v3
type: LoadBalancer
#
[root@k8s-master01 Kuboard]# kubectl get pods -n kuboard
NAME READY STATUS RESTARTS AGE
kuboard-v3-6c9f7ddd97-d7q8h 1/1 Running 0 16m
[root@k8s-master01 Kuboard]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
externalname-redis-svc ExternalName <none> redis.ik8s.io 6379/TCP 21h
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d3h
nginx-loadbalancer-server LoadBalancer 10.110.35.224 192.168.40.51 80:31238/TCP 4d18h
[root@k8s-master01 Kuboard]# kubectl get svc -n kuboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kuboard-v3 LoadBalancer 10.111.22.174 192.168.40.53 80:30080/TCP,10081:30081/TCP,10081:30081/UDP 16m
Ingress可选
[root@k8s-master01 Kuboard]# cat ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kuboard
namespace: kuboard
spec:
ingressClassName: nginx
rules:
- host: kuboard.magedu.com
http:
paths:
- path: /
backend:
service:
name: kuboard-v3
port:
number: 80
pathType: Prefix
管理端访问
[root@k8s-master01 ~]# kubectl config view --raw
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURCVENDQWUyZ0F3SUJBZ0lJZDJpZHp4M0pZNFV3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TkRBeE1EVXdNekE0TlRKYUZ3MHpOREF4TURJd016RXpOVEphTUJVeApFekFSQmdOVkJBTVRDbXQxWW1WeWJtVjBaWE13Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLCkFvSUJBUURPY2dEUlB2YnhSTkhUeXp0N0M4MTIwYlZUVElyU01JNVE3RkZwOTE4SU5tS2lvUHR4SXRMbFdiNCsKVkl2S0JUWmgvVVFPNjhIZmFNRnIxb2FIRTZrYUdDM05qSHIxU3pmSGd0T3hNSGhXQWt0aGd0TjRnNHNrYUY4aApxeEZyOVN6Z2JYeXhmdG9VM3VFVFhYUDllWE9nSDBjckRydkc4dmczZnVpeFErNEJsTUY3NFZJV0RBR3QyQkl6CmJHK2NMaGVvRlFBamFKOUdZaXpsMkJkZTBIanorelM4T3YyRFI4TDFhY3ZKQWRnTVZzMTR6ZlJYL0k0RUVKQlkKWHdCNWNEVUZ5OUpQZDVTd0hyVmRxQktUbnlyanN3QzVZVDhzRWtPYlh6dkhKcThRVHR0RyswV0twRlBUUjhsYgpNZFdkSHBnVzY4YVUxRit3akdQdkx5NXU5UUREQWdNQkFBR2pXVEJYTUE0R0ExVWREd0VCL3dRRUF3SUNwREFQCkJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJTVHltOE1HSVViTkJsbTJYWGFkUXZnNG84dFdEQVYKQmdOVkhSRUVEakFNZ2dwcmRXSmxjbTVsZEdWek1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQXJNYTFPMmNhaAp3enFZUDBGWE5MdWlqZmlYVitiR3Ywb2J0aUFCMzlDNXdzMkVlWUg0TGVXS0RwNzJxN091R2o3MlJLbEFVYXdrCnlOOTFObms2NGlQcWJuK2p5Kyt6RUJjWTJBN25FT3R3YStUNG9sYWEyWnJmZTlZMlVmTkJKd294dVN2T1pPSisKYXFLWWFCQkg4SDN1d2FDa1dCRm9IN2dHdUZMUXE3S1MybUtzd1RqVE1EYm5YNzRLN1ZQaytoTE1ablpBS2FzNQp2c0lCTEZSUHV6aElpTFoxMjUrN0ptbzFDOXBPTVhabDdra1doT2JKejVnUUVlWFJJWDZhakFOejJLRHVhREZ0CkJKODdqMkQzbW1LWXhlN2xneFV4QVBwK2NURkY5YUlYU1NQU3dpTlRTVVF0TVV0eTRjMHFrSGl0K1Q2STM2ZWkKajFZYmVtQXc0dGg5Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
server: https://192.168.40.101:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ0F3SUJBZ0lJUUZXUW5uOU5EMFF3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TkRBeE1EVXdNekE0TlRKYUZ3MHlOVEF4TURRd016RXpOVE5hTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXB1ZFhjTWl5dWkyNk1yRXMKZ05Lak9jbTRMejlQWEFPZmQ1cEdiWSttY0xPV1BXejJUS2VJdEdBQ0hxTlJJWEtTV2JJMk9HdUdoeFZaV2RERQpFV3RDRi9TYitUNkFvRzNxcDhtNzV5QkNrY0wwMmZQVkhXUVkrVmtmaTFpK3BOeStiakw3UjJvTzUwUUdDemRpCnhxdDJvNUtERFFpd05WaTRaUGQ1R2FmOE55Unp1SUdrSk5UOHBBSForVFdTcDdnQU5BM1UxanFWaTVsYWFRTm4KYzdTK1c0M25wN1FuY2c0WkhnNVBEREVMV1lacGxvMlV0cm9Ta3BRY3JyMmMvOEx2WjM0VkF2MElZOFVQaVB4MQorWWtGMTI1cmIyYnh1d3RHQ1YvUDRKbGpxWm1NOFZYU0VDTUpCUlF5NjJpODZqb2Y4Y2c1eEJqRGRlWkFxaU9lCmRuWVA1UUlEQVFBQm8xWXdWREFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RBWURWUjBUQVFIL0JBSXdBREFmQmdOVkhTTUVHREFXZ0JTVHltOE1HSVViTkJsbTJYWGFkUXZnNG84dApXREFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBZFBQV2VFRW43SVpVUmVoclhtcE0rMnV5Q01wdzNRU2lUWXNZCndzazJ0Z3VaZTRyV3R6REIzaTZZNTVON3BteXdmcGNvNjlvdUtLbGc5WWpXT0ZkaW9jN1ByY2pEUlU0RVpGN2sKTlAwb0F2M3dSRHRCdERVWjdlSkM3UFFCemVCbGk0ZDY1U20va1ZZOVRQdUdpamRQQk15dTUxSUYvdUl6MTg5dwpUdkZEcGRCRjhRa3RtRVRtY3B6R2VkY1kyb1JvRmNzQVNuWWFlQ0VRRlAyS2dubmRJek5FdWl6eG1HU0ZPV0k1CmduWnYxbG1lakpGK3dLSmI2cTdoNE55QVFDU3ZSYXlZTDQrVDN1ZHQxLzNWR2dhUnljYnBVL2JPMjVHWGk5ZWoKYXJvS3FXSTVpNVVzZDF5MTZFR1p1azJnQ0NuUmZYVzZwVzBqNWRCSHBRRjVoSGwxZHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBcHVkWGNNaXl1aTI2TXJFc2dOS2pPY200THo5UFhBT2ZkNXBHYlkrbWNMT1dQV3oyClRLZUl0R0FDSHFOUklYS1NXYkkyT0d1R2h4VlpXZERFRVd0Q0YvU2IrVDZBb0czcXA4bTc1eUJDa2NMMDJmUFYKSFdRWStWa2ZpMWkrcE55K2JqTDdSMm9PNTBRR0N6ZGl4cXQybzVLRERRaXdOVmk0WlBkNUdhZjhOeVJ6dUlHawpKTlQ4cEFIWitUV1NwN2dBTkEzVTFqcVZpNWxhYVFObmM3UytXNDNucDdRbmNnNFpIZzVQRERFTFdZWnBsbzJVCnRyb1NrcFFjcnIyYy84THZaMzRWQXYwSVk4VVBpUHgxK1lrRjEyNXJiMmJ4dXd0R0NWL1A0SmxqcVptTThWWFMKRUNNSkJSUXk2Mmk4NmpvZjhjZzV4QmpEZGVaQXFpT2VkbllQNVFJREFRQUJBb0lCQUViZ29XSjA2R2xsOTllRgpJK2dGQzJvRC91S1ptU0x6S3VwSXFyWG1OZ0ZRVW5IOWJzNzRxblltKzE5MWJZT3R1dmE2Vm9vNUoyVUFMUFNXClVsMHZWbDhEOHFTeTVUNjd6dFc0TnNLZEVZZ0M2YVlSQlNTNUdGM3plaERiL0FIWStFbWwvczNCL1ZnNnEvSmgKYitIOGVLSllHcTBUVG5rcEZ3MVJocXpkaUo4RmZVbjM1YTNuM1FMaFg0bzB5akJTa3FhenFlTWhEN291cHJDTQp4alBmOWxlZDU2Z2lKZVFkLzYzRURiMXZyM0ZDb1NFUHRDRkIvWVBycDROeFhxSGM0MUlEcDVCdk5DTzBOcGt3CmJxU0FhM3NNY3pZOHlGVkNNTkpPOXFNR1p0U0t0Zy83YTl6TXEwUzQxRzZLT0d5RlFwWDZHTUp0WEJ2VW8vQ1QKckZZaVU2RUNnWUVBMENmSjhsN2JOdTFPSkprMmEwVzlGSzBSVFQ0UFRRaWNyOHpUcER6amNmQm5hOWZkK0ZsKwpKZnJiZHRjK2F6eUc2cStWelZ5UHlwNk1xWSt0eHNGZ2JKTUs1ZUN0QTVZS3huSDhlMUp1ei92bDFqQm4rRGlEClR0V1JTVGxxNXRadjhBNlNIU1dINmNnMzZtcXYwSzlqVE85YzZrSzhSMHZkQk5lWUxmMk82ZWtDZ1lFQXpVUTcKT2FtcTBzdlBDSE1MSXJ5TXI5cmF0Z1ZBeWxYV2ZvNm15Rm1kRHhad3NaRWJBK09FS3lPdDdHSXd6cjJIQldCSgphL2Q1aEpsVTRLeFFMY2hSb1Y2UVZCVkZlemx2K201S3p6ZjNqMjFSdUxNU0FwSGxrNmNvQnRVZ2kxQVVxWjZDCkVZckRYNTBUR0V6SVJuTXNSRm1ESjdvS1luUDNPYklUOW1KT1BKMENnWUIrR2t5K2wzYW9mUFVsT09oOTdsN1IKSXRQamZxQllZOHBBdW83UTVjNUluWUthRThtMmhjamxpMmJmUlNEY2FHdTN5NjJ1SHRCQnlQR2dXNW5FV2l4bgpPbUdVeUJzb25BSmxISEwvNXYyWTVKcmx1cWVSK2ZLYWxNbVNtY1ZJbVVweEhQS3AwNjNXRkdURGorUjVRWGVnCkNUYTUrTG9GVzFGSGVMRUowNTE3MlFLQmdGU2RzK3hwVE1ub3lrZXBaUVhFeEJvYUZkN0MrNXB0R0NiRGwyMHYKdzliY1lVaFJrTmxoaUxKZjJ1cCs3Ni9KNFVjT0VqWTNwaGhMUFBvQkRteFJENVY5N2ZFN2M1RUFkSEMvMW9ibApnMS9VcU1PQ3pnSFJNdHBUSmVUckpxZEhNNzFZWWpYcEJmRDhSMHJWSEJvdWtDajgzVndiRFB6WTRTa2ZoNnNoCml5N2hBb0dBR3FVUDVseSs2YzhNb1YwVGs3Zk5sSlo1ckt1d0VNaCtpS3NCWUVlVnVHcmxpeVAyT09KMUVZdCsKVnF5VnBoVTBRYjhMdnV4MkF2VWxLeDdSeWhMaDJmTnVOa3c1RW9xQ1hPQVRWeWVDM1JtRHZJSVRJanFQZnlqRwovUkZIcUcveGFVSENnTVhoWlgzREFydyswcjQ0ejhjY2hidEtxQTlSSmF0VVlFeVVrZ0E9Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==