部署OaaS到Kubernetes集群
关于OaaS,请参阅:https://github.com/hpcclab/OaaS/tree/main 或者https://github.com/pawissanutt/OaaS/tree/main 。
假设你有一个空白的Kubernetes集群,这个集群至少有3个node。
此文章描述的是旧版OaaS的部署流程,可能与新版部署流程有所不同。如果您需要部署持续更新的OaaS,请参阅https://github.com/pawissanutt/OaaS/tree/main 。
前置部署
Knative Serving
执行以下命令,分别安装custom resource和Knative core。
1 | kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.13.1/serving-crds.yaml |
1 | kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.13.1/serving-core.yaml |
Rook
首先,安装Rook并部署一个Rook集群。
1 | git clone --single-branch --branch v1.13.5 https://github.com/rook/rook.git |
接着,部署Rook Object Storage。将以下内容保存在object.yaml
文件中。
1 | apiVersion: ceph.rook.io/v1 |
执行以下命令创建对象存储。
1 | kubectl create -f object.yaml |
执行以下命令创建Rook Object存储类。
1 | # 假设你的工作目录在rook |
如果你的Kubernetes集群没有可供pvc的持久化存储(比如你在主机上部署了新的Kubernetes而非使用云计算平台提供的Kubernetes服务),还可以部署Rook的Block存储类,这样集群中的pod就可以申请Rook Block作为持久化存储了。执行以下命令创建Block的存储类。
1 | kubectl create -f deploy/examples/csi/rbd/storageclass.yaml |
Block存储类创建完成后,你可能需要修改Kubernetes的默认存储类,或者在部署配置文件中手动声明pvc的存储类。
Strimzi
建议使用helm来安装Strimzi。执行以下命令。
1 | helm install strimzi-cluster-operator oci://quay.io/strimzi-helm/strimzi-kafka-operator |
ArangoDB Operator
执行以下命令,将<version>改成你在ArangoDB的GitHub release页面看到的版本号。
1 | export URLPREFIX=https://github.com/arangodb/kube-arangodb/releases/download/<version> |
安装OaaS
从GitHub上克隆项目。
1 | git clone https://github.com/hpcclab/OaaS.git |
部署Kafka集群。
1 | kubectl apply -f deploy/kafka/kafka-cluster.yml |
等待Kafka集群部署完成。在这步中,当屏幕上显示的输出不再变化时,按Ctrl+C退出watch模式。
1 | kubectl get -w pod |
编辑deploy/oaas/object-bucket.yml
,在spec
中加入storageClassName: rook-ceph-bucket
。保存后执行以下命令部署Object Bucket。
1 | kubectl apply -f deploy/oaas/object-bucket.yml |
部署ArangoDB数据库。
1 | kubectl apply -f deploy/arango/arango-cluster.yml |
安装Nginx ingress控制器。
1 | helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx |
创建名为nginx-ingressclass.yaml
的文件并粘贴以下内容。
1 | apiVersion: networking.k8s.io/v1 |
执行以下命令创建ingress class。
1 | kubectl apply -f nginx-ingressclass.yaml |
创建名为oaas-ingress.yml
的文件,保存以下内容。
1 | apiVersion: networking.k8s.io/v1 |
创建ingress。
1 | kubectl apply -f oaas-ingress.yml |
如果你使用的不是云服务平台提供的Kubernetes服务,还需要将ingress控制器类型改为NodePort。
1 | kubectl edit svc my-nginx-ingress-ingress-nginx-controller -n ingress-nginx |
将其中spec.type
改为NodePort
,并保存。之后可通过服务器的公网IP加上service列表中显示的映射端口访问OaaS。