< Deployment tooling < Notes

Requirements for the next iterations of deployment tooling projects at WMF

Requirement MediaWiki Parsoid etc Elasticsearch
provision artifacts on multiple servers comprising a clusterMUSTMUSTMUST
manage publication of at least 2 versions of mediawiki-coreMUSTNON-ISSUENON-ISSUE
keep old versions of mediawiki-core around to support bits servers (30 days?)MUSTNON-ISSUENON-ISSUE
manage l10n cache files on target serversMUSTNON-ISSUENON-ISSUE
support publication of patches to internal servers that cannot be shared publiclyMUSTMUSTMUST
complete in a timely manner [1]MUSTMUSTNON-ISSUE
Time-to-complete for a deploy is proportional to magnitude of changeMUSTMUSTNON-ISSUE
be able to update/provision a new server joining the cluster without forcing update of all other servers (server pull)MUSTMUSTMUST
handle rollbacks easilyMUSTMUSTNON-ISSUE
handle downgrades (of packages) easilyMUSTMUST (including dependencies)NON-ISSUE
have equal or greater atomicity to rsync --delay-updatesMUST ? ?
be able to lock (to prevent folks overlapping)MUSTMUSTSHOULD
support multiple datacentersMUSTSHOULDSHOULD
have documentation for use and maintenanceMUSTMUSTMUST
Handle security patches cleanly but separate from released versionsMUSTMUSTMUST
support eventual consistency (servers update to latest version on reboot)MUSTSHOULD ?
work well with Puppet-controlled config files (especially for ES and Parsoid)MUSTMUSTMUST
support a variable number of versionsSHOULD ? ?
allow generation of caches and other content post-deploy on target serversSHOULD ?NON-ISSUE
prevent concurrent modification of sourceSHOULD ? ?
track versions installed on each target hostSHOULDMUSTMUST
record errors and informational events publiclySHOULDSHOULDSHOULD
record errors and informational events durably for use in troubleshootingSHOULDSHOULDSHOULD
allow "canary"/rolling deploys where a sub-set of the cluster is updatedSHOULDMUSTMUST
allow multiple production clusters (privates vs non-private, and wikitech.wmf getting out of date)SHOULDSHOULDSHOULD
rely on SSH agent forwardingSHOULD NOTSHOULD NOTSHOULD NOT
require root on the target hosts (privledge separation/access control)SHOULD NOTSHOULD NOTNON-ISSUE
allow multi-masters (especially for multi-datacenter)SHOULDSHOULDSHOULD
be easily auditable (e.g. verifying the git commit hash on the deploy host)SHOULDSHOULDSHOULD
  1. MW: 10 mins basic, 30 full i10n included
    Parsoid: 10 min
    ES:

Copy/paste requirements from the etherpad while table massaging...

Parsoid / Mathoid / Rashomon / PDF renderer deploys

  • MUST make it easy to test packaging (init scripts, log rotation etc) outside the cluster -- debs? make scap/whatever be the thing that deploys beta cluster?
  • MUST use rolling deploys: not all nodes at once to avoid taking down the cluster
  • SHOULD allow non-roots to upgrade / downgrade / restart individual nodes for testing (ex: permissions by group membership)
  • SHOULD NOT create much additional overhead over normal debian packaging
  • SHOULD handle dependencies with system packages/libraries and other packages cleanly (including downgrades)
  • SHOULD be able to split packaging further (separate packages for library dependencies for example) -- support n versioned dependencies
  • SHOULD use known systems / avoid "unnecessary" complexity wherever possible
  • SHOULD make it easy for third parties to track regular (non-security) deployed code / be directly usable for third parties (Vagrant, labs, hosted VMs etc)
  • SHOULD support timely third-party security upgrades with systems like unattended-upgrades once the security release is published

ES deploys

Deploys are rare, less than once a month. Deploys are time consuming due to rolling restarts of a data store. We don't have many folks with the expertise to recover from unexpected failure. I think of it more like MySQL then like MW or Parsoid.

  • MUST allow user to force Elasticsearch to be installed at the version on the rest of the Elasticsearch cluster
    • work around reprepo bug :)
  • MUST configure Elasticsearch settings
    • yaml files be stuff'd
  • MUST be able to provision a new server without restarting current servers
    • targetted deploys, canary deploys
  • MUST support deploying Elasticsearch plugins
  • MUST support ES plugin presence assurance
  • MUST verify that the Elasticsearch plugins are genuine (hash or something)
  • MUST NOT upgrade Elasticsearch without manual intervention
    • no "require => latest"
  • SHOULD be compatible with Elasticsearch's debian packages
  • SHOULD coordinate versions of Elasticsearch plugins deployed so they are compatible with Elasticsearch server
    • plugin compatibility matrix?
  • SHOULD NOT allow plugin undeployment. That'd break things.
  • NONISSUE locks aren't important because very few people are conserned with upgrading Elasticsearch and the upgrades themselves are pretty rare
This article is issued from Mediawiki. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.