Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

scott.liao (Mr. 沙先生)

September 10, 2018
Tweet

More Decks by scott.liao (Mr. 沙先生)

Other Decks in Technology

Transcript




  1. -- We can do it.
    scott.liao Mr.

    View Slide

  2. 104

    DevOps, AWS and more …
    • Blog Mr.
    • Gitbook Puppet
    • Github @shazi7804
    • iT
    Ops - Puppet

    View Slide

  3. Puppet x 104

    View Slide

  4. What’s Puppet

    View Slide

  5. x IaC x

    View Slide

  6. vs. vs.

    View Slide

  7. Why Puppet

    View Slide





  8. "
    Github !
    AWS

    View Slide

  9. *

    View Slide

  10. 104
    DevOps

    View Slide

  11. How To ….

    View Slide

  12. View Slide


  13. View Slide

  14. DevOps

    View Slide

  15. Who care

    View Slide

  16. Who cares
    ⣐褕茒▁ U

    View Slide






  17. View Slide






  18. *

    View Slide






  19. *

    View Slide






  20. *


    View Slide

  21. View Slide



  22. 1 2 3
    PLANNING

    View Slide



  23. 1 2 3
    PLANNING
    • Users, Groups
    • SNMP
    • Hostname
    • Motd
    • Profile
    • NTP
    • Backup

    View Slide



  24. 1 2 3
    PLANNING
    • Users, Groups
    • SNMP
    • Hostname
    • Motd
    • Profile
    • NTP
    • Backup
    • Apache / Tomcat / Java
    • Apache / PHP
    • Nginx / NodeJS
    • Nginx / PHP
    • Nginx / Python

    View Slide



  25. 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

    View Slide

  26. 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

    View Slide

  27. 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 }
    }

    View Slide

  28. 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
    }

    View Slide

  29. CronJob

    View Slide

  30. Sync of puppet
    runinterval (default)

    View Slide

  31. 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

    View Slide

  32. CI / CD IaC

    View Slide

  33. 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

    View Slide

  34. IaC with Puppet
    Module manage
    • Framework
    • r10k
    • librarian-puppet
    • Module provider
    • Puppetlabs
    • voxpupuli (Github)
    • official

    View Slide

  35. IaC with Puppet
    Test Framework
    • rspec-puppet (unit test)
    • puppet-lint (coding style)
    • puppetlabs_spec_helper (module testing)
    • beaker-rspec (acceptance test)

    View Slide



  36. facter

    View Slide

  37. Facter and Dashboard
    Node PuppetDB Dashboard
    • Dashboard
    • Puppet Enterprise
    • Puppetboard
    • Grafana with prometheus_reporter
    • Custom from Puppetdb

    View Slide

  38. Puppet in 104 Corp
    727
    Population
    118401
    Resource
    1Y7M
    Time
    10
    Module

    View Slide

  39. We can do it.

    View Slide

  40. Thank You

    View Slide

  41. View Slide

  42. View Slide