前言:
现在大家对“flask部署到虚拟机服务器”大约比较关注,兄弟们都需要知道一些“flask部署到虚拟机服务器”的相关资讯。那么小编也在网络上汇集了一些关于“flask部署到虚拟机服务器””的相关文章,希望同学们能喜欢,同学们一起来学习一下吧!导言
大家好!本文适合有兴趣了解 Kubernetes 基础知识的读者。在本文中,我们将通过一个小项目(视频到 MP3 转换器)来了解 Kubernetes 的基础知识。我们将使用使用 python 语言构建的 flask micro web 框架。
该项目的主要组成部分包括
设置项目:
Kubernetes 是一种应用程序编排器。它能协调容器化的云原生微服务应用程序。
协调器是一种部署和管理应用程序的系统。它可以部署应用程序并动态响应变化。例如,Kubernetes 可以
- 部署应用程序
与许多现代云原生项目一样,它是用 Go 语言编写的,在 GitHub 上开放构建,在 IRC 频道上积极讨论,你可以在 Twitter(@kubernetesio)和 slack.k8s.io 上关注它。
作为集群的 Kubernetes
Kubernetes 集群由控制平面和工作节点组成。控制平面公开应用程序接口,有一个用于分配工作的调度程序,并在持久存储中记录集群和应用程序的状态。工作节点是用户应用运行的地方。
Kubernetes 喜欢声明式管理应用程序。在这种模式下,你可以在一组配置文件中描述你想要的东西,将它们发布到 Kubernetes,然后坐等 Kubernetes 实现这一切。我们将研究 yaml 文件,在其中声明微服务的状态。
控制平面:
Kubernetes 控制平面节点运行集群的控制平面服务。这些服务是集群的大脑,所有控制和调度决策都在这里做出。在幕后,这些服务包括 API 服务器、集群存储、调度器和核心控制器。
工作节点:
工作节点是运行用户应用程序的地方。它们主要做三件事:
1. 留意 API 服务器上的新工作任务
kubelet 是主要的 Kubernetes 代理,运行在每个工作节点上。当你将一个节点加入集群时,进程会安装 kubelet,然后负责将其注册到集群中。该进程会将节点的 CPU、内存和存储注册到更大的集群池中。
kubelet 需要一个容器运行时来执行与容器相关的任务,如调用映像、启动和停止容器等。
工作节点拼图的最后一块是 kube-proxy。它在每个节点上运行,负责本地集群联网。
为 Kubernetes 打包应用程序
要在 Kubernetes 集群上运行应用程序,需要满足几个条件。其中包括
1. 作为容器包装
pod
在 VMware 的世界里,调度的原子单元是虚拟机(VM)。在 Docker 的世界里,它是容器。嗯......在 Kubernetes 的世界里,它是 Pod。
Pod 圈定了主机操作系统的一个区域,构建了一个网络堆栈,创建了一堆内核命名空间,并运行一个或多个容器。如果在 Pod 中运行多个容器,它们将共享相同的 Pod 环境。这包括网络协议栈、卷、IPC 命名空间、共享内存等。
关于 Pod 的几个要点:
部署
你可以用自己选择的语言编写应用程序微服务。然后将其构建为容器映像并存储在注册表中。此时,它就被容器化了。
接下来,你需要定义一个 Kubernetes Pod 来运行容器化应用。在我们所处的高层次上,Pod 只是一个封装器,允许容器在 Kubernetes 集群上运行。
虽然可以像这样运行静态 Pod,但首选模式是通过更高级别的控制器部署所有 Pod。最常见的控制器是部署。它为无状态应用程序提供可扩展性、自愈和滚动更新。
服务
我们刚刚了解到,舱体是会死亡的。但是,如果通过更高级别的控制器对它们进行管理,它们就会在故障时被替换。但替换下来的 Pod 的 IP 地址完全不同。这种情况也会发生在推出和扩展操作中。诸如此类的事件会导致大量的 IP 流失。
这就是服务发挥作用的地方。它们为一组 Pod 提供可靠的网络连接。
当 Pod 来来去去时,服务会对此进行观察,自动更新,并继续提供稳定的网络端点。
现在,我们准备跳转到代码。如果你到现在还在关注,我假设你已经将 repo 克隆到本地,并按照 read me 文件中提到的步骤进行了操作。
了解项目中使用的组件
为了简单起见,我尽量保持所有应用程序 k8s 组件文件的格式一致。
apiVersion: apps/v1 -- API versionkind: Deployment -- type of componentmetadata: name: auth -- name of deployment labels: -- service labels must be the subset of deployment labels app: auth -- Labels can be used to organize and to select subsets of objects. spec: replicas: 1 -- number of pods which will be running at a time selector: matchLabels: app: auth strategy: type: RollingUpdate -- rollingUpdate: maxSurge: 3 template: metadata: labels: app: auth spec: containers: - name: auth -- container name image: nilay103/k8sauth -- image name ports: - containerPort: 5000 envFrom: - configMapRef: name: auth-configmap - secretRef: name: auth-secret
有关部署的详细信息,请点击此处。
kubectl apply -f filename -- To apply k8s config you can runkubectl get deployment -- to get all deployments running on a serverkubectl describe deployment deployment_name -- to get deployment description
服务通过标签和选择器与 Pod 实现松散耦合。服务要向 Pod 发送流量,Pod 需要服务选择的每个标签。Pod 还可以拥有服务不需要的其他标签。Pod 可以有额外的标签,但服务标签必须是 Pod 标签的子集。
apiVersion: v1 -- API versionkind: Service -- type of componentmetadata: name: auth -- name of service spec: selector: app: auth -- label selector to identify pods type: ClusterIP -- type of service. Details can be found -> ports: -- port bindings - port: 5000 targetPort: 5000 protocol: TCP
有关服务的详细信息,请点击此处。
kubectl apply -f filename -- To apply k8s config you can runkubectl get services -- to get all deployments running on a serverkubectl describe svc service_name -- to get deployment description
总之,PV 和 PVC 可用作存储。最常见的用例是为数据库定义存储(如 docker 中的卷)
apiVersion: v1 -- API versionkind: PersistentVolume -- type of componentmetadata: name: mysql-pvvolume -- name of component labels: -- labels type: local spec: storageClassName: manual -- type of storage class capacity: storage: 2Gi accessModes: -- access mode, it can be readonly or write only or read write etc. - ReadWriteOnce hostPath: path: "/mnt/data"--- apiVersion: v1 -- API version kind: PersistentVolumeClaim -- type of component metadata: name: mysql-pvclaim -- name of component spec: storageClassName: manual accessModes: - ReadWriteOnce -- access mode resources: requests: storage: 2Gi
apiVersion: v1 -- API versionkind: Secret -- type of componentmetadata: name: mysql-secret -- component name stringData: -- config data (key, value) MYSQL_PASSWORD: root type: Opaque --- apiVersion: v1 -- API version kind: ConfigMap -- type of component metadata: name: celery-configmap -- component name data: -- config data (key, value) AUTH_SVC_ADDRESS: auth:5000 NOTIFICATION_SVC_ADDRESS: ns:5055 MONGO_HOST: mongodb REDIS_HOST: redis
恭喜你取得了这么好的成绩。如果你已经按照上述步骤进行了操作,那么你应该可以在本地机器上运行该项目了。你可以随意修改源代码、将更新的镜像推送到 docker 文件,并更改相关部署文件中的容器镜像部分。
标签: #flask部署到虚拟机服务器