SlideShare une entreprise Scribd logo
1  sur  42
古早味、新感受:改造老
牌企業進入自動化時代
-- We can do it.
scott.liao @ Mr. 沙先生
<shazi7804@gmail.com>
104 資訊科技 工程副理
DevOps, AWS and more …
• Blog: Mr. 沙先生
• Gitbook: Puppet 從入門就放棄
• Github: @shazi7804
• iT 鐵人賽第九屆:
Ops 的轉職之路 - Puppet 從入門就放棄
Puppet x 104
What’s Puppet
組態 x IaC x 自動化
vs. vs.
Why Puppet
容易被測試
模組多到暴
完整的信任機制
隨便狗一下都有
Github 也在用阿
AWS 都支援了你說呢
技術長說的*
於是 104 開始了一場
DevOps 革命
How To ….
想離職了
幹嘛要 DevOps
Who care
Who cares
嗯,要加 s
問題
決策者
執行者技術能力
問題
決策者
執行者技術能力
技術長說的*
問題
決策者
執行者技術能力
技術長說的*
覺得有幫助
問題
決策者
執行者技術能力
技術長說的*
覺得有幫助教育訓練
簡單、有感 大範圍擴張 更完整的佈署
1 2 3
PLANNING
簡單、有感 大範圍擴張 更完整的佈署
1 2 3
PLANNING
• Users, Groups
• SNMP
• Hostname
• Motd
• Profile
• NTP
• Backup
簡單、有感 大範圍擴張 更完整的佈署
1 2 3
PLANNING
• Users, Groups
• SNMP
• Hostname
• Motd
• Profile
• NTP
• Backup
• Apache / Tomcat / Java
• Apache / PHP
• Nginx / NodeJS
• Nginx / PHP
• Nginx / Python
簡單、有感 大範圍擴張 更完整的佈署
1 2 3
PLANNING
• Users, Groups
• SNMP
• Hostname
• Motd
• Profile
• NTP
• Backup
• Apache / Tomcat / Java
• Apache / PHP
• Nginx / NodeJS
• Nginx / PHP
• Nginx / Python
• 少數類型
• 即將被淘汰的
• All Server
Manifest
node ^www.104.com.tw$ {
# manage basic configuration
package { 'ntp': ensure => present }
# manage users and groups
group { 'devopsdays': ensure => present }
user { 'scott.liao':
ensure => present,
comment => ’DevOpsDays Taipei 2018 speaker',
home => '/104corp/scott.liao',
groups => 'devopsdays',
}
# manage application
package { 'apache2': ensure => present }
package { 'php7.0': ensure => present }
}
• 主要程式碼
• 相當於 Ansible 的 playbook
• Puppet 自有宣告式語言
Coding
Coding
Module
• 程式碼重複利用
• 引用簡單
class basic {
package { 'ntp': ensure => present }
}
class users {
group { 'devopsdays': ensure => present }
user { 'scott.liao':
ensure => present,
comment => 'DevOpsDays Taipei 2018 speaker',
home => '/104corp/scott.liao',
groups => 'devopsdays',
}
}
class web {
package { 'apache2': ensure => present }
package { 'php7.0': ensure => present }
}
Coding
Role and Profile
• 複雜的環境
• 皆以模組為基底
class role::web {
include profile::basic
include profile::users
include profile::web
}
class profile::basic { … }
class profile::users { … }
class profile::web { … }
node ^www.104.com.tw$ {
include role::web
}
基於 CronJob 的分散式概念
Sync of puppet
runinterval (default)
Sync of puppet
fqdn_rand
# When reboot after sync puppet
@reboot /opt/puppetlabs/bin/puppet agent –t
# Generates random time of sync puppet
2,12,22,32,42,52 * * * * sleep 12; /opt/puppetlabs/bin/puppet agent –t
• Hash with fqdn
• random and limit
沒有 CI / CD 怎麼叫 IaC
IaC with Puppet
CI / CD
• 版本控管
• 自動化測試
• 自動化佈署
• 透過 hiera 管理環境參數
• 模組化管理
|-- Gemfile
|-- Puppetfile
|-- Rakefile
|-- autosign.conf
|-- data
|-- environments
|-- dev
|-- production
|-- hiera.yaml
|-- private
|-- profile
|-- role
|-- spec
# module manage
# node auto sign
# hiera data
# manifests
# hiera config
# private module
# profile
# role
# test case
IaC with Puppet
Module manage
• Framework
• r10k
• librarian-puppet
• Module provider
• Puppetlabs
• voxpupuli (Github)
• official
IaC with Puppet
Test Framework
• rspec-puppet (unit test)
• puppet-lint (coding style)
• puppetlabs_spec_helper (module testing)
• beaker-rspec (acceptance test)
什麼軟體盤點?
就用 facter 就好啦!
Facter and Dashboard
Node PuppetDB Dashboard
• Dashboard
• Puppet Enterprise
• Puppetboard
• Grafana with prometheus_reporter
• Custom from Puppetdb
Puppet in 104 Corp
727
Populatio
n
118401
Resource
1Y7M
Time
10
Module
We can do it.
Thank You
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代

Contenu connexe

Tendances

AWS EC2 for beginner
AWS EC2 for beginnerAWS EC2 for beginner
AWS EC2 for beginnerazole Lai
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & WindowsChu-Siang Lai
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer TalkLarry Cai
 
20150604 docker 新手入門
20150604 docker 新手入門20150604 docker 新手入門
20150604 docker 新手入門azole Lai
 
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 GradleJustin Lin
 
JCConf2015: groovy to gradle
 JCConf2015: groovy to gradle JCConf2015: groovy to gradle
JCConf2015: groovy to gradleChing Yi Chan
 
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Bo-Yi Wu
 
前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧Chu-Siang Lai
 
Azure Taiwan - Keep azure cost down (Azure 成本管控)
Azure Taiwan - Keep azure cost down (Azure 成本管控)Azure Taiwan - Keep azure cost down (Azure 成本管控)
Azure Taiwan - Keep azure cost down (Azure 成本管控)Alan Tsai
 
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!Will Huang
 
Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)Will Huang
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)Will Huang
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
容器式基礎架構介紹
容器式基礎架構介紹容器式基礎架構介紹
容器式基礎架構介紹Philip Zheng
 
Docker 淺入淺出
Docker 淺入淺出Docker 淺入淺出
Docker 淺入淺出Miles Chou
 
Git and Github basic with SourceTree
Git and Github basic with SourceTreeGit and Github basic with SourceTree
Git and Github basic with SourceTreeChu-Siang Lai
 
Introduction to Golang final
Introduction to Golang final Introduction to Golang final
Introduction to Golang final Paul Chao
 
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例Will Huang
 

Tendances (20)

AWS EC2 for beginner
AWS EC2 for beginnerAWS EC2 for beginner
AWS EC2 for beginner
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
 
20150604 docker 新手入門
20150604 docker 新手入門20150604 docker 新手入門
20150604 docker 新手入門
 
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle
 
JCConf2015: groovy to gradle
 JCConf2015: groovy to gradle JCConf2015: groovy to gradle
JCConf2015: groovy to gradle
 
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
 
前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧
 
Azure Taiwan - Keep azure cost down (Azure 成本管控)
Azure Taiwan - Keep azure cost down (Azure 成本管控)Azure Taiwan - Keep azure cost down (Azure 成本管控)
Azure Taiwan - Keep azure cost down (Azure 成本管控)
 
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
 
Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
DAE
DAEDAE
DAE
 
容器式基礎架構介紹
容器式基礎架構介紹容器式基礎架構介紹
容器式基礎架構介紹
 
Docker 淺入淺出
Docker 淺入淺出Docker 淺入淺出
Docker 淺入淺出
 
Git and Github basic with SourceTree
Git and Github basic with SourceTreeGit and Github basic with SourceTree
Git and Github basic with SourceTree
 
Introduction to Golang final
Introduction to Golang final Introduction to Golang final
Introduction to Golang final
 
Git安裝
Git安裝Git安裝
Git安裝
 
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
 

Similaire à DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代

Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用勇浩 赖
 
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 Continuous Delivery Workshop with Ansible x GitLab CI (5th) Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Continuous Delivery Workshop with Ansible x GitLab CI (5th)Chu-Siang Lai
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorialazole Lai
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUGYingSiang Geng
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结Yiwei Ma
 
02.python.开发最佳实践
02.python.开发最佳实践02.python.开发最佳实践
02.python.开发最佳实践Na Lee
 
推薦系統實作
推薦系統實作推薦系統實作
推薦系統實作FEG
 
FHIR Server 安裝與使用
FHIR Server 安裝與使用FHIR Server 安裝與使用
FHIR Server 安裝與使用Lorex L. Yang
 
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用Philip Zheng
 
用Cython封装c++代码为python模块的一点经验
用Cython封装c++代码为python模块的一点经验用Cython封装c++代码为python模块的一点经验
用Cython封装c++代码为python模块的一点经验Leo Zhou
 
如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進Mu Chun Wang
 
認識那條鯨魚 Docker 初探
認識那條鯨魚   Docker 初探認識那條鯨魚   Docker 初探
認識那條鯨魚 Docker 初探仲昀 王
 
LineBot.pptx
LineBot.pptxLineBot.pptx
LineBot.pptxNCUDSC
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践Jackson Tian
 
Bitbucket pipeline CI
Bitbucket pipeline CIBitbucket pipeline CI
Bitbucket pipeline CIZero Huang
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)Max Lai
 
Java Concurrent Optimization: Concurrent Queue
Java Concurrent Optimization: Concurrent QueueJava Concurrent Optimization: Concurrent Queue
Java Concurrent Optimization: Concurrent QueueMin Zhou
 
MariaDB: 新兴的开源大数据引擎
MariaDB: 新兴的开源大数据引擎MariaDB: 新兴的开源大数据引擎
MariaDB: 新兴的开源大数据引擎Colin Charles
 

Similaire à DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代 (20)

Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用
 
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 Continuous Delivery Workshop with Ansible x GitLab CI (5th) Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 
Django step0
Django step0Django step0
Django step0
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorial
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结
 
02.python.开发最佳实践
02.python.开发最佳实践02.python.开发最佳实践
02.python.开发最佳实践
 
推薦系統實作
推薦系統實作推薦系統實作
推薦系統實作
 
FHIR Server 安裝與使用
FHIR Server 安裝與使用FHIR Server 安裝與使用
FHIR Server 安裝與使用
 
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
 
用Cython封装c++代码为python模块的一点经验
用Cython封装c++代码为python模块的一点经验用Cython封装c++代码为python模块的一点经验
用Cython封装c++代码为python模块的一点经验
 
如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進
 
認識那條鯨魚 Docker 初探
認識那條鯨魚   Docker 初探認識那條鯨魚   Docker 初探
認識那條鯨魚 Docker 初探
 
LineBot.pptx
LineBot.pptxLineBot.pptx
LineBot.pptx
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践
 
Bitbucket pipeline CI
Bitbucket pipeline CIBitbucket pipeline CI
Bitbucket pipeline CI
 
Cocoa on Rails 4th
Cocoa on Rails 4thCocoa on Rails 4th
Cocoa on Rails 4th
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
 
Java Concurrent Optimization: Concurrent Queue
Java Concurrent Optimization: Concurrent QueueJava Concurrent Optimization: Concurrent Queue
Java Concurrent Optimization: Concurrent Queue
 
MariaDB: 新兴的开源大数据引擎
MariaDB: 新兴的开源大数据引擎MariaDB: 新兴的开源大数据引擎
MariaDB: 新兴的开源大数据引擎
 

DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代

Notes de l'éditeur

  1. 前言 這是一個老牌工具和老牌企業結合的辛酸血淚史
  2. 我們不戰工具,但為什麼選擇 Puppet
  3. Puppet 是一個老牌工具,資料齊全,該有的都有,也有強大的爸爸媽媽在支援 但一定會有人想反駁說其他工具也可以阿
  4. 這就是最好的理由
  5. 所以加入 104 後就被賦予一個任務,Puppet。也導致 104 開始了一場 DevOps 革命 2017/02 init
  6. 但是 … 怎麼開始 ? 從了解 104 開始。
  7. 我們有”大象與他們的產地”的 PHP、大數據分析的 Python、Java、Perl、NodeJS,還有潮到出水的 Golang,更厲害的是我活了 27 年都沒聽過的 Coldfusion 這 21 年的歷史讓各種程式語言在 104 蓬勃的發展 除了種類的多元以外,我們還有國寶級的 CentOS 4、我們的 Coldfusion 版本是 10年前的產物,直到前幾天我才知道 Coldfusion 是 Adobe 開發的 我們從外太空玩到內子宮 巧婦難為無米之炊阿各位 當下我只有一個想法
  8. 當然我沒有離職,不然我就沒辦法在這邊跟大家分享這一段辛酸血淚史
  9. 要導入最容易遇到的第一個問題
  10. 不管是導入 DevOps 或者是 Puppet 都會遇到三大問題 決策者:咄咄逼人的問你幹嘛浪費這麼大的成本做這件事情 執行者:你又要增加我的工作量,這樣做有什麼好處 技術能力:我就是不會阿,你耐我何
  11. 同樣的事情只做一次,100台伺服器只需要做一次
  12. 面對現實 這張圖太難,所以我決定在上面的都先不做,因為難度太高,容易失敗,花費的成本太高。
  13. 挑軟柿子吃
  14. 看到成效後,開始像蛋塔工廠一樣瘋狂的擴展你的管理範圍,這不會有泡沫化的問題
  15. 確定這樣的計畫可行後,開始讓 Puppet 趨近於完整。
  16. Manifest 是 Puppet 的核心
  17. librarian 來伯銀