储备知识
- 遇到问题会问ChatGPT 🇪
- 对Kubernetes有基本的了解,如kubectl ,Sealos 等基础命令。
- 对基本网络有了解。如判断家用宽带是否有公网IP,会动态DDNS设置,放通端口等。
- 有一个可以探索科学的网络环境
环境概要
核武器:Sealos
系统:Ubuntu 22.04
Kubernetes管理面板:kuboard
动态域名解析到IP,且放通端口
参考域名laf.home.com
*.laf.home.com
laf.home.com
初始化Kubernetes环境
拉取Laf源码
git clone https://github.com/labring/laf.git
修改laf/deploy/scripts部署脚本,保留安装Sealos与初始化的内容,并且重命名为init_k8s.sh
if [ -x "$(command -v apt)" ]; then
echo "deb [trusted=yes] https://apt.fury.io/labring/ /" | tee /etc/apt/sources.list.d/labring.list
apt update
apt install sealos=4.1.4 -y
sed -i "/update_etc_hosts/c \\ - ['update_etc_hosts', 'once-per-instance']" /etc/cloud/cloud.cfg && touch /var/lib/cloud/instance/sem/config_update_etc_hosts
fi
set -e
sealos pull labring/kubernetes:v1.24.9
sealos pull labring/flannel:v0.19.0
sealos pull labring/helm:v3.8.2
sealos pull labring/openebs:v1.9.0
sealos pull labring/cert-manager:v1.8.0
sealos run labring/kubernetes:v1.24.9 labring/flannel:v0.19.0 labring/helm:v3.8.2 --single
NODENAME=$(kubectl get nodes -ojsonpath='{.items[0].metadata.name}')
kubectl taint node $NODENAME node-role.kubernetes.io/master- || true
kubectl taint node $NODENAME node-role.kubernetes.io/control-plane- || true
kubectl label node $NODENAME laf.dev/node.type=runtime
sealos run labring/openebs:v1.9.0
sealos run labring/cert-manager:v1.8.0
运行脚本init_k8s.sh(如果网络状况好的话只需要5分钟左右)
部署kuboard
具体参考以下文档
与Kubernetes 环境分开使用docker部署
将 Kuboard 安装到 Kubernetes 集群中
鉴于大佬们可能没有分开的docker环境这里提供一个保姆级别的例子 使用static pod的方式部署kuboard
#!/bin/bash
ipaddr=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}' | awk 'NR==1{print}')
echo "current ip address is ${ipaddr}"
echo "create file /root/kuboard-sa.yaml"
echo
cat > /root/kuboard-sa.yaml << EOF
---
kind: Namespace
apiVersion: v1
metadata:
name: kuboard
---
kind: ServiceAccount
apiVersion: v1
metadata:
name: kuboard-admin
namespace: kuboard
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: kuboard-admin-crb
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kuboard-admin
namespace: kuboard
---
kind: ServiceAccount
apiVersion: v1
metadata:
name: kuboard-viewer
namespace: kuboard
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: kuboard-viewer-crb
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: view
subjects:
- kind: ServiceAccount
name: kuboard-viewer
namespace: kuboard
EOF
echo "kubectl apply -f /root/kuboard-sa.yaml"
kubectl apply -f /root/kuboard-sa.yaml
echo
echo "create file /etc/kubernetes/manifests/kuboard.yaml"
echo
cat > /etc/kubernetes/manifests/kuboard.yaml << EOF
---
apiVersion: v1
kind: Pod
metadata:
annotations: {}
labels:
k8s.kuboard.cn/name: kuboard-v3
name: kuboard-v3
namespace: kuboard
spec:
containers:
- env:
- name: KUBOARD_ENDPOINT
value: "http://${ipaddr}:32001"
- name: KUBOARD_AGENT_SERVER_TCP_PORT
value: "10081"
image: 'eipwork/kuboard:v3'
imagePullPolicy: IfNotPresent
livenessProbe:
failureThreshold: 3
httpGet:
path: /kuboard-resources/version.json
port: 80
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
name: kuboard
ports:
- containerPort: 80
hostPort: 32001
name: web
protocol: TCP
- containerPort: 10081
name: peer
protocol: TCP
hostPort: 10081
- containerPort: 10081
name: peer-u
protocol: UDP
hostPort: 10081
readinessProbe:
failureThreshold: 3
httpGet:
path: /kuboard-resources/version.json
port: 80
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
volumeMounts:
- mountPath: /data
name: data
- mountPath: /init-etcd-scripts/import-cluster-once.yaml
name: import-cluster-yaml
volumes:
- hostPath:
path: "/usr/share/kuboard"
name: data
- hostPath:
path: "/usr/share/kuboard/import-cluster-once.yaml"
name: import-cluster-yaml
dnsPolicy: ClusterFirst
restartPolicy: Always
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
EOF
echo "restart kubelet"
systemctl restart kubelet
host_name=$(hostname)
echo
echo "\033[34m检查状态\033[0m 待 kuboard-v3-${host_name} 的容器组变为 Running 状态后,则安装成功,可以通过 http://${ipaddr} 访问 kuboard 界面"
将上述文件保存为kuboard.sh后运行,上方的端口为32001,如有其他端口需求可以更改为其他只需要改
hostPort和http://${ipaddr}:32001即可
kubectl get pods -n kuboard -o wide
输入master ip 加端口号32001即可访问
如:192.168.6.27:32001
如需要卸载可以输入
kubectl delete -f /root/kuboard-sa.yaml
配置kuboard
登录kuboard添加集群,选择.kubeconfig的方式添加
复制~/.kube/config路径下的配置
修改APIServer 地址,通常是与docker 同一个网络环境。我这边是master节点IP为:192.168.6.27,根据实际的来
完成~
自定义Laf配置的端口
修改/laf/deploy/build/charts/apisix/values.yaml 下的端口为放通的端口
修改 /laf/deploy/build/start.sh 下的端口
输入解析后的域名后执行脚本
export DOMAIN=laf.home.com
sh start.sh
等脚本执行完成后输入以下命令查看安装进度,当所有pod都是running的时候代表部署成功,也可以进入kuboard面板查看部署进度和日志
常见问题
如何全部卸载重新部署
sealos reset --force
sealos rmi -f docker.io/lafyun/laf:latest || true
sh init_k8s.sh
export DOMAIN=laf.home.com
sh start.sh
如何访问apisix-dashboard 面板(下面是两种不同的方式)
1.修改apisix-dashboard为NodePort类型(不建议在公网环境这样配置)
进入kuboard后台根据以下截图进行修改后保存在访问master 节点的ip加端口即可
2.通过kubectl 转发端口数据
kubectl port-forward apisix-dashboard-74dcdf59d8-xzt99 -n laf-system --address=192.168.6.27 28016:9000
执行成功后访问master ip加端口28016即可
如何访问mongodb数据库
通过kubectl 转发端口
kubectl get secrets -n laf-system mongodb-mongodb-init -o jsonpath='{.data.password}' | base64 --decode
kubectl port-forward mongodb-0 -n laf-system --address=192.168.6.27 28015:27017
获取后构建如下链接
mongodb://admin:{替换为自己的密码}@192.168.6.27:28015/sys_db?authSource=admin&replicaSet=rs0&w=majority
在MongoDB Compass输入后即可登录
如何禁止用户注册
访问mongodb数据库按以下截图修改
如何更新
以下例子只是简单的更新,不保证一定能更新,如果存在更新后无法启动或数据丢失的情况概不负责
需要在github上查看是否是较大改动,改动不大的可以用以下方法。如laf server端数据表改动算比较大的改动。小白建议重新部署,具体自己判断。以下以跟新web端为例子
登录dockerHub 查看更新的版本sha值
登录kuboard 点击laf-system
调整镜像版本为dockerHub最新的即可
如何配置HTTPS
比较优雅一点的方式应该是用k8s的cert-manager来进行证书的管理和自动续签,这样的门槛有点高。所以以下用
acme.sh的方式安装, 下方是使用阿里云域名dns验证的方式,详细文档可以去开源仓库查看acme.sh
curl https://get.acme.sh | sh -s email=xxxxx@laf.com
source ~/.bashrc
export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"
acme.sh --issue --dns dns_ali \
-d laf.home.com \
-d "*.laf.home.com " \
-d "*.oss.laf.home.com " \
-d "*.site.laf.home.com "
acme.sh --install-cert \
-d laf.home.com \
-d "*.laf.home.com" \
-d "*.oss.laf.home.com" \
-d "*.site.laf.home.com" \
--key-file /root/.acme.sh/laf.home.com_ecc/laf.home.com.key \
--fullchain-file /root/.acme.sh/laf.home.com_ecc/fullchain.cer
配置证书
登录apisix-dashboard按照以下截图上传证书或者粘贴即可
修改数据库信息
按照以上的方法连接mongo,如下图修改
如何修改apisix-dashboard的账户密码
登录kuboard,选择laf-system,配置字段。点击apisix-dashboard,修改后保存即可