目录
2、SRE(Site Reliability Engineering)
前言
随着云计算和容器化技术的快速发展,企业对于构建、部署和管理应用程序的需求变得日益复杂而迫切。传统的部署方式已经无法满足快速变化和高效管理的需求,因此容器编排平台的出现成为解决这一难题的关键
Kubernetes作为当今最受欢迎和成熟的容器编排平台之一,扮演着重要角色。它不仅提供了强大的自动化部署、扩展和管理功能,还为应用程序的高可用性和弹性伸缩提供了解决方案。Kubernetes的开源性和活跃的社区支持使其成为众多企业和开发者的首选
在本文中,我们将深入探讨Kubernetes的概念、架构以及工作原理,帮助读者全面了解这一先进的容器编排平台。通过学习Kubernetes,您将能够更好地理解和应用容器化技术,提高应用程序的部署效率和可靠性,从而在竞争激烈的市场中保持竞争优势
一、云原生知识
1、云原生要素
云原生计算是一种基于云架构设计和云服务模式的应用程序开发方法。它旨在利用云计算的优势,如弹性、灵活性和自动化,来构建、部署和管理现代化的应用程序
-
微服务:
- 概念:微服务是一种软件架构风格,其中应用程序被拆分为一组小型、独立部署的服务,每个服务都专注于执行特定的业务功能。这些服务可以独立开发、部署和扩展,从而提高灵活性和可维护性。
- 优势:微服务架构使团队能够更快地开发和部署新功能,降低系统耦合度,提高可伸缩性和可靠性,并更好地适应快速变化的业务需求。
-
DevOps(开发运维):
- 概念:DevOps是一种软件开发和运维方法论,旨在通过自动化和协作来缩短软件开发周期、提高交付速度和质量。
- 优势:DevOps促进开发团队和运维团队之间的紧密协作,通过自动化工具和流程来加速软件交付,减少错误和提高系统稳定性。
-
持续交付:
- 概念:持续交付是一种软件开发实践,旨在通过自动化构建、测试和部署过程,实现快速、可靠地交付软件。
- 优势:持续交付使团队能够频繁地发布软件更新,降低发布风险,快速响应用户反馈,并持续改进产品质量。
-
容器化:
- 概念:容器化是一种虚拟化技术,将应用程序及其所有依赖项打包到一个标准化的容器中,以确保应用程序在不同环境中具有一致的运行方式。
- 优势:容器化提供了轻量级、可移植和可扩展的部署方式,使开发人员能够更快速地构建、测试和部署应用程序,同时确保环境的一致性。
这些要素共同构成了云原生的核心理念,帮助组织构建现代化、高效的软件开发和部署流程,以适应快速变化和竞争激烈的市场环境。通过采用云原生方法,组织能够更好地应对挑战,提高创新能力,并实现持续增长
2、SRE(Site Reliability Engineering)
-
运维自动化:
- 概念:运维自动化是通过自动化工具和流程来管理和维护系统,以减少人为错误、提高效率和确保系统稳定性。
- 作用:运维自动化可以帮助SRE团队快速部署、配置和监控系统,实现快速响应和故障恢复。
-
Kubernetes(k8s)编排集群:
- 概念:Kubernetes是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。
- 作用:SRE团队可以利用Kubernetes来管理大规模的容器化应用程序,实现高可用性、弹性和自动化运维。
-
日志系统:
- 概念:日志系统用于收集、存储和分析系统产生的日志数据,以监控系统运行状况、排查问题和进行性能优化。
- 作用:SRE团队依靠日志系统来追踪系统事件、故障原因和性能指标,帮助快速定位和解决问题。
-
微服务:
- 概念:微服务是一种软件架构风格,将应用程序拆分为一组小型、独立部署的服务,每个服务都专注于特定功能。
- 作用:SRE团队需要管理和监控多个微服务,确保它们之间的通信、可用性和性能。
-
消息队列:
- 概念:消息队列是一种用于异步通信的机制,用于在不同组件或服务之间传递消息。
- 作用:SRE团队可以利用消息队列来实现服务解耦、流量控制和故障恢复,提高系统的弹性和可靠性。
-
多云管理:
- 概念:多云管理涉及在多个云平台上管理和部署应用程序,以实现资源优化、灾备容灾和业务扩展。
- 作用:SRE团队需要了解不同云平台的特性和限制,制定跨云管理策略,并确保应用程序在多云环境下稳定运行。
-
云计算开发:
- 概念:云计算开发涉及开发、部署和管理基于云计算基础设施的应用程序和服务。
- 作用:SRE团队需要具备云计算开发技能,以构建可靠、高效的云原生系统,并利用云计算服务提供商的工具和功能来优化系统性能和成本效益。
总的来说,SRE在云计算领域中扮演着关键角色,负责确保基础设施和应用程序的高可靠性、高可用性和高性能,通过自动化、监控和持续改进来实现这些目标。这些技术概念和实践帮助SRE团队有效地管理复杂的云计算环境
二、kubernetes 概述
官网: https://kubernetes.io
GitHub: https://github.com/kubernetes/kubernetes
1、kubernetes 概念
Kubernetes,词根源于希腊语的舵手、飞行员。在国内又称k8s(因为k和s之间有8个字母,所以得名。“国内程序员的幽默”)。用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。可以理解成 K8S 是负责自动化运维管理多个容器化程序(比如 Docker)的集群,是一个生态极其丰富的容器编排框架工具
K8S由 google 的 Borg 系统(博格系统,google内部使用的大规模容器编排工具)作为原型,后经GO语言延用Borg的思路重写并捐献给CNCF基金会开源
云原生基金会(CNCF)于2015年12月成立,隶属于Linux基金会。CNCF孵化的第一个项目就是Kubernetes,随着容器的广泛使用,Kubernetes已经成为容器编排工具的事实标准
2、传统后端部署与k8s 的对比
2.1 传统部署
传统的后端部署办法:把程序包(包括可执行二进制文件、配置文件等)放到服务器上,接着运行启动脚本把程序跑起来,同时启动守护脚本定期检查程序运行状态、必要的话重新拉起程序。
此时一旦服务的请求量上来,已部署的服务响应不过来,传统的做法往往是,如果请求量、内存、CPU超过阈值做了告警,运维人员马上再加几台服务器,部署好服务之后,接入负载均衡来分担已有服务的压力。这样问题就出现了:从监控告警到部署服务,中间需要人力介入! 没有办法自动完成服务的部署、更新、卸载和扩容、缩容。
2.2 k8s的部署
上述传统后端部署的问题,就是k8s所要解决的问题。自动化运维管理容器化(Docker)程序。K8S是Google开源的容器集群管理系统,在Docker等容器技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
3、为什么要用K8S
试想下传统的后端部署办法:把程序包(包括可执行二进制文件、配置文件等)放到服务器上,接着运行启动脚本把程序跑起来,同时启动守护脚本定期检查程序运行状态、必要的话重新拉起程序。
设想一下,如果服务的请求量上来,已部署的服务响应不过来怎么办?传统的做法往往是,如果请求量、内存、CPU超过阈值做了告警,运维人员马上再加几台服务器,部署好服务之后,接入负载均衡来分担已有服务的压力。
这样问题就出现了:从监控告警到部署服务,中间需要人力介入!那么,有没有办法自动完成服务的部署、更新、卸载和扩容、缩容呢?
而这就是 K8S 要做的事情:自动化运维管理容器化(Docker)程序。