写在开始
说实话研究了很久还是很多地方都不懂,K8s真的太难了。不过部署还是相对简单的,复杂的问题可能就不太会了。本教程以部署为主,测试为主。后续如果要升级版本,我暂时也不会~~哈哈哈
1、准备一台虚拟机
系统:CentOS 7
或 Ubuntu 20
,不过我自己用CentOS7多,很少用Ubuntu
配置:2核4G起
系统安装自己百度吧!网络需要能访问git和hub docker,网络问题自己解决!
2、安装sealos
我自己是用sealos
官方提供的安装方式安装的
CentOS终端执行以下命令安装sealos
,如果没有安装wget的,需要提前安装一下
wget https://github.com/labring/sealos/releases/download/v4.1.4/sealos_4.1.4_linux_amd64.tar.gz \
&& tar zxvf sealos_4.1.4_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin
判断是否成功安装sealos
sealos version
3、安装K8s单机环境以及一些Laf需要的组件
CentOS终端执行以下命令,建议先保存到一个install.sh
文件,后执行sh install.sh
#!/usr/bin/env sh
# pull sealos cluster images
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 pull lafyun/laf:latest
sealos run labring/kubernetes:v1.24.9 labring/flannel:v0.19.0 labring/helm:v3.8.2 --single
# taint master node
NODENAME=$(kubectl get nodes -ojsonpath='{.items[0].metadata.name}')
kubectl taint node $NODENAME node-role.kubernetes.io/master-
kubectl taint node $NODENAME node-role.kubernetes.io/control-plane-
# label master node as a app node
kubectl label node $NODENAME laf.dev/node.type=runtime
# install required components
sealos run labring/openebs:v1.9.0
sealos run labring/cert-manager:v1.8.0
判断安装是否成功,这个命令会经常用到,查看集群的全部Pod状态,多执行几次,直到都Running
kubectl get pods -A
当命名空间为 kube-system 的几个pod的状态都是Running,就代表K8s的单机环境安装成功
4、部署Laf
需要一个测试域名
可直接用虚拟机的IP形成的域名,如:192.168.1.122.nip.io ,格式为:虚拟机ip.nip.io
clone laf源码
git clone https://github.com/labring/laf.git
新建安装脚本并开始安装
进 laf/deploy/build/
目录,然后新建一个 install.sh,代码如下:
DOMAIN="$1"
NAMESPACE=laf-system
REGION=default
HTTP_SCHEMA=http
DB_PV_SIZE=10Gi
OSS_PV_SIZE=20Gi
# *************** Environment Variables ************** #
## envs - global
HTTP_SCHEMA=${HTTP_SCHEMA:-http}
NAMESPACE=${NAMESPACE:-laf-system}
PASSWD_OR_SECRET=$(tr -cd 'a-z0-9' </dev/urandom |head -c32)
# *************** Deployments **************** #
## 0. create namespace
kubectl create namespace ${NAMESPACE} || true
## 1. install mongodb
set -e
set -x
DATABASE_URL="mongodb://${DB_USERNAME:-admin}:${PASSWD_OR_SECRET}@mongodb-0.mongo.${NAMESPACE}.svc.cluster.local:27017/sys_db?authSource=admin&replicaSet=rs0&w=majority"
helm install mongodb -n ${NAMESPACE} \
--set db.username=${DB_USERNAME:-admin} \
--set db.password=${PASSWD_OR_SECRET} \
--set storage.size=${DB_PV_SIZE:-5Gi} \
./charts/mongodb
# 2. deploy apisix
APISIX_API_URL="http://apisix-admin.${NAMESPACE}.svc.cluster.local:9180/apisix/admin"
APISIX_API_KEY=$PASSWD_OR_SECRET
helm install apisix -n ${NAMESPACE} \
--set apisix.kind=DaemonSet \
--set apisix.hostNetwork=true \
--set admin.credentials.admin=${APISIX_API_KEY} \
--set etcd.enabled=true \
--set etcd.host[0]="http://apisix-etcd:2379" \
--set dashboard.enabled=true \
--set ingress-controller.enabled=true \
--set ingress-controller.config.apisix.adminKey="${APISIX_API_KEY}" \
./charts/apisix
## 3. install minio
MINIO_ROOT_ACCESS_KEY=minio-root-user
MINIO_ROOT_SECRET_KEY=$PASSWD_OR_SECRET
MINIO_DOMAIN=oss.${DOMAIN}
MINIO_EXTERNAL_ENDPOINT="${HTTP_SCHEMA}://${MINIO_DOMAIN}"
MINIO_INTERNAL_ENDPOINT="${HTTP_SCHEMA}://minio.${NAMESPACE}.svc.cluster.local:9000"
helm install minio -n ${NAMESPACE} \
--set rootUser=${MINIO_ROOT_ACCESS_KEY} \
--set rootPassword=${MINIO_ROOT_SECRET_KEY} \
--set persistence.size=${OSS_PV_SIZE:-3Gi} \
--set domain=${MINIO_DOMAIN} \
--set consoleHost=minio.${DOMAIN} \
./charts/minio
## 4. install laf-server
SERVER_JWT_SECRET=$PASSWD_OR_SECRET
helm install server -n ${NAMESPACE} \
--set databaseUrl=${DATABASE_URL} \
--set jwt.secret=${SERVER_JWT_SECRET} \
--set apiServerHost=api.${DOMAIN} \
--set apiServerUrl=${HTTP_SCHEMA}://api.${DOMAIN} \
--set default_region.database_url=${DATABASE_URL} \
--set default_region.minio_domain=${MINIO_DOMAIN} \
--set default_region.minio_external_endpoint=${MINIO_EXTERNAL_ENDPOINT} \
--set default_region.minio_internal_endpoint=${MINIO_INTERNAL_ENDPOINT} \
--set default_region.minio_root_access_key=${MINIO_ROOT_ACCESS_KEY} \
--set default_region.minio_root_secret_key=${MINIO_ROOT_SECRET_KEY} \
--set default_region.runtime_domain=${DOMAIN} \
--set default_region.website_domain=site.${DOMAIN} \
--set default_region.tls=false \
--set default_region.apisix_api_url=${APISIX_API_URL} \
--set default_region.apisix_api_key=${APISIX_API_KEY} \
--set default_region.apisix_public_port=80 \
./charts/laf-server
## 6. install laf-web
helm install web -n ${NAMESPACE} \
--set domain=${DOMAIN} \
./charts/laf-web
安装方式为 sh install.sh 192.168.1.122.nip.io
这里是192.168.1.122.nip.io填刚刚准备的域名
等待个十分钟差不多就安装完成了
查看安装是否成功
多次执行这个命令查看Pod是否全部Running
kubectl get pods -A
全部安装好了的是这样的
可以打开网页,网页地址是:http://192.168.1.122.nip.io
,也就是刚刚准备的域名,能成功看到Laf的首页,以及注册登录就基本正常了。如果发现创建装成功之后的第一个应用无法成功,需要重启一下服务器,然后删除之前创建的应用,再次创建就没问题了。
5、部署遇到异常
如果自己搞不懂问题出在哪,可以直接考虑重装,sealos的重装非常简单
sealos reset --force
等待全部执行完毕且不报错之后,重新安装,返回去安装3和4即可
常见异常1、minio 安装失败
修改三个地方后,执行sealos reset --force
,然后返回去安装3和4
laf/deploy/build/charts/minio/values.yaml
去掉前面的quay.io/
laf/deploy/build/charts/apisix/charts/etcd/values.yaml
修改repository为:nightwhite634/quay.io.coreos.etcd
6、外部连接MongoDB
获取admin密码
kubectl get secrets -n laf-system mongodb-mongodb-init -o jsonpath='{.data.password}' | base64 --decode
配置端口转发
kubectl port-forward mongodb-0 27017:27017 -n laf-system
使用Navicat连接,其他的Mongo工具我不会用
先配置SSH,勾选使用SSH通道
然后点常规
双击新建的连接即可连接到Laf的MongoDB
7、进APISIX
APISIX配置新手不懂的不要乱改,我也不太懂,改错了自己解决!!
kubectl get svc apisix-dashboard -n laf-system -o yaml >> ~/apisix.yaml
vi ~/apisix.yaml
可以先备份一份再修改。
然后执行一下命令让配置生效
kubectl apply -f ~/apisix.yaml
浏览器就可以直接通过虚拟机IP+端口号 31900 访问了,账号密码 admin admin
修改密码我不会,所以不建议公网运营的情况下这么用,或者说用完立马改回去也可以。
8、关闭用户注册
修改AuthProvider
集合的这个参数