前段时间,由于chatGPT的爆火,笔者也做了个chatGPT相关的小运用,企图帮小伙伴们快速将chatGPT接入到个人微信中,详见用ChatGPT搞了个 OpenAI微信接入平台(网页版)。现在,微信扫码登录的方法由于存在安全隐患,官方现已禁止此类操作了。

不过,抛开运用本身,来了解下我是怎样不到一天将其快速布置上线的吧!

基础装备

资源有限,现在手上只要这么一台虚拟机,装备如下:

我是如何快速部署上线一个ChatGPT小应用的

  • 内存:12GB

  • CPU:2核(虚拟)

架构介绍:

微信接入平台小程序是根据PythonFlask开发的, 主要功能即调用OPENAI接口,属于无状况运用(无存储,无数据库等),因此很合适打包到Docker容器中。所以,架构上我从一开端计划将其布置在K8S上,以Pod的方法运转以完成服务的高可用,也为后续完成CICD流水线作业、自动化运维做好基础。

按例,来问问chatGPT技能相关问题,比方将咱们的运用程序布置到Kubernetes上有什么好处吧

我是如何快速部署上线一个ChatGPT小应用的

选型:

考虑到只要单台机器, 怎样选型K8S架构呢?现在业内有这么几种计划

我是如何快速部署上线一个ChatGPT小应用的

能够看到,MicroK8s十分合适用于本地开发环境,它能够以轻量的资源消耗和简略的运维本钱提供几乎完整的Kubernetes生态体会。此外,它支持高可用特性(HA),并且与完整版的Kubernetes相同能够快速组建K8s集群。

之前我运用过Kubernetes 官方开源东西Kubeadm来建立集群,相比MicroK8s全体建立步骤会繁琐不少,更合适需求比较多定制的场景。因此,这次我计划来体会下MicroK8s,作为线上布置环境。

装置microK8S

在 Ubuntu 环境下,装置 MicroK8s 十分简略,命令如下

sudosnapinstallmicrok8s--classic#装置
sudo snap alias microk8s.kubectl kubectl    # 设置 K8s 命令别号(alias)
sudousermod-a-Gmicrok8subuntu#普通用户运转权限
newgrp microk8s
microk8senablednsdashboardstorage#启用microK8S相关服务

搞定,这样就能够根本运用了, 检查下microk8s服务状况

我是如何快速部署上线一个ChatGPT小应用的

检查下节点状况

ubuntu@instance-k8s:~$ k get nodes
NAME STATUS   ROLES    AGE    VERSION
instance-k8s   Ready    <none>   273d   v1.24.10-2+123bfdfc196019

单机版别的K8S就建立好了 ,下面来布置运用吧!

运用布置

首要,编写DockerFile将Flask 运用打包到Docker

FROM python:3.9-slim
RUN apt-get update \
    && apt-get install -y --no-install-recommends python3-dev
COPY . ./app/
RUN pip install -r ./app/requirements.txt
EXPOSE 9000
ENTRYPOINT ["python3","./app/routes.py"]

接着,将镜像Push到docker hub上

docker login
  dockerbuild-tchatgpt-bot-arm:v1.  
  docker tag chatgpt-bot-arm:v1  thai/chatgpt-bot-arm:v1
  dockerpushthai/chatgpt-bot-arm:v1

接着,登录服务器,布置运用POD

kubectlrunchat--image=thai/chatgpt-bot-arm:v1--port=9000--replicas=3

检查Pods状况

ubuntu@instance-k8s:~$ k get pods
NAME                   READY   STATUS    RESTARTS   AGE
chat-c9d57f5dd-w6l9v   1/1     Running   0          7d9h
chat-c9d57f5dd-7khdh   1/1     Running   0          7d9h
chat-c9d57f5dd-xvc74   1/1     Running   0          7d9h

尝试从服务器本地拜访Pod 是否正常

我是如何快速部署上线一个ChatGPT小应用的

创立service

Pods正常启动后,下一步即创立运用Service,为咱们刚创立的Deployment(一组Pods)增加拜访进口

知识点:

Service 是Kubernetes 里重要的服务目标。Kubernetes 引入 Service 的原因有两个:一是由于 Pod 的 IP 不固定,二是由于在一组 Pod 实例之间需求负载均衡。咱们接下来创立的ClusterIP 形式的 Service ,就是为Pod 生成一个 安稳的 IP 地址,即 VIP,详细参考官方文档: kubernetes.io/docs/concep…

创立service.yaml

我是如何快速部署上线一个ChatGPT小应用的

测试Service是否连通pod

我是如何快速部署上线一个ChatGPT小应用的

启用Ingress

有了Service后,怎样才能从集群外(公网)拜访到咱们的服务呢?

知识点:

通常,咱们会创立LoadBalancer 类型的 Service,将内部服务暴露给外界,它会在 Cloud Provider(如:AWS or Azure)里创立一个与该 Service 对应的负载均衡服务,而本文咱们将运用Ingress来完成外部拜访

Kubernetes 里的 Ingress 服务,能够全局地、署理不同后端 Service 而设置的负载均衡服务,类似Service的Service,详细参考官网:kubernetes.io/docs/concep…

因此,咱们需求布置Ingress来作为Kubernete的“反向署理”,详细怎样完成呢?

在实际的运用中,咱们需求从社区里挑选一个详细的 IngressController,把它布置在 Kubernetes 集群里即可,好在咱们能够运用MicroK8S ingress插件,启用该插件能够帮咱们一键布置nginx-ingress-controller相关运用来作为咱们的Ingress控制器

简略的命令如下

microk8s.enableingress

检查Ingress服务状况

我是如何快速部署上线一个ChatGPT小应用的

最后,咱们编写ingress.yaml

我是如何快速部署上线一个ChatGPT小应用的

将其布置到K8S中

我是如何快速部署上线一个ChatGPT小应用的

终究作用,翻开浏览器拜访URL

我是如何快速部署上线一个ChatGPT小应用的

写在最后

本文展示了怎样运用MicroK8S 快速地建立单机版K8S 并布置程序运用上线,若你有轻量级的小运用也能够运用此计划将其快速布置到本地进行测试等,后续咱们将结合Jenkins、harbor以及Flux等东西构建咱们的CICD布置流水线, 完成自动化运维等作业。

原文重视: 云原生SRE