【云原生】项目上云最佳实践

本文涉及的产品
云解析 DNS,旗舰版 1个月
函数计算FC,每月15万CU 3个月
全局流量管理 GTM,标准版 1个月
简介: 项目上云最佳实践

 

博主昵称:跳楼梯企鹅

创作初心:本博客的初心为与技术朋友们相互交流,每个人的技术都存在短板,博主也是一样,虚心求教,希望各位技术友给予指导。
博主座右铭:发现光,追随光,成为光,散发光;
博主研究方向:渗透测试、机器学习 ;
博主寄语:感谢各位技术友的支持,您的支持就是我前进的动力 ;
图片.png 一、浅谈云计算

1.概念

云计算(cloud computing)是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。云计算早期,简单地说,就是简单的分布式计算,解决任务分发,并进行计算结果的合并。因而,云计算又称为网格计算。通过这项技术,可以在很短的时间内(几秒钟)完成对数以万计的数据的处理,从而达到强大的网络服务。

2.为什么要用云计算

(1)云计算提高了速度和敏捷性

如果今天的商业环境有一个基本的事实,那就是它正在以不断加快的速度发展。

每个企业都面临着压力,必须对不断变化的商业环境作出更快的反应。不幸的是,传统的IT流程与今天的速度并不匹配。配置资源通常需要数周或数月时间,因此减慢了业务的反应速度。有了云计算,资源可以在几分钟内获得,这意味着企业可以更快地对新市场的发展做出反应。

(2)实现可持续创新

然而,在今天的商业环境中,成功需要的不仅仅是速度。同样重要的是创新——即开发新产品、评估其潜在市场认可度,然后推出成功产品、淘汰失败产品的能力。

在这方面,云计算也比传统的IT基础设施方法更适合。因为资源的可用性非常快,所以很容易很快地体验新产品。公司可以立即获得用户反馈,而不是等上几个月才让产品进入市场试验。

(3)有助于管理成本

传统IT基础设施的另一个现实是,它的价格非常昂贵。显然,基础设施需要物理资源:服务器、存储和网络。但除此之外,运营这些资源还需要大量的开支:人员、设施和电力。

而且大多数IT组织在基础设施方面效率不高。采购很少,而且数量很少,因此资源成本很高。操作过程通常不是自动化的,所以人工成本也很高。

相比之下,大型云服务提供商则是批量购买。而且因为他们的经营规模非常之大,所以必须投资于过程自动化。并且,他们不可能雇佣或负担得起足够的员工来手动管理他们庞大的服务器群。

(4)支持应用程序弹性

应用程序正常运行时间一直很重要。但如今,可用性比以往任何时候都重要。这是因为越来越多的公司正在成为数字化企业,他们的客户和供应商通过基于IT的机制进行互动和参与。

向数字化的转变使应用程序的弹性变得至关重要。简单地说,应用程序需要保持可用性,即使面临基础设施故障。

大多数内置应用程序表现出较差的弹性。由于设备非常昂贵,大多数应用程序负担不起冗余,因此它们包含SPOFs(单点故障)。当基础设施出现故障时,应用程序会停止运行,直到进行修复为止。

云计算极大地改变了弹性方程。首先,很容易获得额外的基础设施资源。因此,如果出现故障,在新的资源上重启应用程序是很简单的。

但应用程序的弹性不仅仅是快速获得替换包。因为资源是随时可用的,而且组织只为他们使用的东西付费,所以避免SPOF应用程序设计和使用冗余资源是划算的。如果出现故障,应用程序将继续对仍在工作的资源进行操作,从而允许操作将问题作为后台任务处理。

参考资料链接

3.云计算服务

云部署模型

云环境主要分为三种类型,也称为云部署模型。企业可以选择在公共云、私有云或混合云上运行应用程序,具体取决于他们的要求。

公共云

公共云环境由外包云提供商所有,许多企业可以通过互联网以按使用付费的模式访问。这种部署模型为希望节省 IT 运营成本的企业提供服务和基础设施,但负责创建和维护资源的是云提供商。

image.gif图片.png

私有云

这种云部署模型是由单个企业拥有的定制基础架构。它提供了一个更加可控的环境,在该环境中,对 IT 资源的访问更加集中在企业内部。该模型可以在外部托管,也可以在内部进行管理。尽管私有云托管可能很昂贵,但对于大型企业来说,它可以提供更高级别的安全性和更多自主权来定制存储、网络和计算组件以满足其 IT 需求。

图片.png


图片.png

混合云

对于寻求私有云和公共云部署模型的好处的企业来说,混合云环境是一个不错的选择。通过结合这两种模型,混合云模型提供了更量身定制的 IT 解决方案,可以满足特定的业务需求。

图片.png

图片.png

二、云计算基础服务

云计算的三种主要服务模式——基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)。

(1)基础设施即服务(IaaS)

这是最常见的云计算服务模型,因为它提供了虚拟服务器、网络、操作系统和数据存储驱动器的基础架构。它实现了许多企业通过云寻求的灵活性、可靠性和可扩展性,并消除了办公室对硬件的需求。这使其成为寻求经济高效的 IT 解决方案以支持业务增长的中小型组织的理想选择。IaaS 是一项完全外包的按使用付费服务,可作为公共、私有或混合基础设施使用。

图片.png

(2)平台即服务(PaaS)

这是云计算提供商部署基础设施和软件框架的地方,但企业可以开发和运行自己的应用程序。可以通过 PaaS 快速轻松地创建 Web 应用程序,并且该服务足够灵活和强大以支持它们。PaaS 解决方案具有可扩展性,非常适合多个开发人员在单个项目上工作的业务环境。对于需要利用现有数据源(例如 CRM 工具)的情况,它也很方便。

image.gif图片.png

(3)软件即服务(SaaS)

这种云计算解决方案涉及通过互联网向通过订阅或按使用付费模式付费的各种企业部署软件。对于 CRM 和需要大量 Web 或移动访问的应用程序(例如移动销售管理软件)来说,它是一个有价值的工具。SaaS 从一个中心位置进行管理,因此企业不必担心自己维护它,是短期项目的理想选择。

image.gif图片.png

三、云计算分层架构应用

image.gif图片.png

1、应用层

应用层是以友好的用户界面为用户提供所需的各项应用软件和服务,应用层直接面向客户需求,向企业客户提供CRM、ERP、OA等企业应用。

2、中间层

中间层是承上启下的一层,它在基础设施层所提供资源的基础上为用户提供服务,包括了访问控制、资源管理、数据库和中间件等集群,同时可通过集成API为客户提供定制开发接口。

3、基础设施层

基础设施层是为中间层或者用户提供其所需的计算和存储等资源,并通过虚拟化等技术奖资源池化,以实现资源的按需分配和快速部署。

四、云原生架构----Docker

1.Docker框架

Docker是客户端-服务器架构的应用,主要由以下部分组成:

    • 服务端是一个名为dockerd守护进程,用来监听REST API请求并管理Docker对象,比如镜像、容器、存储卷及网络等。
      • 命令行客户端(CLI),也就是我们平常在控制台输入的docker命令行,通过调用REST API进行控制Docker daemon或者同其进行集成。
        • 镜像仓库(Docker Registries),镜像仓库用来存储Docker镜像。

        图片.png

        2.Docker对象

          • IMAGES

          镜像一般是通过指令创建的只读文件,用来生成容器。一般一个镜像是基于另外一个镜像并添加一些额外的指令创建的,可以通过一个名为Dockerfile的文件来生成一个镜像,在Dockerfile中的每一行指令会生成一层(layer)。当Dockerfile有改动需要重新生成镜像时,只需要重新生成改变的那些层就可以,这样就可以使得镜像文件更加轻量、快速构建。

            • CONTAINERS

            容器是通过镜像文件生成的运行实例。可以通过REST API或者docker client进行创建、启动、停止、移动或者删除一个容器。

              • SERVICE

              用来管理和扩展多个容器,需要同docker swarm一起工作

              3.Docker的安装部署

              (1)配置初始化

              # cat /etc/sysconfig/network-scripts/ifcfg-ens33
              TYPE=Ethernet
              BOOTPROTO=static
              NAME=ens33
              DEVICE=ens33
              ONBOOT=yes
              IPADDR=192.168.xxx.xxx
              NETMASK=255.255.255.0
              GATEWAY=192.168.xxx.xxx

              image.gif

              (2)配置DNS

              [root@localhost yum.repos.d]# vim /etc/resolv.confnameserver 192.168.xxx.xxx

              image.gif

              (3)配置主机

              # hostnamectl --static set-hostname docker-90

              image.gif

              (4)挂载

              [root@localhost ~]# mkdir /iso
              [root@localhost ~]# mount /dev/sr0 /iso
              [root@localhost ~]# chmod +x /etc/rc.d/rc.local
              [root@localhost ~]# vi /etc/rc.d/rc.local
              ##挂载
              mount /dev/sr0 /iso

              image.gif

              (5)镜像源配置

              [root@localhost ~]# cd /etc/yum.repos.d/
              [root@localhost yum.repos.d]# rm -rf *.repo
              [root@localhost yum.repos.d]# vi base.repo
              vi内部内容如下:
              [root@localhost yum.repos.d]# cat base.repo
              [base]
              name=base
              baseurl=file:///iso
              enabled=1
              gpgcheck=0
              继续输入命令
              [root@localhost yum.repos.d]# yum clean all
              [root@localhost yum.repos.d]# yum makecache

              image.gif

              (6)设置环境

              [root@localhost yum.repos.d]# iptables -F
              [root@localhost yum.repos.d]# iptables -t nat -F
              [root@localhost yum.repos.d]# systemctl stop firewalld
              [root@localhost yum.repos.d]# systemctl disable firewalld
              [root@localhost yum.repos.d]# systemctl stop NetworkManager
              [root@localhost yum.repos.d]# systemctl disable NetworkManager
              [root@localhost yum.repos.d]# systemctl stop postfix
              [root@localhost yum.repos.d]# systemctl disable postfix

              image.gif

              (7)修改内核

              [root@localhost yum.repos.d]# vim /boot/grub2/grub.cfg
              将 第 100 行的
              rhgb quiet 去掉,改为 vga=817
              修改目录路径
              [root@localhost yum.repos.d]# vim /etc/bashrc
              #第41行,修改
              ...... && PS1="[\u@\h \w]\\$ ,将 \W 改为 \w

              image.gif

              (8)导入key

              [root@docker ~]#rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

              image.gif

              (9)安装yum源

              [root@docker ~]#rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
              [root@docker ~]#yum clean all
              [root@docker ~]#yum makecache fast

              image.gif

              (10)部署docker-ce

              清理环境
              [root@Docker1 ~]#systemctl stop docker
              [root@Docker1 ~]#yum remove docker-ce docker-ce-cli docker-selinux
              配置网络
              root@Docker1 ~]#cd /etc/yum.repos.d/
              [root@Docker1 /etc/yum.repos.d]#mv elrepo.repo elrepo.repo.bak
              [root@Docker1 /etc/yum.repos.d]#vim aliyun.repo
              ###输入以下内容
              [base]
              name=base
              baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/
              enabled=1
              gpgcheck=0
              [extras]
              name=extras
              baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/
              enabled=1
              gpgcheck=0
              [aliyun-os]
              name=aliyun-os
              baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/
              enabled=1
              gpgcheck=0
              [aliyun-epel]
              name=aliyun-epel
              baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
              enabled=1
              gpgcheck=0
              [aliyun-extra]
              name=aliyun-extra
              baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/
              enabled=1
              gpgcheck=0
              安装最新版本docker-ce
              [root@Docker1 /etc/yum.repos.d]# yum install docker-ce docker-ce-cli containerd.io

              image.gif

              (11)测试docker 工具

              [root@Docker1 /etc/yum.repos.d]# docker -v
              Docker version 20.10.6, build 370c289
              查看docker详情
              #docker info

              image.gif

              (12)配置加速器

              https://cr.console.aliyun.com/cn-guangzhou/instances/mirrors
              [root@Docker1 /etc/docker]# vim /etc/docker/daemon.json
              ## 输入以下内容
              {
              "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"] ##这里修改为自己的阿里云加速器地址
              }
              [root@Docker1 /etc/docker]# systemctl daemon-reload
              [root@Docker1 /etc/docker]# systemctl restart docker

              image.gif

              (13)启动

              [root@Docker1 /etc/yum.repos.d]# systemctl start docker
              docker开机自启动:# systemctl enable docker
              [root@Docker1 /etc/yum.repos.d]# systemctl status docker

              image.gif

              五、云原生架构----Kubernetes

              image.gif图片.png

              1.Kubernetes系统架构解析

                • K8S是谷歌开源的容器集群管理系统;他构建在容器之上,为容器化的应用提供资源调度,部署运行,服务发现,扩容缩容等一整套功能。
                • 将容器宿主机组成集群,统一进行资源调度,自动管理容器生命周期,提供跨节点服务发现和负载均衡;更好的支持服务概念、划分、细分服务之间的边界,比如label,pod等概念的引入
                • 轻量,迁移方便,部署快捷,插件化,可扩展

                image.gif图片.png

                2.controller控制器原理解析

                Controller Manager主要提供了一个分发事件的能力,而不同的Controller只需要注册对应的Handler来等待接受和处理事件。

                在Controller Manager的帮助下, Controller的逻辑可以做的非常纯粹,只需要实现相应的EventHandler即可,以Deployment controller为例。

                  • List是短连接实现,用于获取该资源的所有Object
                  • Watch是长连接实现,用于监听在List中获取的资源的变换
                  • api-server检测到资源产生变更时,会主动通知到Controller manager(利用分块传输编码

                  图片.png

                  3.list-watch机制解析

                  Kubernetes 是通过 List-Watch 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。
                  用户是通过 kubectl 根据配置文件,向 APIServer 发送命令,在 Node 节点上面建立 Pod 和 Container。
                  APIServer 经过 API 调用,权限控制,调用资源和存储资源的过程,实际上还没有真正开始部署应用。这里需要 Controller Manager、Scheduler 和 kubelet 的协助才能完成整个部署过程。
                  在 Kubernetes 中,所有部署的信息都会写到 etcd 中保存。实际上 etcd 在存储部署信息的时候,会发送 Create 事件给 APIServer,而 APIServer 会通过监听(Watch)etcd 发过来的事件。其他组件也会监听(Watch)APIServer 发出来的事件。

                  图片.png

                  六、无服务应用架构设计

                  1.优点

                  无服务器架构的优点之一是企业机构不用管理运行应用的后端基础设施。例如开发人员不必担心容量规划问题,因为有人会为他们解决。云服务提供商提供自动化的无服务器架构,这种架构可以在必要时提供更多的资源或缩小规模,这就又为开发人员减少了一项待办任务。开发人员不必负责维护后端基础设施,包括配置和扩展等,可以将更多的时间用于其他更有意义的项目。

                  这种弹性为企业机构解决了容量规划等掌管服务器时所需要担心的问题。而且企业不负责后端基础设施,因此也不需要在服务器崩溃或出错时进行修复。云服务提供商所提供的自动扩展和调试功能,帮助无服务器架构成为一个值得投资的项目。

                  无服务器架构的另一个优点是成本,可能是一个物有所值的选择。节省团队的时间就是节省资金,团队花在后端基础设施维护上的时间越少,企业减少的成本就越多。此外,使用无服务器架构的企业不需要一个完整的团队来管理服务器,因此开发人员不必是服务器专家,这使企业机构的招聘条件变得更加宽松。

                  2.缺点

                  企业也应该考虑这种架构的一些缺点。

                  由于无服务器架构的性质,在上面运行的应用无法被监控。服务器不属于自己,企业机构无法完整地看到上面所运行的一切,也就更加难以衡量一个应用的性能。同时,他们也无法轻易看到性能问题的发展趋势,或主动预防问题。比方说,因为不负责后端,企业机构无法深入研究调查日志。对于企业机构来说,转移这项责任在某些方面可能是件好事,但不好的方面是他们无法看到关键性能分析,也无法了解服务器上的情况究竟如何。

                  无服务器架构的另一个潜在缺点是安全问题。由于受攻击面大于企业通常使用的内部服务器,无服务器应用可能会面临更大的安全风险。同样,这也取决于云服务提供商和第三方服务所采取的措施与企业安全能力的比较结果。如果企业机构认为自己的服务器安全性不如AWS Lambda,那么与云供应商合作更加明智。

                  资源限制也可能是无服务器架构的缺点之一。虽然无服务器架构具有弹性,可以通过加速和减速来为应用分配资源,但它是有限制的。如果一家企业机构的应用大到超过这些限制,那么可能就不适合使用无服务器架构。

                  某些应用在设计上不适合成为无服务器应用,所以无服务器架构并非适合每一个用例。如果根据应用所使用的资源来定价,有些应用会不断消耗所获得的计算资源,使无服务器架构的成本激增。此类应用会占用越来越多的资源,而企业机构必须为此买单。

                  相关实践学习
                  通过Ingress进行灰度发布
                  本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
                  容器应用与集群管理
                  欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
                  相关文章
                  |
                  29天前
                  |
                  Kubernetes Cloud Native Ubuntu
                  庆祝 .NET 9 正式版发布与 Dapr 从 CNCF 毕业:构建高效云原生应用的最佳实践
                  2024年11月13日,.NET 9 正式版发布,Dapr 从 CNCF 毕业,标志着云原生技术的成熟。本文介绍如何使用 .NET 9 Aspire、Dapr 1.14.4、Kubernetes 1.31.0/Containerd 1.7.14、Ubuntu Server 24.04 LTS 和 Podman 5.3.0-rc3 构建高效、可靠的云原生应用。涵盖环境准备、应用开发、Dapr 集成、容器化和 Kubernetes 部署等内容。
                  46 5
                  |
                  2月前
                  |
                  人工智能 Cloud Native 安全
                  从云原生到 AI 原生,网关的发展趋势和最佳实践
                  本文整理自阿里云智能集团资深技术专家,云原生产品线中间件负责人谢吉宝(唐三)在云栖大会的精彩分享。讲师深入浅出的分享了软件架构演进过程中,网关所扮演的各类角色,AI 应用的流量新特征对软件架构和网关所提出的新诉求,以及基于阿里自身实践所带来的开源贡献和商业能力。
                  220 15
                  |
                  2月前
                  |
                  监控 Cloud Native 持续交付
                  云原生架构下微服务的最佳实践与挑战####
                  【10月更文挑战第20天】 本文深入探讨了云原生架构在现代软件开发中的应用,特别是针对微服务设计模式的最优实践与面临的主要挑战。通过分析容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,阐述了如何高效构建、部署及运维微服务系统。同时,文章也指出了在云原生转型过程中常见的难题,如服务间的复杂通信、安全性问题以及监控与可观测性的实现,为开发者和企业提供了宝贵的策略指导和解决方案建议。 ####
                  47 5
                  |
                  1月前
                  |
                  Kubernetes Cloud Native 持续交付
                  云原生架构下的微服务设计原则与最佳实践##
                  在数字化转型的浪潮中,云原生技术以其高效、灵活和可扩展的特性成为企业IT架构转型的首选。本文深入探讨了云原生架构的核心理念,聚焦于微服务设计的关键原则与实施策略,旨在为开发者提供一套系统性的方法论,以应对复杂多变的业务需求和技术挑战。通过分析真实案例,揭示了如何有效利用容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,构建高性能、易维护的云原生应用。文章还强调了文化与组织变革在云原生转型过程中的重要性,为企业顺利过渡到云原生时代提供了宝贵的见解。 ##
                  |
                  2月前
                  |
                  存储 运维 监控
                  云原生应用的可观察性:理解、实现与最佳实践
                  【10月更文挑战第10天】随着云原生技术的发展,可观察性成为确保应用性能和稳定性的重要因素。本文探讨了云原生应用可观察性的概念、实现方法及最佳实践,包括监控、日志记录和分布式追踪的核心组件,以及如何通过选择合适的工具和策略来提升应用的可观察性。
                  |
                  3月前
                  |
                  Cloud Native 关系型数据库 Serverless
                  基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践
                  本文带大家了解一下如何使用阿里云Serverless计算产品函数计算构建生产级别的LLM Chat应用。该最佳实践会指导大家基于开源WebChat组件LobeChat和阿里云函数计算(FC)构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。
                  576 24
                  |
                  2月前
                  |
                  Cloud Native API C#
                  .NET云原生应用实践(一):从搭建项目框架结构开始
                  .NET云原生应用实践(一):从搭建项目框架结构开始
                  |
                  7月前
                  |
                  运维 Kubernetes Cloud Native
                  构建高效云原生运维体系:Kubernetes最佳实践
                  【5月更文挑战第9天】 在动态和快速演变的云计算环境中,高效的运维是确保应用稳定性与性能的关键。本文将深入探讨在Kubernetes环境下,如何通过一系列最佳实践来构建一个高效且响应灵敏的云原生运维体系。文章不仅涵盖了容器化技术的选择与优化、自动化部署、持续集成/持续交付(CI/CD)流程的整合,还讨论了监控、日志管理以及灾难恢复策略的重要性。这些实践旨在帮助运维团队有效应对微服务架构下的复杂性,确保系统可靠性及业务的连续性。
                  |
                  5月前
                  |
                  存储 Kubernetes Cloud Native
                  云原生周刊:Score 成为 CNCF 沙箱项目
                  以下是内容的摘要,格式为Markdown: 开源项目: - [Trident]:NetApp维护的开源存储解决方案,支持容器化应用的持久化存储,兼容CSI接口。 - [Monokle]:Kubernetes YAML编辑器,简化配置创建、分析和部署。 - [Platform Aware Scheduling]:模块化策略驱动的Kubernetes调度器扩展,考虑平台特性。 - [cdebug]):容器和Pod故障排查工具,提供端口转发、文件系统导出等功能。
                  |
                  7月前
                  |
                  Kubernetes Cloud Native Devops
                  【阿里云云原生专栏】DevOps与云原生的融合:阿里云CI/CD流水线最佳实践
                  【5月更文挑战第23天】阿里云融合DevOps与云原生技术,提供高效CI/CD解决方案,助力企业提升研发效能。通过云效平台,集成代码管理、构建服务、容器服务、持续部署及监控日志组件,实现自动化研发流程。案例中,应用从GitHub构建到Kubernetes部署,全程无缝衔接。借助阿里云,企业能快速构建适应云原生的DevOps体系,以应对复杂需求和提升市场竞争力。
                  200 1