Cloud Native DevOps: Migrating from Monoliths to Microservices
Contents:
Introduction
Overview
Donations and Ethics Disclaimer
Why PronK8S
Dedication
License
Continous Integration & Continuous Delivery
Version Control and Branching Strategies
Anarchy: One Branch to Rule Them All
Developer Branches
Feature Branches
Release Branches
Platforms
GitHub & GitHub Actions
GitLab
Jenkins
Circle CI
Automation & Test Driven Development
Pipelines
Caching Artifacts
Triggering Downstream Jobs
Nightly/weekend automation tests
Security Concerns: Don’t Leak Credentials
Run-time Variables
Keyword Masking and Script Filtering
Configuration Management & Infrastructure as Code
Declarative Versus Imperative Models
GitOps and Versioning Infrastructure Changes
Rolling Upgrades
Backup and Restore Operations
Panic Button
Tooling
Ansible
Terraform
DevOps Build Patterns
Bare Metal
Virtual Machines
History and Hypervisors
Single VM with Vagrant
Containers
Single Container with Docker
Multiple Containers with Docker
Nested Containers with Docker-in-Docker
Advanced Example: Single Container with Docker
Cluster Orchestration with Kubernetes (K8S)
Kubernetes in Docker (KIND)
Best Practises & Security Concerns
Privileged Containers & Rootless Containers
Using dockerignore for Security and Image Size Reduction
Reducing Image Size and Number of Layers with apt
Credential Leaks - Don’t Embed Credentials
Verify Downloaded Packages via Checksums
Additional Reading
Architecture Design Patterns
General Structure
IPC
Storage
Logging
Sidecars
Debugging, Core Dumps, etc.
Testing Strategies
Pre-amble: Containers & Clusters
Unit Tests
API Tests
Internal APIs and Unit Testing
Public-Facing API Testing
Feature Tests
Regression Tests
Fuzz Tests
Negative Testing
Mocks and Simulated Tests
Chaos Testing: Break Everything to Improve your App
Testing in Production
The Historical Joke
The Reality of CICD and Cloud Environments
Regression Tests & Statistics
Quick Tests & Gate Keeping Code Reviews
Hypothetical Builds for Downstream Projects
Soak Tests: Finding Obscure Bugs
End-to-End Tests
Testing in Production: a Misnomer?
The Necessity of GitOps
Rolling Upgrades & Recovery
Documentation
Overview: Keeping Documentation Current
Markup-based Approaches
Read the Docs: rST + Sphinx
Markdown
Diagrams
PlantUML/PUML
Mermaid/MMD
Graphical and WYSIWYG Editors
Bridging the Gap: GUIs for Markup Languages
Google docs
Security
Container Scanning
Dependencies and Supply Chain Attacks
Poetry
Snyk
Common Vulnerabilities and Exposures (CVEs)
Reporting
Documenting
Automatic Testing
Practical Project: Raspberry Pi DevOps Cluster
Build Pattern Implementations: Language-specific Boilerplate Examples
Python 3.x
Go/Golang
Conclusion
References
Glossary
Cloud Native DevOps: Migrating from Monoliths to Microservices
»
Index
Index
A
|
C
|
D
|
E
|
F
|
G
|
I
|
K
|
M
|
O
|
P
|
Q
|
R
|
S
|
T
|
U
|
V
A
API
AWS
Azure
C
CD
CI
CI/CD
CNCF
CPU
CWD
D
DIND
E
EC2
F
FOSS
G
GCP
I
IAC
ID
IPC
IT
ITS
K
K8S
KIND
M
MAC
O
OS
P
PC
PWD
Q
QA
R
RAM
S
SSH
T
TAG
TOC
U
UDS
UID
USB
V
VM
VMM