SlideShare une entreprise Scribd logo
1  sur  35
前端转行 DevOps
经验分享
王龑 · 北京
内容
• 背景介绍
• 前端工程化到 DevOps
• DevOps 利器 Docker
• Ansible 介绍和使用
• 使用 Node.js 开发一个 Docker 插件
2017/4/23 2
背景介绍
2017/4/23 3
《北森2016-2017中国企业招聘指数报告》
2017/4/23 4http://www.beisen.com/activity/zpzs
不仅是前端工程师和程序员
“鲁班”AI 设计系统
• 双 11 期间 1.7 亿个 Banner
2017/4/23 5http://www.uisdc.com/alibaba-luban-ai-banner
“鲁班”AI 设计系统
2017/4/23 6http://www.uisdc.com/alibaba-luban-ai-banner
《 2017互联网人才流动报告》
2017/4/23 7http://weibo.com/3632539935/EA1R64Ehx
工作职责
• 负责 React 前端开发
• 主导前端工程化,一键部署
• 运维了 N 多个服务,博客、网站
• 监控和业务数据分析
• 推动自动化程度的提升
2017/4/23 8
前端工程化
• 技术升级
• 框架技术选型
• 模块化、组件化
• 构建工具
• 预处理技术 Jade / Less / Babel
• 文件压缩
• 持续集成
• 单元测试
• 语法规范
• 每次 Push 触发 Jenkins 构建
• 平均每天 1~2 次发布
• 持续部署
• CDN
• 配置管理
2017/4/23 9
2017/4/23 10
源代码
分支管理
包管理
图片
Jenkins
Gitlab CI
10分钟修复
静态文件
测试报告
jMeter 压测
Zip
War
POM
apk
配置管理
Maven
NPM
SFTP
Nginx
错误监控
业务数据
DevOps 流水线
2017/4/23 11
前端
后端
第三方服务
保障服务存活
• 方法
• Nohup 挂后台
• Daemon Process 交给操作系统
• Supervisord 支持多个命令
• PM2 + Keymetrics 设计超前
• Docker
• 需求
• 查看管理服务的状态
• 监控 CPU,磁盘,网络
• 服务发现
2017/4/23 12
Docker
• 标准化
• 多平台
• 版本控制
• 隔离性
• 安全性
2017/4/23 13
从单机到集群
• 1 台 Docker 主机
• InfluxDB
• Grafana
• Sentry
• Postgres
• Ghost
• Metabase
• MongoDB
• 十几个容器,负载不断上升
• 升级重启需要花费 15 分钟
• 调研集群方案,最终确定 Swarm
• 最小成本 Hold 住
2017/4/23 14
Docker Swarm
2017/4/23 15
关于集群
• 权限
• 自签名证书
• Portainer
• 监控
• cAdvisor + InfluxDB + Grafana
• 日志
• ELK Stack + Gelf Driver
• 负载均衡
• Traefik
• *.swarm.company.com
2017/4/23 16
修改服务以更好的适应集群
• 以 Grafana 为例
• 改动前
• 只有一个容器 App
• 使用 SQLite 数据库
• 改动后
• 使用三个容器 Web / DB / Session
• Web 容器可以水平伸缩
• 数据库迁移到 Postgres
• 使用 Memcache 做粘性的 Session
2017/4/23 17
overlay network
2017/4/23 18
all in one
web-2db
session
单节点
集群
web-1
node-1 node-2 node-3
2017/4/23 19
Ansible – 自动化运维工具
• 特点
• 基于 Python 和 SSH 不用安装 Agent
• Inventory 支持主机分组管理
• 能够批量执行命令
• 封装了安装软件包等常用操作
• 支持 YAML 格式的 Playbook 剧本
2017/4/23 20https://www.ansible.com/it-automation
使用 Ansible 的公司
2017/4/23 21
使用 Ansible 安装 Nginx
---
- hosts: web-server
become: true
tasks:
- name: 使用默认配置安装 Nginx
apt:
name: nginx
state: present
2017/4/23 22
• 命令行
• ansible-playbook install_nginx.yml
• 可读性
• 使用 YAML 编写 Playbook
• 声明式
• 类似于单元测试里的断言 assert. true ( nginx is present )
• 幂等性
Ansible 架构
• Ansible Core 核心
• Host Inventory 主机列表
• Playbooks 剧本
• Modules 模块 (900+)
• Plugins 插件
• Ansible Tower 可视化
2017/4/23 23https://terry.im/wiki/terry/Ansible.html
Inventory
[web-servers]
10.1.1.1 ansible_ssh_port=22 ansible_ssh_user=root
10.1.1.2
10.1.1.3
[db]
10.1.1.4
2017/4/23 24
• 每台主机都可以有自定义的配置
• 检查所有机器连通性
• ansible all –m ping
使用 Ansible 安装 Docker
2017/4/23 25
- name: 安装 Docker
shell: curl -sSL https://get.daocloud.io/docker | sh
- name: 确认 user 在 docker 组里
user:
name: user
state: present
groups: docker
append: yes
- name: 安装 Docker Compose
get_url:
url: https://get.daocloud.io/docker/compose/releases/download/1.11.2 ...
dest: /usr/local/bin/docker-compose
mode: 0755
2017/4/23 26
- name: 分发配置
copy:
src: "./config/docker.service"
dest: "/lib/systemd/system/docker.service"
owner: root
group: root
mode: 0644
- name: 重启 Docker 服务
systemd:
name: docker
daemon_reload: yes
state: restarted
- name: 查看版本
command: docker -v
register: i
- debug: var=i.stdout
2017/4/23 27
Ansible and Docker
• Ansible 针对操作系统
• 通过 docker-container 内置模块支持 Docker
• 利用 docker-py pip 模块和 Docker API 通信
• Docker 针对 Container / Image
• 可用 Ansible 安装 Docker 环境
• 可用 Ansible 管理容器生命周期
2017/4/23 28https://nathanleclaire.com/blog/2015/11/10/using-ansible-with-docker-machine-to-bootstrap-host-nodes/
使用 Node.js 开发 Docker 插件?
添加 Docker 对 NFS 的支持,使得容器可以在集群内自由迁移
2017/4/23 29https://docs.docker.com/engine/extend/plugin_api/
2017/4/23 30
NFS Storage
/shared_volumes
docker run --volume-driver nfs –v data:/data –it alpine “echo 1>/data/msg.txt”
/shared_volumes /shared_volumes
/msg.txt /msg.txt /msg.txt
/data /data /data
vm1 vm2 vm3
Docker 插件
• Docker 插件是独立于 Docker Engine 进程的扩展,能够增强 Docker
的功能
• 插件可以运行在容器里也可以运行在容器的外面(插件先启动)
• Docker 通过搜索指定的目录发现插件
• /etc/docker/plugins/nfs.spec
内容就一行 tcp://127.0.0.1:3245
• Docker 插件会在首次使用的时候被激活
2017/4/23 31
Docker Engine 和插件的通信
2017/4/23 32
• 实现这几个 HTTP API
• /Plugin.Activate
• /VolumeDriver.Create
• /VolumeDriver.Remove
• /VolumeDriver.Path
• /VolumeDriver.Mount
• /VolumeDriver.Get
• /VolumeDriver.List
• 具体代码
2017/4/23 33
app.post("/VolumeDriver.Get", (req, res) => {
const mp = path.join("/shared_volumes",sanitize(req.body.Name));
if (fs.existsSync(mp)) {
res.json({
"Volume": {
"Name": req.body.Name,
"Mountpoint": mp,
"Status": {}
}
});
} else {
res.json({
"Err": "Not Exist"
});
}
});
后话
• 测试完 NFS 性能后开源
• 为什么不直接用 mapping 而是用 volume
• 管理功能
• 结合 ZFS 做快照
• 结合云存储做备份
• 跳出舒适区,DevOps 路漫漫,一起学习吧
2017/4/23 34
谢谢
2017/4/23 35

Contenu connexe

Tendances

開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽Will Huang
 
Windows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, KubernetesWindows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, KubernetesWill Huang
 
Azure Web App on Linux @ Global Azure Bootcamp 2017 Taiwan
Azure Web App on Linux @ Global Azure Bootcamp 2017 TaiwanAzure Web App on Linux @ Global Azure Bootcamp 2017 Taiwan
Azure Web App on Linux @ Global Azure Bootcamp 2017 TaiwanWill Huang
 
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)Will Huang
 
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例Will Huang
 
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)Will Huang
 
Angular 4 新手入門攻略完全制霸
Angular 4 新手入門攻略完全制霸Angular 4 新手入門攻略完全制霸
Angular 4 新手入門攻略完全制霸Will Huang
 
React.js what do you really mean?
React.js what do you really mean?React.js what do you really mean?
React.js what do you really mean?昱安 周
 
Angular 4 網站開發最佳實務 (Modern Web 2017)
Angular 4 網站開發最佳實務 (Modern Web 2017)Angular 4 網站開發最佳實務 (Modern Web 2017)
Angular 4 網站開發最佳實務 (Modern Web 2017)Will Huang
 
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!Will Huang
 
容器式基礎架構介紹
容器式基礎架構介紹容器式基礎架構介紹
容器式基礎架構介紹Philip Zheng
 
容器式軟體開發介紹
容器式軟體開發介紹容器式軟體開發介紹
容器式軟體開發介紹Philip Zheng
 
RxJS 6 新手入門
RxJS 6 新手入門RxJS 6 新手入門
RxJS 6 新手入門Will Huang
 
Angular 5 全新功能探索 @ JSDC2017
Angular 5 全新功能探索 @ JSDC2017Angular 5 全新功能探索 @ JSDC2017
Angular 5 全新功能探索 @ JSDC2017Will Huang
 
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)Will Huang
 
使用 ASP.NET 5 實戰開發雲端應用程式
使用 ASP.NET 5 實戰開發雲端應用程式使用 ASP.NET 5 實戰開發雲端應用程式
使用 ASP.NET 5 實戰開發雲端應用程式Will Huang
 
Cncf k8s Ingress Example-03
Cncf k8s Ingress Example-03Cncf k8s Ingress Example-03
Cncf k8s Ingress Example-03Erhwen Kuo
 
ASP.NET 5 的創新與變革
ASP.NET 5 的創新與變革ASP.NET 5 的創新與變革
ASP.NET 5 的創新與變革Will Huang
 
企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養Philip Zheng
 

Tendances (20)

開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽
 
Windows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, KubernetesWindows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, Kubernetes
 
Azure Web App on Linux @ Global Azure Bootcamp 2017 Taiwan
Azure Web App on Linux @ Global Azure Bootcamp 2017 TaiwanAzure Web App on Linux @ Global Azure Bootcamp 2017 Taiwan
Azure Web App on Linux @ Global Azure Bootcamp 2017 Taiwan
 
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
 
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
 
宅學習 Firebase
宅學習 Firebase宅學習 Firebase
宅學習 Firebase
 
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
 
Angular 4 新手入門攻略完全制霸
Angular 4 新手入門攻略完全制霸Angular 4 新手入門攻略完全制霸
Angular 4 新手入門攻略完全制霸
 
React.js what do you really mean?
React.js what do you really mean?React.js what do you really mean?
React.js what do you really mean?
 
Angular 4 網站開發最佳實務 (Modern Web 2017)
Angular 4 網站開發最佳實務 (Modern Web 2017)Angular 4 網站開發最佳實務 (Modern Web 2017)
Angular 4 網站開發最佳實務 (Modern Web 2017)
 
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
 
容器式基礎架構介紹
容器式基礎架構介紹容器式基礎架構介紹
容器式基礎架構介紹
 
容器式軟體開發介紹
容器式軟體開發介紹容器式軟體開發介紹
容器式軟體開發介紹
 
RxJS 6 新手入門
RxJS 6 新手入門RxJS 6 新手入門
RxJS 6 新手入門
 
Angular 5 全新功能探索 @ JSDC2017
Angular 5 全新功能探索 @ JSDC2017Angular 5 全新功能探索 @ JSDC2017
Angular 5 全新功能探索 @ JSDC2017
 
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)
 
使用 ASP.NET 5 實戰開發雲端應用程式
使用 ASP.NET 5 實戰開發雲端應用程式使用 ASP.NET 5 實戰開發雲端應用程式
使用 ASP.NET 5 實戰開發雲端應用程式
 
Cncf k8s Ingress Example-03
Cncf k8s Ingress Example-03Cncf k8s Ingress Example-03
Cncf k8s Ingress Example-03
 
ASP.NET 5 的創新與變革
ASP.NET 5 的創新與變革ASP.NET 5 的創新與變革
ASP.NET 5 的創新與變革
 
企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養
 

Similaire à 前端转行 DevOps 经验分享

Gops2016 云端基于Docker的微服务与持续交付实践
Gops2016 云端基于Docker的微服务与持续交付实践Gops2016 云端基于Docker的微服务与持续交付实践
Gops2016 云端基于Docker的微服务与持续交付实践Li Yi
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛Edward Kuo
 
從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用謝 宗穎
 
Train.IO 【第六期-OpenStack 二三事】
Train.IO 【第六期-OpenStack 二三事】Train.IO 【第六期-OpenStack 二三事】
Train.IO 【第六期-OpenStack 二三事】inwin stack
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索Will Huang
 
从Docker到容器服务
从Docker到容器服务从Docker到容器服务
从Docker到容器服务Li Yi
 
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Gelis Wu
 
Docker 最佳实践
Docker 最佳实践Docker 最佳实践
Docker 最佳实践YuLing Liu
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorialazole Lai
 
Docker open stack
Docker open stackDocker open stack
Docker open stackGuangya Liu
 
Artifacts management with CI and CD
Artifacts management with CI and CDArtifacts management with CI and CD
Artifacts management with CI and CDChen-Tien Tsai
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
docker intro
docker introdocker intro
docker introkoji lin
 
Docker容器微服務 x WorkShop
Docker容器微服務 x WorkShopDocker容器微服務 x WorkShop
Docker容器微服務 x WorkShopPhilip Zheng
 
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node jsXuefeng Zhang
 
.NET Conf Taiwan 2022 - Tauri - 前端人員也能打造小巧快速的 Windows 應用程式
.NET Conf Taiwan 2022 - Tauri -前端人員也能打造小巧快速的 Windows 應用程式.NET Conf Taiwan 2022 - Tauri -前端人員也能打造小巧快速的 Windows 應用程式
.NET Conf Taiwan 2022 - Tauri - 前端人員也能打造小巧快速的 Windows 應用程式升煌 黃
 
Kubernetes project update and how to contribute
Kubernetes project update and how to contributeKubernetes project update and how to contribute
Kubernetes project update and how to contributeinwin stack
 
FBTUG - 當NAS遇見智慧農耕
FBTUG - 當NAS遇見智慧農耕FBTUG - 當NAS遇見智慧農耕
FBTUG - 當NAS遇見智慧農耕Jarvis Chung
 
云梯的多Namenode和跨机房之路
云梯的多Namenode和跨机房之路云梯的多Namenode和跨机房之路
云梯的多Namenode和跨机房之路li luo
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩Wen-Tien Chang
 

Similaire à 前端转行 DevOps 经验分享 (20)

Gops2016 云端基于Docker的微服务与持续交付实践
Gops2016 云端基于Docker的微服务与持续交付实践Gops2016 云端基于Docker的微服务与持续交付实践
Gops2016 云端基于Docker的微服务与持续交付实践
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
 
從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用
 
Train.IO 【第六期-OpenStack 二三事】
Train.IO 【第六期-OpenStack 二三事】Train.IO 【第六期-OpenStack 二三事】
Train.IO 【第六期-OpenStack 二三事】
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
 
从Docker到容器服务
从Docker到容器服务从Docker到容器服务
从Docker到容器服务
 
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探
 
Docker 最佳实践
Docker 最佳实践Docker 最佳实践
Docker 最佳实践
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorial
 
Docker open stack
Docker open stackDocker open stack
Docker open stack
 
Artifacts management with CI and CD
Artifacts management with CI and CDArtifacts management with CI and CD
Artifacts management with CI and CD
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
docker intro
docker introdocker intro
docker intro
 
Docker容器微服務 x WorkShop
Docker容器微服務 x WorkShopDocker容器微服務 x WorkShop
Docker容器微服務 x WorkShop
 
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node js
 
.NET Conf Taiwan 2022 - Tauri - 前端人員也能打造小巧快速的 Windows 應用程式
.NET Conf Taiwan 2022 - Tauri -前端人員也能打造小巧快速的 Windows 應用程式.NET Conf Taiwan 2022 - Tauri -前端人員也能打造小巧快速的 Windows 應用程式
.NET Conf Taiwan 2022 - Tauri - 前端人員也能打造小巧快速的 Windows 應用程式
 
Kubernetes project update and how to contribute
Kubernetes project update and how to contributeKubernetes project update and how to contribute
Kubernetes project update and how to contribute
 
FBTUG - 當NAS遇見智慧農耕
FBTUG - 當NAS遇見智慧農耕FBTUG - 當NAS遇見智慧農耕
FBTUG - 當NAS遇見智慧農耕
 
云梯的多Namenode和跨机房之路
云梯的多Namenode和跨机房之路云梯的多Namenode和跨机房之路
云梯的多Namenode和跨机房之路
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
 

前端转行 DevOps 经验分享

Notes de l'éditeur

  1. 乐 yue 乘  阿里智能设计实验室 Logo
  2. 乐 yue 乘  阿里智能设计实验室 Logo
  3. 2017互联网人才流动报告
  4. Puppet 和 Saltstack 的最大区别