preface |
|
xi | |
acknowledgments |
|
xii | |
About this book |
|
xiii | |
About the authors |
|
xviii | |
About the cover illustration |
|
xx | |
|
|
1 | (52) |
|
|
3 | (17) |
|
|
4 | (5) |
|
|
4 | (2) |
|
|
6 | (1) |
|
|
7 | (2) |
|
1.2 Developer benefits of GitOps |
|
|
9 | (4) |
|
Infrastructure as code 9m Self-service |
|
|
10 | (1) |
|
|
11 | (1) |
|
|
12 | (1) |
|
1.3 Operational benefits of GitOps |
|
|
13 | (7) |
|
|
13 | (2) |
|
|
15 | (1) |
|
Auditability and compliance |
|
|
16 | (3) |
|
|
19 | (1) |
|
|
20 | (33) |
|
2.1 Kubernetes introduction |
|
|
20 | (10) |
|
|
21 | (1) |
|
Other container orchestrators |
|
|
22 | (1) |
|
|
22 | (3) |
|
|
25 | (5) |
|
2.2 Declarative vs. imperative object management |
|
|
30 | (7) |
|
How declarative configuration works |
|
|
34 | (3) |
|
2.3 Controller architecture |
|
|
37 | (7) |
|
|
37 | (1) |
|
|
38 | (2) |
|
|
40 | (4) |
|
|
44 | (1) |
|
2.5 Getting started with CI/CD |
|
|
44 | (9) |
|
|
45 | (2) |
|
Continuous integration pipeline |
|
|
47 | (6) |
|
Part 2 Patterns and processes |
|
|
53 | (186) |
|
|
55 | (31) |
|
3.1 Introduction to environment management |
|
|
56 | (12) |
|
Components of an environment |
|
|
57 | (2) |
|
|
59 | (5) |
|
|
64 | (3) |
|
Preprod and prod clusters |
|
|
67 | (1) |
|
|
68 | (3) |
|
Single branch (multiple directories) |
|
|
69 | (1) |
|
|
70 | (1) |
|
|
70 | (1) |
|
3.3 Configuration management |
|
|
71 | (12) |
|
|
72 | (4) |
|
|
76 | (3) |
|
|
79 | (4) |
|
Configuration management summary |
|
|
83 | (1) |
|
3.4 Durable vs. ephemeral environments |
|
|
83 | (3) |
|
|
86 | (23) |
|
4.1 Stages in CI/CD pipelines |
|
|
86 | (12) |
|
GitOps continuous integration |
|
|
88 | (6) |
|
GitOps continuous delivery |
|
|
94 | (4) |
|
|
98 | (4) |
|
Code vs. manifest vs. app config |
|
|
98 | (1) |
|
|
99 | (2) |
|
|
101 | (1) |
|
|
102 | (1) |
|
|
102 | (7) |
|
|
103 | (3) |
|
|
106 | (3) |
|
|
109 | (39) |
|
|
110 | (13) |
|
Why ReplicaSet is not a good fit for GitOps |
|
|
111 | (3) |
|
How Deployment works with ReplicaSets |
|
|
114 | (6) |
|
|
120 | (2) |
|
Configuring minikube for other strategies |
|
|
122 | (1) |
|
|
123 | (10) |
|
Blue-green with Deployment |
|
|
125 | (5) |
|
Blue-green with Argo Rollouts |
|
|
130 | (3) |
|
|
133 | (7) |
|
|
134 | (4) |
|
Canary with Argo Rollouts |
|
|
138 | (2) |
|
|
140 | (8) |
|
Progressive delivery with Argo Rollouts |
|
|
140 | (8) |
|
6 Access control and security |
|
|
148 | (28) |
|
6.1 Introduction to access control |
|
|
149 | (6) |
|
|
149 | (1) |
|
|
150 | (3) |
|
|
153 | (2) |
|
|
155 | (16) |
|
|
155 | (8) |
|
|
163 | (5) |
|
|
168 | (3) |
|
|
171 | (2) |
|
|
171 | (1) |
|
|
172 | (1) |
|
|
172 | (1) |
|
|
173 | (3) |
|
Preventing image pull from untrusted registries |
|
|
173 | (1) |
|
Cluster-level resources in a Git repository |
|
|
174 | (2) |
|
|
176 | (27) |
|
|
177 | (4) |
|
|
177 | (1) |
|
|
178 | (3) |
|
|
181 | (1) |
|
|
181 | (1) |
|
|
181 | (1) |
|
No granular (file-level) access control |
|
|
181 | (1) |
|
|
181 | (1) |
|
|
182 | (1) |
|
7.3 Secrets management strategies |
|
|
182 | (5) |
|
|
182 | (1) |
|
Baking Secrets into the container image |
|
|
182 | (1) |
|
|
183 | (1) |
|
External Secrets management systems |
|
|
184 | (1) |
|
Encrypting Secrets in Git |
|
|
185 | (1) |
|
|
186 | (1) |
|
|
187 | (16) |
|
|
187 | (3) |
|
Vault Agent Sidecar Injector |
|
|
190 | (4) |
|
|
194 | (4) |
|
Kustomize Secret generator plugin |
|
|
198 | (5) |
|
|
203 | (36) |
|
8.1 What is observability? |
|
|
204 | (15) |
|
|
205 | (4) |
|
|
209 | (3) |
|
|
212 | (5) |
|
|
217 | (2) |
|
Importance of observability in GitOps |
|
|
219 | (1) |
|
|
219 | (8) |
|
|
220 | (4) |
|
|
224 | (1) |
|
Application monitoring and alerting |
|
|
225 | (2) |
|
|
227 | (12) |
|
|
227 | (1) |
|
|
228 | (4) |
|
|
232 | (2) |
|
|
234 | (5) |
|
|
239 | (60) |
|
|
241 | (26) |
|
|
241 | (8) |
|
|
242 | (1) |
|
|
243 | (1) |
|
|
244 | (2) |
|
|
246 | (3) |
|
9.2 Deploy your first application |
|
|
249 | (4) |
|
Deploying the first application |
|
|
249 | (2) |
|
Inspect the application using the user interface |
|
|
251 | (2) |
|
9.3 Deep dive into Argo CD features |
|
|
253 | (4) |
|
|
253 | (1) |
|
|
254 | (3) |
|
Postdeployment verification |
|
|
257 | (1) |
|
|
257 | (10) |
|
|
258 | (3) |
|
|
261 | (2) |
|
|
263 | (4) |
|
|
267 | (17) |
|
|
267 | (2) |
|
10.2 Exploring Prow, Jenkins X pipeline operator, and Tekton |
|
|
269 | (4) |
|
10.3 Importing projects into Jenkins X |
|
|
273 | (11) |
|
|
274 | (7) |
|
Promoting a release to the production environment |
|
|
281 | (3) |
|
|
284 | (15) |
|
|
284 | (5) |
|
|
285 | (1) |
|
|
286 | (2) |
|
|
288 | (1) |
|
11.2 Simple application deployment |
|
|
289 | (7) |
|
Deploying the first application |
|
|
289 | (1) |
|
Observing application state |
|
|
290 | (1) |
|
Upgrading the deployment image |
|
|
291 | (1) |
|
Using Kustomize for manifest generation |
|
|
292 | (2) |
|
Securing deployment using GPG |
|
|
294 | (2) |
|
11.3 Multitenancy with Flux |
|
|
296 | (3) |
Appendix A Setting up a test Kubernetes cluster |
|
299 | (3) |
Appendix B Setting up GitOps tools |
|
302 | (11) |
Appendix C Configuring GPG key |
|
313 | (2) |
index |
|
315 | |