【云原生番外篇】到底什么是云原生,它的意义在于什么

一、什么是云原生

        大家好,通过前几章节的学习云原生的基础我们已经简单了解,借此机会和一些还未明白什么是云原生的小伙伴们探讨一下“什么是云原生”。云原生是一种构建和运行应用程序的方法,它基于容器、微服务和自动化运维等技术体系,旨在提高应用程序的高效性、可靠性和可扩展性,使其能够适用于各种不同的云平台。

        从更广泛的角度来看,云原生不仅仅是一种技术方法,更是一种文化和潮流,代表着云计算时代的必然导向。云原生的出现,使得云能够成为云化战略成功的基石,而非障碍。它充分利用云计算的优势,整合了之前的云三层(IaaS、PaaS、SaaS),使得应用落地更加灵活高效。

        云原生的意义在于,它改变了应用程序的构建和运行方式,使应用能够更好地适应云环境,并充分利用云的资源。具体来说,云原生具有以下显著特点:

  1. 微服务:云原生应用采用微服务架构,使得服务内聚更强、更加敏捷。每个微服务都是一个独立的单元,可以独立部署、更新和扩展,从而提高了系统的灵活性和可维护性。
  2. 容器化:容器化技术为微服务提供了实施保障,通过轻量级的虚拟化技术,使得每个服务都能被无差别的封装到容器中,从而实现了应用隔离和资源的灵活调度。
  3. DevOps:云原生强调开发和运维的紧密合作,实现了运维合一。这种协作方式使得团队能够更快速地响应需求变化,提高开发效率,同时确保系统的稳定性和安全性。
  4. 持续交付:云原生应用通过持续交付的方式,不断将新功能发布给用户,从而提高了用户体验和满意度。同时,持续交付也有助于团队及时发现问题并进行修复,确保系统的持续稳定运行。

总的来说,云原生代表了未来应用程序开发和运行的趋势和方向。它不仅能够提高应用程序的性能和可靠性,还能够降低运维成本和提高开发效率。因此,对于希望充分利用云计算优势的企业和组织来说,掌握云原生技术将具有重要意义。

二、云原生目前发展

        坦白了,一句话讲如果你一点云原生的知识都不知道,你的大厂面试机会将非常渺茫。上大学时,老师和我们说“云原生、SpringCloud都不知道,毕业肯定找不到工作”。如今看来,云原生确实是发展之道。目前,国内外众多企业都在积极采用云原生技术。在国内,主要的综合服务商如阿里、腾讯、华为等大厂都拥有完整的云原生“家族产品”,并在实际业务中广泛应用。这些大厂通过提供丰富的云原生产品和服务,帮助企业实现业务的快速部署、弹性伸缩和高效管理。

        在海外,微软、谷歌、亚马逊等科技巨头也较早开始云原生的研究,并在全球范围内为众多企业提供云原生解决方案。这些公司凭借其在云计算领域的深厚积累和技术优势,推动了云原生技术的快速发展和普及。

        除此之外,还有一些专注于云原生平台的创新厂商,如时速云、灵雀云、博云、道客云、精灵云、安捷澜澈等。这些厂商注重技术自主研发,侧重云原生产品和服务的差异化和本地化服务,以满足不同企业的个性化需求。

DevOps代表性技术

容器化技术:Docker

        Docker是一种开源的容器化平台,它允许开发人员将应用程序及其依赖项打包成一个独立的容器。通过使用Docker,团队可以确保应用程序在不同环境中具有一致的运行表现,减少“在我的机器上可以运行”这类问题的发生。Docker还提供了强大的镜像管理和版本控制功能,使得应用程序的部署和回滚变得简单快捷。

        使用Dockerfile创建一个简单的Docker镜像:

# 使用官方Python运行时作为父镜像  
FROM python:3.8  
  
# 设置工作目录为/app  
WORKDIR /app  
  
# 将当前目录内容复制到容器的/app内  
COPY . /app  
  
# 安装任何需要的包  
RUN pip install --no-cache-dir -r requirements.txt  
  
# 对外暴露的端口号  
EXPOSE 8000  
  
# 定义环境变量  
ENV NAME World  
  
# 当容器启动时运行python app.py  
CMD ["python", "app.py"]

假设app.py是一个简单的Python Flask应用程序:

# app.py  
from flask import Flask  
app = Flask(__name__)  
  
@app.route('/')  
def hello():  
    return 'Hello, %s!' % os.environ.get('NAME', 'stranger')  
  
if __name__ == '__main__':  
    app.run(host='0.0.0.0', port=8000)

构建和运行Docker容器的命令:

docker build -t my-python-app .  
docker run -p 4000:8000 my-python-app

配置管理工具:Ansible

Ansible是一个开源的自动化平台,它允许开发人员使用简单的YAML语法编写自动化脚本,以实现对系统、网络和应用程序的配置管理。Ansible具有强大的模块库,可以覆盖大多数常见的IT任务,如安装软件包、配置网络设置、启动服务等。通过Ansible,团队可以快速地部署和更新系统配置,减少手动操作带来的错误和延时。

持续交付代表性技术

CI/CD工具:Jenkins

        Jenkins是一个开源的自动化服务器,它支持持续集成和持续交付。通过Jenkins,团队可以自动化构建、测试和部署应用程序的过程。Jenkins具有丰富的插件生态系统,可以与各种版本控制系统、构建工具和测试框架集成,实现端到端的自动化流程。此外,Jenkins还提供了强大的管道功能,允许团队定义复杂的构建和部署流程。

 

使用Jenkinsfile定义一个简单的持续集成/持续交付管道:

pipeline {  
    agent any  
  
    stages {  
        stage('Checkout') {  
            steps {  
                git('https://github.com/user/my-repo.git')  
            }  
        }  
        stage('Build') {  
            steps {  
                // 假设有一个构建脚本build.sh  
                sh './build.sh'  
            }  
        }  
        stage('Test') {  
            steps {  
                // 假设有一个测试脚本test.sh  
                sh './test.sh'  
            }  
        }  
        stage('Deploy') {  
            when {  
                branch 'master'  
            }  
            steps {  
                // 假设有一个部署脚本deploy.sh  
                sh './deploy.sh'  
            }  
        }  
    }  
}

监控与日志管理技术:Prometheus + Grafana

        Prometheus是一个开源的系统监控和告警工具,它可以收集各种系统的运行指标,并提供查询和告警功能。Grafana则是一个开源的数据可视化平台,它可以与Prometheus集成,将收集到的数据进行可视化展示。通过这两个工具的结合使用,团队可以实时地监控应用程序的性能和健康状况,及时发现和解决潜在问题。此部分不做过多介绍,详细步骤可看我的第一篇文章。

微服务代表性技术

服务框架:Spring Cloud

        Spring Cloud是一个基于Spring Boot的微服务框架,它提供了一系列的服务治理和微服务开发所需的组件,如服务发现、配置管理、负载均衡、熔断器等。通过使用Spring Cloud,团队可以快速地构建和管理微服务应用,提高系统的可伸缩性和可维护性。

使用Spring Cloud Eureka作为服务发现:

Eureka Server配置 (application.yml):

server:  
  port: 8761  
  
eureka:  
  instance:  
    hostname: localhost  
  client:  
    registerWithEureka: false  
    fetchRegistry: false  
    serviceUrl:  
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

Eureka Client配置 (application.yml):

spring:  
  application:  
    name: my-microservice  
  
eureka:  
  client:  
    serviceUrl:  
      defaultZone: http://localhost:8761/eureka/

 在Spring Boot应用程序中启用Eureka客户端发现:

import org.springframework.cloud.netflix.eureka.EnableEurekaClient;  
import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  
  
@SpringBootApplication  
@EnableEurekaClient  
public class MyMicroserviceApplication {  
  
    public static void main(String[] args) {  
        SpringApplication.run(MyMicroserviceApplication.class, args);  
    }  
}

API网关:Kong

        Kong是一个开源的API网关,它提供了API路由、认证、限流、监控等功能。通过Kong,团队可以统一地管理微服务之间的通信,实现API的安全访问和流量控制。此外,Kong还支持插件机制,可以根据需求扩展新的功能。

容器代表性技术

容器编排工具:Kubernetes(K8s)

        Kubernetes是一个开源的容器编排平台,它可以自动化管理大量的容器化应用程序。Kubernetes提供了强大的容器编排和调度功能,可以根据需求自动扩展或缩减容器的数量。此外,Kubernetes还支持滚动更新、自动恢复等功能,确保应用程序的高可用性和稳定性。

定义一个简单的Kubernetes部署(Deployment)文件:

apiVersion: apps/v1  
kind: Deployment  
metadata:  
  name: my-app-deployment  
spec:  
  replicas: 3  
  selector:  
    matchLabels:  
      app: my-app  
  template:  
    metadata:  
      labels:  
        app: my-app  
    spec:  
      containers:  
      - name: my-app-container  
        image: my-app-image  
        ports:  
        - containerPort: 8080

创建一个服务(Service)以暴露Pod:

apiVersion: v1  
kind: Service  
metadata:  
  name: my-app-service  
spec:  
  selector:  
    app: my-app  
  ports:  
    - protocol: TCP  
      port: 80  
      targetPort: 80

容器仓库:Harbor

        Harbor是一个开源的容器镜像仓库,它提供了镜像的存储、管理、安全等功能。通过Harbor,团队可以方便地共享和管理容器镜像,确保镜像的安全性和一致性。此外,Harbor还支持多租户、访问控制等功能,满足团队之间的协作需求。

感兴趣的小伙伴可以关注我的公众号:JTY的打工日记,会不定时在里面更新文章。

  • 41
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来之星姜大帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值