Infrastructure as Software

From HandWiki
Revision as of 18:29, 5 October 2021 by imported>Importwiki (import)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)



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 different than Infrastructure as Code in it's preference for using Turing Complete programing languages to compute the logical systems used to manage infrastructure.[2]

Overview

IaS attempts to pull the decision making process out of the minds of an operator, and encapsulate it into software at runtime. 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

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

Software development can come at the cost of time and commitment.[10]

There are notable challenges (particularly high cost) in employing engineers capable of creating and managing IaS.[11]

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. "The Kubernetes Authors" (2021). "Controllers". "The Linux Foundation". https://github.com/kubernetes/website/blob/main/content/en/docs/concepts/architecture/controller.md. 
  4. "The Kubernetes Authors" (2021). "What is Ingress?". "The Linux Foundation". https://kubernetes.io/docs/concepts/services-networking/ingress/. "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". "The Linux Foundation". https://kubernetes.io/docs/concepts/services-networking/service/. "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". "VMware, Inc". https://tanzu.vmware.com/content/blog/the-what-and-the-why-of-the-cluster-api. "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". "MediaOps, Inc". https://containerjournal.com/features/introduction-to-the-kubernetes-cluster-api/. "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". Kris Nóva. https://github.com/kris-nova/naml#features. "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)". Kris Nóva. https://nivenly.com/lib/2021-08-23-package-management/. "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". "Mansueto Ventures". https://www.inc.com/adam-fridman/the-massive-downside-of-agile-software-development.html. "This might ensure the product meets user expectations, but is onerous and time-consuming. This demands more time and energy of everyone involved." 
  11. Alison DeNisco Rayome (June 29, 2018). "The 5 most difficult things about hiring developers". TechnologyAdvice. https://www.techrepublic.com/article/the-5-most-difficult-things-about-hiring-developers/. "Lack of a formal software engineering education tops the list of developer hiring challenges for managers by far"