Infrastructure as Software

Infrastructure as Software (IaS) is the operational practice of using a software development processes to provision, manage, and configure hardware in cloud computing environments or data centers.[1] Infrastructure as Software is notably different than Infrastructure as Code in its preference for using generic Turing Complete programming languages to compute logical infrastructure management systems in favor of static markup languages, or proprietary code.[2]

Overview

IaS attempts to pull the decision making process out of the minds of an operator, and encapsulate it into software using traditional programming languages, workflows, and release patterns. At runtime IaS is responsible for reconciling infrastructure for a specific use case. Kubernetes controllers and their subsequent reconciliation loops[3] is one example of encapsulating logical decision making with software. Specifically, the Kubernetes Service and Ingress objects are able to mutate and reconcile infrastructure (Load Balancers, Proxy Servers, etc) based on a declarative state.[4][5] The software will reconcile infrastructure at runtime. This is most notable in the software's ability to create, destroy, and mutate infrastructure without intervention from an operator.

Advantages

IaS can provide an opportunity for engineers to abstract complexity to simplicity for specific use cases. The Kubernetes Cluster API project uses IaS to address its goal[6] of providing a common abstraction for multiple infrastructure environments known as cloud providers while bootstrapping and managing a Kubernetes cluster. The advantage to the Cluster API approach with IaS is the project's ability to offer common abstractions of otherwise complex infrastructure concerns.[7]

IaS may also imply the shift from operational style delivery of infrastructure to software release style seen with various software development processes such as feature-driven development and time-based agile development.

A notable advantage of IaS compared to Infrastructure as Code (IaC) is the ability to offer tests in the same language that is used to manage the infrastructure software. A Kubernetes open source tool Naml Ain't Markup Language (naml) takes advantage of IaS by adding a framework for engineers to write unit tests for their infrastructure in the Go programming language which is the same language used to manage the Kubernetes applications.[8][9]

Disadvantages

The ability to abstract complexity comes at the cost of a maintenance burden. Software development takes time.[10] Designing and maintaining IaS can often take a greater initial time investment than mutating infrastructure directly using methodologies such as IaC. In order for the investment into IaS to return a net positive outcome, special considerations need to be made to understand how much time will be saved with IaS and subsequent testing such that it can be compared to the cost of investment.[11]

Hiring engineers capable of maintaining IaS can be challenging. There is a high cost associated with any software engineering role.[12] Furthermore, finding software engineers who are capable of, and interested in, working with infrastructure can be difficult.

The bootstrapping problem

Developing and Debugging IaS can be difficult. In many cases, IaS is dependent on the infrastructure it attempts to manage. The Bootstrapping Problem[13] is a paradoxical situation in which valid IaS has the capability of bootstrapping infrastructure, but no infrastructure in-place in which to execute a bootstrap program. The Kubernetes Cluster API project has addressed this problem by prescribing a Bootstrap Provider pattern in which an ephemeral Kubernetes cluster can be set up and used to serve as this initial infrastructure component.[14]

References

  1. Nóva, Kris; Garrison, Justin (2018). Cloud Native Infrastructure. O´Reilly Media, Inc. p. 36. ISBN 978-1491984307.
  2. "Ned Bellavance and Ethan Banks" (August 18, 2021). ""Day Two Cloud 111: Infrastructure As Software With Kris Nóva"". "packetpushers.net/podcast" (Podcast). "Packet Pushers Interactive, LLC". Retrieved October 1, 2021.
  3. "Controllers". "kubernetes.io/docs/concepts/architecture/controller/". "The Linux Foundation". 2021. Retrieved October 1, 2021.
  4. "What is Ingress?". Kubernetes Docs. The Linux Foundation. 2021. Retrieved October 1, 2021. An Ingress controller is responsible for fulfilling the Ingress, usually with a load balancer, though it may also configure your edge router or additional frontends to help handle the traffic.
  5. "The Kubernetes Authors" (2021). "Publishing Services". Kubernetes Docs. The Linux Foundation. Retrieved October 1, 2021. LoadBalancer: Exposes the Service externally using a cloud provider's load balancer. NodePort and ClusterIP Services, to which the external load balancer routes, are automatically created.
  6. "Timothy St. Clair" (March 14, 2019). "The What and the Why of the Cluster API". tanzu.vmware.com/content/blog/the-what-and-the-why-of-the-cluster-api. "VMware, Inc". Retrieved October 1, 2021. To the extent possible, we should separate state that is environment-specific from environment-agnostic. However, we still want the design to be able to utilize environment-specific functionality, or else it likely won’t gain traction in favor of other tooling that is more powerful.
  7. Bill Doerrfeld (August 3, 2021). "Introduction to the Kubernetes Cluster API". containerjournal.com/features/introduction-to-the-kubernetes-cluster-api/. MediaOps, Inc. Retrieved October 1, 2021. So, how is Cluster API differentiated from other multi-cluster management tools? Whereas tools like kops are designed around a specific cloud vendor, Cluster API is more agnostic.
  8. Kris Nóva (2021). "Not Another Markup Language". github.com/kris-nova/naml. Kris Nóva. Retrieved October 1, 2021. Write real tests 🤓 using Go to check and validate your deployments.
  9. Kris Nóva (August 23, 2021). "Package Management in Kubernetes (Go vs YAML)". nivenly.com. Kris Nóva. Retrieved October 1, 2021. Finding 6: Unit tests, and integration tests are virtually impossible with text templating.
  10. Fridman, Adam (September 21, 2021). "The Massive Downside of Agile Software Development". inc.com/adam-fridman/the-massive-downside-of-agile-software-development.html. Mansueto Ventures. Retrieved October 1, 2021. This might ensure the product meets user expectations, but is onerous and time-consuming. This demands more time and energy of everyone involved.
  11. Nóva, Kris (April 23, 2018). Moving an enterprise monolith to Kubernetes (Speech). DevOpsDays Rockies. Denver, CO. Retrieved October 6, 2021.
  12. Alison DeNisco Rayome (June 29, 2018). "The 5 most difficult things about hiring developers". techrepublic.com/article/the-5-most-difficult-things-about-hiring-developers/. TechnologyAdvice. Retrieved October 1, 2021. Lack of a formal software engineering education tops the list of developer hiring challenges for managers by far
  13. Nóva, Kris; Garrison, Justin (2018). Cloud Native Infrastructure. O´Reilly Media, Inc. p. 44. ISBN 978-1491984307.
  14. "Concepts - Bootstrap Provider - The Cluster API Book". The Cluster API Book. The Linux Foundation. 2021. Retrieved October 6, 2021. The Bootstrap Provider is responsible for ...initializing the control plane, and gating the creation of other nodes until it is complete
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.