龙空技术网

疫情期企业在运维开发方面储备的技术

云架构 247

前言:

目前我们对“rockmongonginx502”可能比较看重,咱们都需要知道一些“rockmongonginx502”的相关资讯。那么小编在网摘上收集了一些对于“rockmongonginx502””的相关内容,希望兄弟们能喜欢,朋友们一起来学习一下吧!

随笔记录,疫情期间,在家办公,给互联网模式的企业在运维上带来了很大的挑战,首先是网络,大部分企业会通过VPN的方式来访问公司的内部系统办公,对于做研发的人员,项目的管理,代码的开发、构建、发布、上线等流程需要线上化支持,人员的日常办公能视频的就视频等等,说了这么,给大家分享一下运维开发方面的技术栈,谈谈自己的理解。

天马行空的谈,研发方面的水也很深,我就抽出几个典型的场景。

从运维的视角去看

提供监控、可观测的系统,保证业务应用对外提供不间断的服务。铺垫了一小段主要想聊聊监控的研发。

我个人一直是做监控相关的工作,分享一个人的理解。

从下而上的一个视角

基础设施上会对机柜、服务器做监控工作;

数据中心更多的是功耗、安全、温度湿度等等服务器方面关注更多的是内部各个硬件的健康状态,CPU、硬盘、内存、网卡等等。

业务运维可能关注更多的是APP的监控。

对于业务来讲公司的技术中台已经提供了相关的技术支持、比如域名、VIP、存储、计算、日志管理等组件,核心关注自己业务的应用的开发,服务的可靠性、常规的运营和运维管理如下:

业务集群的监控、主要是看底层依赖的是什么平台、虚拟机实例、容器等等;业务服务的监控、主要是服务接口、性能、日志、延迟、状态码、异常、网络等等。

目前市场上的监控软件百花齐放、不过大家都是更倾向于云原生。

如果团队要开发自己的监控系统首先从架构层面需要关注、指标的采集、清洗、存储、计算、展示、判断、告警、故障处理等逻辑。

云原生社区已经提供了prometheus 监控方案,我这边提到的是一个通用的监控方案,具体问题具体分析还需根据自己的方案定制开发和调整。我个人比较擅长使用Openfalcon。自己陆陆续续写了很多的随笔记录,大家可以关注参考。

prometheus Architecture

从研发的人员视角去看

项目的管理,代码的开发、构建、发布、上线等流程需要线上化支持。铺垫了一小段主要是想说,一个DevOps的PAAS平台研发技术栈。

我个人也是在云计算领域工作有些年头了,学艺不精啊,做个一些物理机维护工作,参与开主导开发过几个TOB平台,谈谈自己的看法。

云计算的雏形

码农的给程序员贴上了一个,写代码的标签,工作中会用不同的语言写代码、Java、Golang、Python、Shell等等。通常会使用Git保存和维护代码。说到Git不不说说,企业 需要为成千上百的员工搭建Git代码的服务,目前用的最多的就是Gitlab,做一些内部的二次开发,代码的安全检测、敏感关键字检测等等个人浅薄的认知。

开发完的代码在本地测试通过后,需要上线测试、目前我所了解的是大部的企业内部都有自己的DevOps平台、可以申请项目依赖的资源、绑定Git分支或者Tag,构建编译,编译的过程可以通过shell、Dockerfile等文件输出到目标的容器中,大部门的企业做好了基础的监控主机、端口、进程、利用率等。接下来直接发布编译好的结果(通常是镜像)。

我这边只是说个大概,还有上线会有分组(测试、预发、生成)等等。还有的是服务树的概念、有了服务树可建立自己的系统和应用,细粒度的管理。说了这么多,上个图轻松一下。

CI/CD

目前我个人了解大家都会选用Kubernets作为底层基础设,CICD生命周期管理-DevOps落地-开发运维。

Kubernetes源于希腊语,有“舵”或“飞行员”的意思。k8s,是由Kubernetes中间的八个字母缩写为数字8得来的。Google采用这个名字的深意就是:既然你docker把自己定位成驮着集装箱在大海上遨游的鲸鱼,那么我就以Kubernetes掌舵大航海时代的话语权,鲸鱼必须按照我设定的路线巡游。

Kubernetes是Google实验室开发的一种容器管理技术,用于在不同类型的环境(例如物理机,虚拟机和云基础架构)中管理容器化的应用程序。可以帮助创建和管理应用程序的容器化。

Kubernetes具有跨集群自动部署、扩展应用程序和操作应用程序容器的能力。它能够创建以容器为中心的基础设施。

Kubernetes的特征:

以下是Kubernetes的一些重要特征。

持续开发、集成和部署容器化基础设施以应用程序为中心的管理可以自动扩展的基础架构跨开发测试和生产的环境一致性松散耦合的基础设施,其中每个组件可以作为单独的单元资源利用密度高可以预测的基础设施

Kubernetes的架构:

如下图所示,Kubernetes遵循客户机-服务器体系结构。其中,master安装在一台机器上,节点安装在不同的Linux机器上。

Master和Node的关键组件介绍。

Master主机组件介绍:

etcd

分布式键值存储系统,用于保存集群状态数据

API Server

提供Restful API接口的功能调用

Controller Manager

负责收集节点的状态和执行任务,关键的控制有replication controller, endpoint controller, namespace controller,

Scheduler

负责集群负载的调度,根据调度算法为新创建的pod选择一个Node节点

Node节点中组件的介绍:

Docker

Docker 是一个必须的环境,运行封装好的应用。

Kubelet服务

kubelet 是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器,Pod挂载数据卷,下载secret,获取容器和节点状态等工作,kubelet 将每个Pod转换成一组容器

Kubernetes Proxy服务

请求分发、负载均衡,在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。实现让Pod节点(一个或者多个容器)对外提供服务

Kubernetes核心概念介绍:

对象模型

Pod

• 最小部署单元

• 一组容器的集合

• 一个Pod中的容器共享网络命名空间

• Pod是短暂的

Controllers

• ReplicaSet :确保预期的Pod副本数量

• Deployment :无状态应用部署

• StatefulSet :有状态应用部署

• DaemonSet :确保所有Node运行同一个Pod

• Job :一次性任务

• Cronjob :定时任务

更高级层次对象,部署和管理Pod

Service

• 防止Pod失联

• 定义一组Pod的访问策略

Label :标签,附加到某个资源上,用于关联对象、查询和筛选

Namespaces :命名空间,将对象逻辑上隔离

Volume:数据卷,共享Pod中使用的数据

Ingress:给Service提供外部访问功能。

Annotations :注释

除了上面Master和Node的几个核心组件,还有下面一些扩展插件,其中有些插件是非必须的。

Coredns:维护Service与cluster ip之间的对应关系CNI:容器网络接口。k8s的网络模型需要借助插件才能实现,比如flannel,calico等,flannel插件就是用来维护Pod网络的。Web UI(Dashboard):图形界面,并非必须。Fluentd:为集群提供日志采集、存储和查询。Traefik:Ingress Controller的软件实现,为pod中服务提供外网访问。Dashboard:管理k8s的图形化界面。

DevOps中相关的工具:

代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion

构建工具:Ant、Gradle、maven

自动部署:Capistrano、CodeDeploy

持续集成(CI):Bamboo、Hudson、Jenkins

配置管理:Ansible、Chef、Puppet、SaltStack、ScriptRock GuardRail

容器:Docker、LXC、第三方厂商如AWS

编排:Kubernetes、Core、Apache Mesos、DC/OS

服务注册与发现:Zookeeper、etcd、Consul

脚本语言:python、ruby、shell

日志管理:ELK、Logentries

系统监控:Datadog、Graphite、Icinga、Nagios

性能监控:AppDynamics、New Relic、Splunk

压力测试:JMeter、Blaze Meter、loader.io

预警:PagerDuty、pingdom、厂商自带如AWS SNS

HTTP加速器:Varnish

消息总线:ActiveMQ、SQS

应用服务器:Tomcat、JBoss

Web服务器:Apache、Nginx、IIS

数据库:MySQL、Oracle、PostgreSQL等关系型数据库;cassandra、mongoDB、redis等NoSQL数据库

项目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker。

在工具的选择上,需要结合公司业务需求和技术团队情况而定。

标签: #rockmongonginx502