Appendix B: What Is a Package Manager?
If Helm is "the package manager for Kubernetes", we need to have a common explanation of what we mean by "package manager".
Helm's notion of package management is informed by operating system package managers such as:
It is important to not overzealously compare Helm to programming language library package managers, as such systems have a fundamentally different goal.
Package managers such as Apt, Homebrew, and RPM provide the following services:
- They define a package format
- They define a package repository architecture
- They define a security model (signing, verification, etc)
- They specify a programming langugage (or languages) to be used for management logic (e.g. shell scripts, Ruby)
- They manage the installation, upgrade, and deletion of a package
- They provide dependency resolution features and version management
- They expose configuration options that the user may override
- They start services (e.g. when installing a database, the database is started) and often provide tooling for administrators to manage those services (e.g. systemd/upstart/sysV init scripts)
- They provide tools to search, list, and discover packages
- They implement (or make it easy to implement) environment-specific (os, processor, distro) optimizations
- They provide an opinion as to how to best construct and maintain packages
- They surface documentation (typically via output during installation)
Package managers tend to involve all of these because it is important in package management to keep external dependencies to a minimum.
Consequently, if Helm is to fit into such a paradigm, it is natural that Helm will provide at least most, if not all of these.
Helm is not a configuration management tool (such as Chef or Puppet). Helm does provide certain features of such systems, though. Helm's templating and configuration model is a common feature of configuration managers (and also of package managers).