编辑
2025-07-10
计算机技术
00
请注意,本文编写于 93 天前,最后修改于 0 天前,其中某些信息可能已经过时。

首先安装docker,并且配置镜像源,参考这个文章
https://blog.csdn.net/sxf1061700625/article/details/140895299

安装K3S,由于我的云服务器之间没有内网,所以直接使用公网IP,如果服务器上有网站,不想受到影响,可以使用:

curl -sfL https://get.k3s.io | \ INSTALL_K3S_EXEC="server \ --tls-san 38.207.179.227 \ --bind-address 38.207.179.227 \ --https-listen-port=6443 \ --disable=traefik \ --docker \ --disable-network-policy \ --kubelet-arg=cgroup-driver=systemd" \ K3S_TOKEN=lookclz6@K3S \ sh -

如果没有网站,或者希望通过ingress暴露网站,可以使用这个

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh - curl -sfL https://get.k3s.io | \ INSTALL_K3S_EXEC="server \ --tls-san 129.211.62.113 \ --bind-address 129.211.62.113 \ --https-listen-port=6443 \ --docker \ --disable-network-policy \ --kubelet-arg=cgroup-driver=systemd" \ K3S_TOKEN=lookclz6@K3S \ sh -

Traefik是 K3s 默认安装的Ingress 控制器,用于管理外部访问 Kubernetes 服务的路由规则(如 HTTP/HTTPS 流量转发)

工作节点加入集群

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://38.207.179.227:6443 K3S_TOKEN=lookclz6@K3S sh -s - --docker

使用kuboard面板

--- apiVersion: v1 kind: Namespace metadata: name: kuboard --- apiVersion: v1 kind: ConfigMap metadata: name: kuboard-v3-config namespace: kuboard data: KUBOARD_SERVER_NODE_PORT: '30060' KUBOARD_AGENT_SERVER_UDP_PORT: '30081' KUBOARD_AGENT_SERVER_TCP_PORT: '30081' KUBOARD_SERVER_LOGRUS_LEVEL: info KUBOARD_AGENT_KEY: 32b7d6572c6255211b4eec9009e4a816 KUBOARD_AGENT_IMAG: swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard-agent KUBOARD_QUESTDB_IMAGE: swr.cn-east-2.myhuaweicloud.com/kuboard-dependency/questdb:6.0.4 KUBOARD_DISABLE_AUDIT: 'false' --- 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: DaemonSet metadata: labels: k8s.kuboard.cn/name: kuboard-etcd name: kuboard-etcd namespace: kuboard spec: revisionHistoryLimit: 10 selector: matchLabels: k8s.kuboard.cn/name: kuboard-etcd template: metadata: labels: k8s.kuboard.cn/name: kuboard-etcd spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node-role.kubernetes.io/master operator: Exists - matchExpressions: - key: node-role.kubernetes.io/control-plane operator: Exists - matchExpressions: - key: k8s.kuboard.cn/role operator: In values: - etcd containers: - env: - name: HOSTNAME valueFrom: fieldRef: apiVersion: v1 fieldPath: spec.nodeName - name: HOSTIP valueFrom: fieldRef: apiVersion: v1 fieldPath: status.hostIP image: 'swr.cn-east-2.myhuaweicloud.com/kuboard/etcd-host:3.4.16-2' imagePullPolicy: Always name: etcd ports: - containerPort: 2381 hostPort: 2381 name: server protocol: TCP - containerPort: 2382 hostPort: 2382 name: peer protocol: TCP livenessProbe: failureThreshold: 3 httpGet: path: /health port: 2381 scheme: HTTP initialDelaySeconds: 30 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 1 volumeMounts: - mountPath: /data name: data dnsPolicy: ClusterFirst hostNetwork: true restartPolicy: Always serviceAccount: kuboard-boostrap serviceAccountName: kuboard-boostrap tolerations: - key: node-role.kubernetes.io/master operator: Exists - key: node-role.kubernetes.io/control-plane operator: Exists volumes: - hostPath: path: /usr/share/kuboard/etcd name: data updateStrategy: rollingUpdate: maxUnavailable: 1 type: RollingUpdate --- apiVersion: apps/v1 kind: Deployment metadata: annotations: {} labels: k8s.kuboard.cn/name: kuboard-v3 name: kuboard-v3 namespace: kuboard spec: replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: k8s.kuboard.cn/name: kuboard-v3 template: metadata: labels: k8s.kuboard.cn/name: kuboard-v3 spec: affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - preference: matchExpressions: - key: node-role.kubernetes.io/master operator: Exists weight: 100 - preference: matchExpressions: - key: node-role.kubernetes.io/control-plane operator: Exists weight: 100 containers: - env: - name: HOSTIP valueFrom: fieldRef: apiVersion: v1 fieldPath: status.hostIP - name: HOSTNAME valueFrom: fieldRef: apiVersion: v1 fieldPath: spec.nodeName envFrom: - configMapRef: name: kuboard-v3-config image: 'swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3' imagePullPolicy: Always 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 # livenessProbe 已移除(下面这部分没有了) readinessProbe: failureThreshold: 3 httpGet: path: /kuboard-resources/version.json port: 80 scheme: HTTP initialDelaySeconds: 30 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 1 dnsPolicy: ClusterFirst restartPolicy: Always serviceAccount: kuboard-boostrap serviceAccountName: kuboard-boostrap tolerations: - key: node-role.kubernetes.io/master operator: Exists --- apiVersion: v1 kind: Service metadata: annotations: {} labels: k8s.kuboard.cn/name: kuboard-v3 name: kuboard-v3 namespace: kuboard spec: ports: - name: web nodePort: 30060 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 sessionAffinity: None type: NodePort

使用kubectl apply 这个yaml之后,就可以通过30060端口在浏览器访问面板了,初始账户密码:admin\Kuboard123
可选:

  1. 运行测试容器
kubectl run test-bash --image=busybox --restart=Never -- sleep 3600
  1. 如果需要使用helm,可以参考 https://blog.csdn.net/qq_37671523/article/details/151360641

本文作者:枣子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!