0% found this document useful (0 votes)
5 views

Deploy Container Applications Using Kubernetes: Implementations with microk8s and AWS EKS 1st Edition Shiva Subramanian download

The document is a comprehensive guide on deploying container applications using Kubernetes, specifically with microk8s and AWS EKS. It covers various topics including container basics, Kubernetes concepts, deployment strategies, and scaling applications. The book is authored by Shiva Subramanian and includes practical examples and exercises for readers to follow.

Uploaded by

gretrytaivez
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views

Deploy Container Applications Using Kubernetes: Implementations with microk8s and AWS EKS 1st Edition Shiva Subramanian download

The document is a comprehensive guide on deploying container applications using Kubernetes, specifically with microk8s and AWS EKS. It covers various topics including container basics, Kubernetes concepts, deployment strategies, and scaling applications. The book is authored by Shiva Subramanian and includes practical examples and exercises for readers to follow.

Uploaded by

gretrytaivez
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 50

Deploy Container Applications Using Kubernetes:

Implementations with microk8s and AWS EKS 1st


Edition Shiva Subramanian download

https://ebookmeta.com/product/deploy-container-applications-
using-kubernetes-implementations-with-microk8s-and-aws-eks-1st-
edition-shiva-subramanian/

Download more ebook from https://ebookmeta.com


We believe these products will be a great fit for you. Click
the link to download now, or visit ebookmeta.com
to discover even more!

Learning AWS Design build and deploy responsive


applications using AWS cloud components 2nd Edition
Aurobindo Sarkar

https://ebookmeta.com/product/learning-aws-design-build-and-
deploy-responsive-applications-using-aws-cloud-components-2nd-
edition-aurobindo-sarkar/

Programming AWS Lambda Build and Deploy Serverless


Applications with Java 1st Edition John Chapin

https://ebookmeta.com/product/programming-aws-lambda-build-and-
deploy-serverless-applications-with-java-1st-edition-john-chapin/

Kubernetes Native Development: Develop, Build, Deploy,


and Run Applications on Kubernetes 1st Edition Benjamin
Schmeling

https://ebookmeta.com/product/kubernetes-native-development-
develop-build-deploy-and-run-applications-on-kubernetes-1st-
edition-benjamin-schmeling/

A Beginners Guide to Python 3 Programming 2nd Edition


John Hunt

https://ebookmeta.com/product/a-beginners-guide-to-
python-3-programming-2nd-edition-john-hunt/
Narrative of the Life of Frederick Douglass an American
Slave Written by Himself Frederick Douglass (Editor)

https://ebookmeta.com/product/narrative-of-the-life-of-frederick-
douglass-an-american-slave-written-by-himself-frederick-douglass-
editor/

Flourish The Blooming Courts 3 1st Edition Kendra


Moreno Poppy Woods

https://ebookmeta.com/product/flourish-the-blooming-courts-3-1st-
edition-kendra-moreno-poppy-woods/

Data Wrangling with JavaScript 1st Edition Ashley Davis

https://ebookmeta.com/product/data-wrangling-with-javascript-1st-
edition-ashley-davis/

A Social and Solidarity Economy The Ukrainian Choice


1st Edition Anton S. Filipenko

https://ebookmeta.com/product/a-social-and-solidarity-economy-
the-ukrainian-choice-1st-edition-anton-s-filipenko/

Cam s Walk Margo Gates

https://ebookmeta.com/product/cam-s-walk-margo-gates/
Paradoxical Right-Wing Sexual Politics in Europe 1st
Edition Cornelia Möser

https://ebookmeta.com/product/paradoxical-right-wing-sexual-
politics-in-europe-1st-edition-cornelia-moser/
Deploy Container
Applications
Using Kubernetes
Implementations with microk8s
and AWS EKS

Shiva Subramanian
Deploy Container
Applications Using
Kubernetes
Implementations with microk8s
and AWS EKS

Shiva Subramanian
Deploy Container Applications Using Kubernetes: Implementations with microk8s
and AWS EKS
Shiva Subramanian
Georgia, GA, USA

ISBN-13 (pbk): 978-1-4842-9276-1 ISBN-13 (electronic): 978-1-4842-9277-8


https://doi.org/10.1007/978-1-4842-9277-8

Copyright © 2023 by Shiva Subramanian


This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the
material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation,
broadcasting, reproduction on microfilms or in any other physical way, and transmission or information
storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now
known or hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with
every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an
editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the
trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not
identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to
proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of publication,
neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or
omissions that may be made. The publisher makes no warranty, express or implied, with respect to the
material contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Divya Modi
Development Editor: James Markham
Coordinating Editor: Divya Modi
Cover designed by eStudioCalamar
Cover image by Freepik (www.freepik.com)
Distributed to the book trade worldwide by Apress Media, LLC, 1 New York Plaza, New York, NY 10004,
U.S.A. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail orders-ny@springer-sbm.com, or visit www.
springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner) is Springer Science +
Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware corporation.
For information on translations, please e-mail booktranslations@springernature.com; for reprint,
paperback, or audio rights, please e-mail bookpermissions@springernature.com.
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and
licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales
web page at http://www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is available to
readers on GitHub (https://github.com/Apress). For more detailed information, please visit https://www.
apress.com/gp/services/source-code.
Paper in this product is recyclable
Table of Contents
About the Author����������������������������������������������������������������������������������������������������� ix

Introduction������������������������������������������������������������������������������������������������������������� xi

Chapter 1: From VMs to Containers�������������������������������������������������������������������������� 1


Dependency Hell��������������������������������������������������������������������������������������������������������������������������� 1
Efficiency and Cost Control����������������������������������������������������������������������������������������������������������� 2
The VM Way����������������������������������������������������������������������������������������������������������������������������������� 2
Enter Containers��������������������������������������������������������������������������������������������������������������������������� 7
Summary�������������������������������������������������������������������������������������������������������������������������������������� 9

Chapter 2: Container Hello-World��������������������������������������������������������������������������� 11


Docker Technology���������������������������������������������������������������������������������������������������������������������� 11
Setting Up Our Workstation for Docker��������������������������������������������������������������������������������������� 11
Confirming Docker Service Is Running��������������������������������������������������������������������������������������� 13
Setting Up Our User for Use with Docker������������������������������������������������������������������������������������ 15
Container Hello-World����������������������������������������������������������������������������������������������������������������� 16
Summary������������������������������������������������������������������������������������������������������������������������������������ 20
Your Turn������������������������������������������������������������������������������������������������������������������������������������� 20

Chapter 3: Container Basics Using Docker������������������������������������������������������������� 21


Finding Prebuilt Containers��������������������������������������������������������������������������������������������������������� 21
Running the Image We Found����������������������������������������������������������������������������������������������������� 27
Exposing Ports (Services) the Pod Has to Offer��������������������������������������������������������������������� 31
Testing the Container������������������������������������������������������������������������������������������������������������������ 33
Summary������������������������������������������������������������������������������������������������������������������������������������ 38
Your Turn������������������������������������������������������������������������������������������������������������������������������������� 38

iii
Table of Contents

Chapter 4: Building Our First Container Image������������������������������������������������������� 39


Building Our Container Image����������������������������������������������������������������������������������������������������� 39
A Containerized Base OS������������������������������������������������������������������������������������������������������������ 40
Incorporating nginx Packages����������������������������������������������������������������������������������������������������� 44
Incorporating Our Custom Content (index.html)�������������������������������������������������������������������������� 48
Dockerfile That Puts Everything Together����������������������������������������������������������������������������������� 48
Building the Image���������������������������������������������������������������������������������������������������������������� 50
Running Our Image���������������������������������������������������������������������������������������������������������������� 52
Testing Our Image����������������������������������������������������������������������������������������������������������������������� 54
Incorporating Our index.html into the Image������������������������������������������������������������������������� 54
Tagging the Container Image������������������������������������������������������������������������������������������������������ 57
Summary������������������������������������������������������������������������������������������������������������������������������������ 59
Your Turn������������������������������������������������������������������������������������������������������������������������������������� 60

Chapter 5: Introduction to Kubernetes������������������������������������������������������������������� 61


Kubernetes and Its Relationship to Docker��������������������������������������������������������������������������������� 61
Distributions�������������������������������������������������������������������������������������������������������������������������� 62
Basic Concepts��������������������������������������������������������������������������������������������������������������������������� 62
Nodes������������������������������������������������������������������������������������������������������������������������������������ 62
Pods��������������������������������������������������������������������������������������������������������������������������������������� 63
Namespaces�������������������������������������������������������������������������������������������������������������������������� 63
Service���������������������������������������������������������������������������������������������������������������������������������� 63
CRI����������������������������������������������������������������������������������������������������������������������������������������� 63
Kubelet���������������������������������������������������������������������������������������������������������������������������������� 63
Setting Up the Workstation��������������������������������������������������������������������������������������������������������� 64
Summary������������������������������������������������������������������������������������������������������������������������������������ 67
Your Turn������������������������������������������������������������������������������������������������������������������������������������� 68

Chapter 6: Deploying Our First App in Kubernetes������������������������������������������������� 69


Running a Pod – Public nginx����������������������������������������������������������������������������������������������������� 69
Importing a Container Image onto microk8s������������������������������������������������������������������������������� 72

iv
Table of Contents

Running a Pod – Our nginx Image���������������������������������������������������������������������������������������������� 73


Exposing the Service and Testing Our Pod’s Service (Web Server)�������������������������������������������� 74
Summary������������������������������������������������������������������������������������������������������������������������������������ 79
Your Turn������������������������������������������������������������������������������������������������������������������������������������� 79

Chapter 7: Deployment Files and Automation�������������������������������������������������������� 81


Deployment File – kind: Deployment������������������������������������������������������������������������������������������ 81
Deployment File – kind: Service������������������������������������������������������������������������������������������������� 90
Summary������������������������������������������������������������������������������������������������������������������������������������ 94
Your Turn������������������������������������������������������������������������������������������������������������������������������������� 94

Chapter 8: A Closer Look at Kubernetes����������������������������������������������������������������� 95


Clusters��������������������������������������������������������������������������������������������������������������������������������������� 95
Contexts������������������������������������������������������������������������������������������������������������������������������������ 101
Nodes���������������������������������������������������������������������������������������������������������������������������������������� 105
Draining a Node������������������������������������������������������������������������������������������������������������������������ 108
Namespaces����������������������������������������������������������������������������������������������������������������������������� 110
Creating a New Namespace������������������������������������������������������������������������������������������������ 115
Deleting a Namespace�������������������������������������������������������������������������������������������������������� 115
Pods������������������������������������������������������������������������������������������������������������������������������������������ 123
Running Commands Inside a Pod���������������������������������������������������������������������������������������� 123
Pod Logs������������������������������������������������������������������������������������������������������������������������������ 126
Attach to a Container Process��������������������������������������������������������������������������������������������� 133
Port-Forward����������������������������������������������������������������������������������������������������������������������� 134
Summary���������������������������������������������������������������������������������������������������������������������������������� 136
Your Turn����������������������������������������������������������������������������������������������������������������������������������� 136

Chapter 9: Scaling the Deployment���������������������������������������������������������������������� 137


ReplicaSets������������������������������������������������������������������������������������������������������������������������������� 137
ReplicaSet and Their Usage������������������������������������������������������������������������������������������������� 137
What Are Replicas?������������������������������������������������������������������������������������������������������������� 139
Summary���������������������������������������������������������������������������������������������������������������������������������� 152

v
Table of Contents

Chapter 10: Scaling Compute Nodes�������������������������������������������������������������������� 153


Node Management�������������������������������������������������������������������������������������������������������������������� 153
Summary���������������������������������������������������������������������������������������������������������������������������������� 170

Chapter 11: Kubernetes RBAC������������������������������������������������������������������������������ 171


Roles����������������������������������������������������������������������������������������������������������������������������������������� 174
Summary���������������������������������������������������������������������������������������������������������������������������������� 195

Chapter 12: Artifact Repository and Container Registry�������������������������������������� 197


What Is an Artifact Repository?������������������������������������������������������������������������������������������������� 197
Different Options for Storage and Retrieval of Containers�������������������������������������������������� 198
Docker Hub������������������������������������������������������������������������������������������������������������������������������� 199
AWS Elastic Container Registry (ECR)��������������������������������������������������������������������������������������� 202
JFrog Container Registry���������������������������������������������������������������������������������������������������������� 214
Summary���������������������������������������������������������������������������������������������������������������������������������� 222

Chapter 13: Elastic Kubernetes Service from AWS����������������������������������������������� 223


Getting Started�������������������������������������������������������������������������������������������������������������������������� 223
Creating the IAM User��������������������������������������������������������������������������������������������������������������� 224
Elastic Kubernetes Service������������������������������������������������������������������������������������������������������� 235
EKS Landing Page��������������������������������������������������������������������������������������������������������������� 236
Create EKS Cluster�������������������������������������������������������������������������������������������������������������� 238
Create IAM Role for Cluster Service������������������������������������������������������������������������������������ 240
Adding IAM PassRole to Cluster User���������������������������������������������������������������������������������� 255
Tour of Our EKS Cluster������������������������������������������������������������������������������������������������������� 260
Looking at Pod Details��������������������������������������������������������������������������������������������������������� 271
Adding a Compute to the Cluster���������������������������������������������������������������������������������������������� 273
Add Node Group������������������������������������������������������������������������������������������������������������������ 273
Creating IAM Role for Node Group��������������������������������������������������������������������������������������� 275
Summary���������������������������������������������������������������������������������������������������������������������������������� 286

vi
Table of Contents

Chapter 14: Operating the EKS Cluster����������������������������������������������������������������� 287


Creating a New OS User for Managing AWS EKS���������������������������������������������������������������������� 287
Installing and Configuring AWS CLI v2�������������������������������������������������������������������������������������� 288
Installing and Configuring kubectl Program������������������������������������������������������������������������������ 288
Installing and Configuring eksctl Program�������������������������������������������������������������������������������� 290
Configuring kubectl to Work with AWS EKS������������������������������������������������������������������������������ 291
Deploying Your First Pod in EKS������������������������������������������������������������������������������������������������ 294
Updating Cluster Security Group to Allow Service Access�������������������������������������������������� 297
EKS RBAC and AWS IAM������������������������������������������������������������������������������������������������������������ 300
Creating Three Classes of IAM Users����������������������������������������������������������������������������������� 300
Granting EKS ALL Rights to grp-k8s-admins����������������������������������������������������������������������� 302
Mapping IAM User/Group to Cluster Role(s)������������������������������������������������������������������������ 306
DevOps User Setup and Mapping���������������������������������������������������������������������������������������� 311
Read-Only User Setup, RoleBinding, and Testing���������������������������������������������������������������� 322
Summary���������������������������������������������������������������������������������������������������������������������������������� 327

Chapter 15: Data Persistence in EKS�������������������������������������������������������������������� 329


Storage Volumes for Kubernetes���������������������������������������������������������������������������������������������� 329
Demonstrating Lack of Persistence Inside the Pods����������������������������������������������������������������� 329
Persistent Volumes in microk8s Kubernetes Cluster���������������������������������������������������������������� 335
Creating a PV����������������������������������������������������������������������������������������������������������������������� 335
Creating a PVC��������������������������������������������������������������������������������������������������������������������� 339
Placing and Serving nginx Content from the PVC-Backed Filesystem������������������������������� 344
Releasing the PVC and PV��������������������������������������������������������������������������������������������������� 351
Persistent Volumes in AWS EKS������������������������������������������������������������������������������������������������ 352
Testing the EFS with Our EKS Cluster��������������������������������������������������������������������������������������� 371
Using EFS to Serve nginx Content��������������������������������������������������������������������������������������������� 376
Summary���������������������������������������������������������������������������������������������������������������������������������� 380

vii
Table of Contents

Chapter 16: Networking and Ingress�������������������������������������������������������������������� 383


The Problem with Exposing Services via NodePort������������������������������������������������������������������ 383
The Solution: Ingress and LoadBalancer����������������������������������������������������������������������������������� 388
Connectivity Testing on the microk8s Services������������������������������������������������������������������� 389
Connecting via NodePort����������������������������������������������������������������������������������������������������� 391
Connecting from Inside the Pod������������������������������������������������������������������������������������������ 393
Ingress on microk8s������������������������������������������������������������������������������������������������������������ 395
Ingress on AWS EKS������������������������������������������������������������������������������������������������������������������ 400
Deploying an Ingress Controller for EKS����������������������������������������������������������������������������������� 407
Summary���������������������������������������������������������������������������������������������������������������������������������� 415

Chapter 17: Kubernetes Tools������������������������������������������������������������������������������� 417


K9S�������������������������������������������������������������������������������������������������������������������������������������������� 417
Open Lens for Kubernetes�������������������������������������������������������������������������������������������������������� 423
HELM����������������������������������������������������������������������������������������������������������������������������������������� 429
HELM3 Basics���������������������������������������������������������������������������������������������������������������������� 429
Deploying postgresql Using HELM3 in microk8s����������������������������������������������������������������� 431
Testing PGSQL Deployment������������������������������������������������������������������������������������������������� 434
CNCF����������������������������������������������������������������������������������������������������������������������������������������� 437
More Tools��������������������������������������������������������������������������������������������������������������������������������� 438
Summary���������������������������������������������������������������������������������������������������������������������������������� 438

Index��������������������������������������������������������������������������������������������������������������������� 439

viii
About the Author
Shiva Subramanian is a servant leader with a focus on business software engineering
gained through 20+ years of progressive roles in Atari (Pac-Man Champ!), Basic/
Pascal/Fortran, dBase/FoxPro, Visual Basic/Visual C++, infrastructure (Windows NT/
Linux), software development, information security, architecture, team leadership,
management, business partnerships, contributing to P&L, launching new business,
creating and leading global SW dev teams to containers, Docker, cgroups, Kubernetes
(K8S), Jenkins, cloud (AWS/GCP/Azure), Java, Spring Boot, Redis, MongoDB, JSON,
and Scala.
He has 25 years’ experience in the FinTech and BFSI sector in areas such as core
banking solutions, payment networks, electronic billpay/bill presentment solutions, anti-
money laundering solutions, loan origination platforms, credit union platforms, teller/
customer/branch management systems, investment banking platforms (APL), mobile
commerce
(SMS banking), and bank intelligence platforms (BI/BW), just to name a few knowledge
domains.

ix
Introduction
Google launches several billion containers per week into Google Cloud. Mercedes-Benz
runs nearly 1000 Kubernetes clusters with 6000+ Kubernetes nodes. Datadog runs tens of
clusters with 10,000+ nodes and 100,000+ pods across multiple cloud providers.
The world’s leading companies are switching fast to Kubernetes clusters as a means
to deploy their applications at scale. Kubernetes is a technology enabler and a valuable
skill to gain.
Are you a computer science student, a system administrator, or perhaps even a
systems engineer working primarily with physical/virtual machines? Does the call of
modern technologies, such as Kubernetes, the cloud, AWS EKS, etc., that purports to
solve all your problems allure you – but you do not know where to start? Then this book
is for you.
After reading this book and doing the homework exercises, you will have a firm
understanding of the concepts of Kubernetes; you will also be able to stand up your own
Kubernetes cluster in two forms, inside of a physical or a virtual machine and in Amazon
Web Services (AWS) with proper RBAC (Role-Based Access Control) setup. While this
book isn’t a certification preparation–focused book, skills gained here will also help you
obtain Kubernetes certifications.
We will begin the journey by setting up a Kubernetes cluster from scratch in your
own virtual machine. Yes, you heard that right; we will set up a fully functioning
Kubernetes cluster in your virtual machine first. We will learn the basic concepts of
Kubernetes, what’s a pod, what’s a deployment, what’s a node, etc.
We will then progress to intermediate Kubernetes concepts, such as where does the
Kubernetes cluster get its storage from? How does the cluster scale the application up
and down? How do we scale the underlying compute infrastructure? What is a container
repo? How does this play into the CI/CD process?
We will then progress to switching our setup to Amazon Web Services (AWS), where
we will set up the same Kubernetes cluster using AWS’s Elastic Kubernetes Services
(EKS). We will set up the cluster, deploy sample applications, and learn about scaling the
underlying compute and how cloud computing really supports the Kubernetes platform.

xi
Introduction

Then we will finish with advanced concepts like utilizing AWS’s Elastic File System
(EFS) inside our Kubernetes cluster for persistent storage and how to enable ingress to
expose our application to the Internet as we would in a typical web-based application in
a production setting. You can then build on these skills to become a Kubernetes expert,
whether you are deploying in bare metal, in AWS, in Azure AKS, or in GCP’s GKS – the
core and the concepts remain the same.
I wrote this book based on my own experience learning about Kubernetes – how
to stand up a Kubernetes cluster from scratch for little to no cost, how to deploy an
application, how to build my own containers and where would I host those container
artifacts, what impact does this have on the CI/CD process, how do I scale my cluster,
how does this work on a public cloud such as AWS EKS – those experiments, results, and
knowledge are what is captured in this book.
This book assumes that some familiarity with computers and virtual machines,
Linux knowledge, and some cloud knowledge will greatly speed up your understanding
of the concepts of Kubernetes. With that said, let us begin our journey by understanding
the root of the problem the containers and Kubernetes are trying to solve in Chapter 1.

xii
CHAPTER 1

From VMs to Containers


In this chapter, we will explain the benefits of deploying an application via containers vs.
the traditional method of using VMs while observing the benefits containers offer over
the VMs for solving the same problem set.
In a large-scale environment, such as is typical in an enterprise setting, with
hundreds, if not thousands, of applications to be hosted and supported, the problem of
deploying and managing those applications via VMs can be categorized into two main
categories, namely:

1. Dependency hell: Of shared libraries, the OS, and application


packages

2. Efficiency and cost control: Efficient use of compute resources

Dependency Hell
Anyone who has installed Microsoft runtime libraries on a Windows VM running
multiple applications or had to upgrade a package system in Linux can tell you how
complex this can be.
Ever since computers made it into the business applications’ world, supporting
real-world applications and problem solving, there has always been the problem of
dependencies among the various components, both hardware and software, that
comprise the application stack.
The technical stack the application software is written on, for example, Java, has
versions; this Java version is designed to run on top of a specified set of runtime libraries,
which in turn run on top of an operating system; this specified operating system runs
on top of a specified hardware device. Any changes and updates for security and feature
enhancements must take into account the various interconnects, and when one breaks
compatibility, we enter the dependency hell.

1
© Shiva Subramanian 2023
S. Subramanian, Deploy Container Applications Using Kubernetes,
https://doi.org/10.1007/978-1-4842-9277-8_1
Chapter 1 From VMs to Containers

This task of updating system components was even more complicated when IT
systems were vertically scaled, where there was one underlying operating system and
many applications that ran on top of it. Each application might come with its own runtime
library requirements; an OS upgrade might not be compatible with the dependencies of
some applications running on top, creating technical debt and operational complexity.

Efficiency and Cost Control


One way a system admin can alleviate the first problem is by creating a separate
VM for each application, then scaling it, so the dependency of packages is reduced
in complexity. Virtual machines, with each virtual machine running an individual
application, were common in the days of virtualization. They still are.
The major drawback of such solutions is they essentially waste a lot of resources and
increase operational complexity of running large-scale systems. Imagine you are serving
a static website that gets millions and millions of hits during peak hours. How do you
quickly scale from 1 VM running a web server to 100 VMs running the same application?
Even if you did, now you have to apply patches and maintain the web farm of 100 VMs.
This decreases efficiency and increases the maintenance function as well as
increases the overall cost of providing the solution.
To illustrate the problem in finer detail and to allow us to compare solving the same
problem using containers, let us first deploy a simple static website using a VM.

The VM Way
Task: Suppose the developers have developed a static website which they have asked
you to host in your production environment.
As a seasoned systems engineer or administrator, you know how to do this. Easy!, you
say. I’ll create a VM, deploy a web server, and voilà! But what’s the fun in that? However,
let us still deploy the static website the traditional way and the container way. This way,
we will learn the similarities and differences between the two approaches. Thus

1) We will run a simple static website using virtual machine


technology.

2) We will run the same simple static website using container


technology.

2
Chapter 1 From VMs to Containers

We will then build increasingly complex container applications as our journey


progresses.
Set up a static website using a virtual machine.
Prerequisites

• Ubuntu 22.04 LTS

Note There are several virtual machine technologies available, such as the cloud,
ESXi host, VMware Workstation, Parallels, KVM, etc. Instructions for installing the
Linux operating system will vary widely depending on the virtualization software in
use; thus, we assume that the systems engineer/administrator is familiar with their
workstation setup.

The typical process involves the following:

1. Install the operating system.

2. Install the nginx (web server) application.

3. Deploy the application data (the web pages).

1. Install the operating system.

In my case, I’ve installed a vanilla Ubuntu 22.04 LTS operating


system, which we will be using.

It is a typical virtual machine with 1 or 2vCPUs with 2GB of


memory and ~10GB of HDD. The user shiva is an admin on the
VM; since we will be installing many packages later on, ensure
that the user you are using has admin rights on the VM via sudo,
etc. The installed OS is Ubuntu 22.04 LTS as shown in Listing 1-1.

We confirm the OS by running the following command:

lsb_release -s -d

Note The author has chosen to list plain command(s) only at the top of the listings
and the executed output and results right below it, making it easy to differentiate
between the command and the author’s illustrated outputs as shown in Listing 1-1.

3
Exploring the Variety of Random
Documents with Different Content
Cox, Richard, 110.
Coxe, William, 116.
Cranmer, Thomas, 13, 154.
Crashaw, Richard, 38, 62.
Creighton, Dr Mandell, 253.
Crewe, Nathaniel, Lord, 82.
Croke, Richard, 110.
Cromwell, Oliver, 155, 193, 209, 260.
Crowland Abbey, 3, 205, 226.
Cudworth, Ralph, 51, 114, 171, 249.
Cumberland, Richard, 170.
Cunningham, Dr W., 28.

D
Darwin, C. R., 173.
Davenant, John, 133.
Dawes, Sir William, 141.
Day, George, 109.
Defoe at Stourbridge Fair, 9.
Dewar, Professor James, 41.
Dickinson, portraits by Mr Lowes, 83, 84, 210, 242.
Dillingham, Theophilus, 51.
Disney, Samuel, 289.
Doket, Andrew, 127.
Dominicans in Cambridge, 8, 165, 247.
Donne, John, 228.
Downing, Sir George, 42, 264.
Dowsing the “iconoclast,” 24, 39, 133.
Drinking-horn at Corpus, 88.
Dryden, John, 232.

E
Eachard, John, 140.
Eden, Dr G. R., 64.
Edmund House, 269.
Edward II., 225, 226;
III., 225, 226;
IV., 94, 129, 226;
VI., 79.
Effingham, Lord Howard of, 82.
Elizabeth, Queen, 57, 111, 215, 227, 248.
Ellicott, Dr C. J., 200.
Eltisley, Thomas of, 88.
Ely, Monastery of, 3, 205.
Erasmus, 3, 124, 130, 170, 273.
Essex, James, work of, 29, 33, 94, 123, 124, 163, 185, 211,
222, 223, 225, 246, 257.
Eton College, 106.
Everett’s “On the Cam” referred to, 209, 249.
Extension Movement, 293.
F
Fagius, Paul, 307.
Fairford, windows at, 98.
Falkland, Lucius, Viscount, 193.
Farmer, Richard, 10, 212.
Farrar, Dr F. W., 243.
Fawcett, Mr W. M., work by, 77, 124, 152.
Felton, Nicholas, 61.
Ferrar, Nicholas, 50, 51, 206.
Ferrers, Dr N. M., 75.
Fisher, John, Cardinal, 13, 129, 130, 165, 167, 190, 225.
⸺, Rev. Osmond, 159.
Fitzwilliam Hall, 270.
Fletcher, Giles, sen., 113.
⸺, ⸺, jun., 89.
⸺, Richard, 89.
Foster, Professor Michael, 242.
Fox, Edward, 109.
Foxe, Richard, 12, 59, 60, 80, 106.
Franciscans in Cambridge, 8, 259.
French, William, 158.
Frere, J. H., 74.
⸺, Serjeant, 265.
⸺, Mrs Serjeant, 10.
Frost, Henry, 189.
Fuller, Thomas, 132;
quoted, 58, 130, 132, 136, 167, 229, 248.
Furse, portraits by Mr C. W., 221, 267.
Fust, Sir H. J., 83, 303.

G
Gage, William, 114.
Gainsborough, portraits by, 64, 239, 245.
Gale, Roger, 238.
Gardiner, Stephen, 79, 80, 109.
Garret Hostel, 223.
Geldart, T. C., 83.
Gell, the antiquary, 253.
George I., 281, 284;
II., 284;
IV., 223.
Gheast, Edmund, 118.
Gibbons, Grinling, carving by 215, 222.
Gibbs, work by James, 102, 282, 285.
Gilds in Cambridge, 2, 21, 87.
Girton Church, 273.
Gisborne, Francis, 33.
Gladstone, Miss Helen, 274.
Gloucester, Prince W. F., Duke of, 239.
Goade, Roger, 112.
Goldcorne, John, 87.
“Golgotha,” 26.
Gonville, Edmund, 69.
Gooch, Sir Thomas, 74.
Goodwin, Harvey, 75.
Gostlin, John, 72, 140.
Gower, Humphrey, 195.
Grafton, G. H., Duke of, 239.
Granby, Charles, Marquess of, 239.
Grantchester, 2.
Gray, Thomas, 40, 63.
Grayson and Ould, work by Messrs, 77.
Grenville, Hon. G. N., 209.
Gresham, Sir Thomas, 72.
Grindal, Edmund, 60.
Grumbold, Robert, 23, 46.
Gunning, Peter, 51, 90, 193.

H
Hacket, John, 223, 231.
Haddon, Walter, 79, 113.
Halifax, Charles, Earl of, 234.
⸺, Samuel, 82.
Hall, Edward, 110.
⸺, Joseph, 251.
Hallam, A. H., 241.
Hansom, work by Messrs, 301.
Harcourt, Sir William, 243.
Hardman, glass by Messrs, 127, 150.
Hare, Ralph, 178.
Harlow, portraits by, 64, 133.
Harmer, Dr J. R., 92.
Harrington, Sir John, 259.
Harris, organ by Renatus, 101.
Harsnet, Samuel, 61.
Hartstrong, John, 73.
Harvard, John, 249.
Harvey, William, 72.
Harwood, Sir Busick, 253.
Have, work by Theodore, 67.
Hawksmoor, work by Nicholas, 245.
Heere, Lucas van, portraits attributed to, 177, 206, 227.
Henry VI., 58, 93, 166, 205;
VII., 94, 108;
VIII., 109, 130, 190, 205, 212, 225, 259, 307.
Henslow, Professor, 173.
Herbert, George, 133, 230.
Herkomer, portraits by Professor, 64, 84, 118, 199, 218, 221,
242.
Herring, Thomas, 91.
Hervey, Henry, 80.
Hicks, Dr J. W., 261.
Hill, organ by, 188.
⸺, Dr Alexander, 265.
Hills, John, 140.
Hinchliffe, John, 238.
Histon Church, 187.
Hoadly, Benjamin, 141, 250.
Hobson the carrier, 169.
Hodgson, William, 41.
Holbech, Ralph of, 35.
⸺, Thomas, 250.
Holbrook, John, 36.
Holiday, windows by Mr Henry, 216.
Holles of the Hyde, 260.
Holme, Richard, 279.
Hope, A. J. B., 224.
Horobin, Mr J. C., 270.
Hospital of St John, 5, 189.
Hudson, portraits by, 232, 237.
Hughes, Professor M’Kenny, 52.
Humphry, Sir George, 265.
Hurd, Richard, 253.
Hutton, Matthew, 60, 61, 112, 228.
Hyde, Thomas, 116.
J
Jackson, Dr Henry, 242.
⸺, John, 207.
James I., 50, 155.
⸺, Dr M. R., 292.
Jebb, Prof. R. C., 242, 287.
Jeffreys, Judge, 73.
Jegon, John, 89.
⸺, Thomas, 90.
Jenkin, Robert, 196.
Jones, Inigo, 164.
⸺, William, 261.
Jortin, John, 156.
Jowett, John, 28, 83.

K
Kaye, John, 172.
Kelvin, Lord, 16, 41.
Kempe, windows by Mr C. E., 101, 127, 297, 298, 306.
Kennedy, B. H., 199.
⸺, Miss M. G., 274.
Kent, Henry, Earl of, 259.
Key, Dr, of Oxford, 71.
King, Edward, 169.
⸺, Oliver, 108.
Kingsley, Charles, 16, 210.
Kneller, portrait by, 234.

L
Lamb, John, 91.
Lancaster, Henry, Duke of, 87.
Landbeach Church, 149.
Laney, Benjamin, 62.
Latham, Dr H., 84.
⸺, P. W., 265.
Latimer, Hugh, 49, 167.
Law, Edmund, 40.
⸺, William, 141, 245, 250.
Lawrence, portraits by, 239.
Leaver, Thomas, 191.
Legge, Thomas, 68, 72.
Leland, John, 167.
Lely, portraits by, 156, 245, 252.
L’Estrange, Sir Roger, 261.
Lightfoot, John, 141.
⸺, Joseph B., 242.
Linwood, William, 72.
Liverpool, Robert, Earl of, 172.
Lloyd, Sir Nathaniel, 76, 82.
Locke, John, 233.
Loggan’s Cantabrigia Illustrata, 42, 67, 68, 135.
Long, Roger, 63.
Lonsdale, portrait by, 239.
Love, Richard, 90.
Luard, Dr H. R., 27.
Luck, work by Mr C. S., 269.
Luckock, Dr H. M., 306.
Lumley, Marmaduke, 79.
Lupton, Roger, 118.
Lynford, Thomas, 160.
Lyttelton, Hon. Arthur, 267.
Lytton, Edward, Lord, 84.

M
Mackenzie, C. F., 75.
Maclagan, Dr W. D., 41.
Madingley Hall, 282.
Maine, Sir Henry, 83.
Maitland, Professor F. W., 265.
Malcolm IV. of Scotland, 153.
Maltby, Edward, 62.
Mansel, W. L., 238.
Mansfield, William, Earl, 83.
Margaret, the Lady, 12, 166, 177, 189.
Margaret of Anjou, 128.
Marlowe, Christopher, 89.
Marsh, Francis, 73.
⸺, Herbert, 196.
Martyn, Henry, 198.
Mary, Queen, 70, 80, 212, 215, 227, 307.
Mason, William, 64.
Maurice, F. D., 16.
Maw, Leonard, 40.
Mawson, Matthias, 91.
Maxwell, J. C., 242.
Mayor, J. E. B., 194, 196, 200.
Mede, Henry, 170.
Mengs, picture by Raphael, 188.
Merivale, Charles, 199.
Merton, Walter de, 34, 35.
Mesman, Daniel, 291.
Mey, William, 131.
Middleton, Conyers, 238.
⸺, J. H., 292.
Mildenhall, Roger of, 35.
Mildmay, Sir Walter, 22, 247.
Millington, William, 107.
Milne, Serjeant, 236.
Milner, Isaac, 133.
Milton, 13, 157, 168.
Montagu, James, 259.
Montague, Hon. John, 235.
Moore, John, 237, 281.
More, Henry, 171.
Morgan, Dr H. A., 158.
Morris, windows by William, 34, 150, 306.
Morton, Thomas, 193.
Moule, Dr H. C. G., 268.
Mowse, Walter, 79.
Mulcaster, Richard, 111.
Museums, Fitzwilliam, 287;
Woodwardian, 285.

N
Name of Jesus, devotion of, 166.
Naunton, Sir Robert, 81.
Neile, Richard, 193.
Nevile, Thomas, 178, 192, 206, 211, 215, etc.
Neville, Hon. Latimer, 209.
Newcastle, Thomas Holles, Duke of, 52.
Newcome, John, 196.
Newton, Sir Isaac, 15, 123, 226, 233.
⸺, Professor A., 210.
Nollekens, sculpture by, 83, 286.
Norfolk, Thomas, Duke of, 206.
Norman and Beard, organ by Messrs, 136.
North, Hon. John, 235.
Northumberland, John, Duke of, 139.

O
Oates, Titus, 73.
Okes, Richard, 118.
Opie, portraits by, 158, 239.
Orchardson, portrait by Mr W. Q., 41.
Otley, Adam, 81.
Oughtred, William, 114.
Ouless, portraits by Mr W. W., 64, 173, 199.
Overall, John, 140.
Oxenden, George, 81.

P
Paley, William, 172.
Palmer, E. H., 178, 199.
Palmerston, Henry John, Viscount, 198.
Parker, Matthew, 24, 88, 228.
Parr, Samuel, 196, 252.
Patrick, Simon, 133, 142.
Pattrick, Francis, 210.
Pearce, William, 157.
Pearson, John, 118, 156, 231;
work by J. L., 258, 305.
Peckard, Peter, 209.
Peile, Dr John, 173.
Pembroke, Marie, Countess of, 57.
Penrose, work by Mr F. C., 189.
Pepys, Samuel, 207.
Perceval, Spencer, 239.
Percy, Thomas, 252.
Perne, Andrew, 29, 36, 111.
Perowne family, 91.
Perse, Stephen, 67.
⸺ School, 11, 72, 288, 292.
Peterborough, monastery of, 3.
Petty Cury, 7.
Philpott, Henry, 142.
Pickersgill, portraits by, 178, 197, 209.
Pilkington, James and Leonard, 172.
Pitt, William, 64, 286.
⸺ Press, 286.
Platonists, Cambridge, 13, 163, 170, 245.
Porson, Richard, 239.
Powell, windows by, 28, 301.
Powis, Lord, 188.
Prest, Edward, 158.
“Prevaricator,” 25.
Prince, John, 74.
⸺ Consort, 289.
Prior, Matthew, 182, 189, 195.
Pritchard, Charles, 199.
Procter, Joseph, 142.
Pythagoras, school of, 277.

Q
Quarles, Francis, 171.

R
Radwinter, William of, 49.
Ragland, Thomas, 92.
Rainbow, Edward, 206.
Ramsey Abbey, 3, 205.
Ray, John, 141, 238.
Redman, John, 227.
Reynolds, portraits by Sir Joshua, 64, 74, 157, 239.
Reynolds, Richard, 81.
Richard III., 129.
Richardson, John, 38.
⸺, William, 252.
Richmond, portraits by Sir W. B., 242, 272, 291.
Rickingale, John, 69.
Rickman, work by, 182, 185.
Ridley Hall, 268.
⸺, Nicholas, 60.
Ritz, portraits by Valentine, 235.
Robinson, Dr C. K., 142.
⸺, Prof. J. A., 173.
Rogers, the martyr, 60.
Roman roads, 1.
Romer, Mr Justice, 83.
Romney, portraits by, 239, 245, 262.
Rotherham, Thomas, 53, 58, 107, 278.
Roubiliac, sculpture by, see Chapter XVI., passim.
Rougham, William de, 69.
Routh, Dr E. J., 41.
Ruggle, George, 10, 50.
Rustat, Tobias, 156.
Ryle, Dr H. E., 134.
Rymer, Thomas, 26.
Rysbrack, work by, 286.

S
Salvin, work by, 68, 77, 224, 292, 303.
Sampson, Richard, 80.
Sancroft, William, 245, 247, 249, 251.
Sandars, Samuel, 28.
Sandys, Edwin, 136.
Scott, work by Sir Gilbert, 27, 104, 186, 284, 298;
by Mr G. G., 33, 57, 278, 285, 292.
⸺, Mr R. F., 194.
Seaman, Lazarus, 40.
Searle, Dr C. E., 64.
Sedgwick, Adam, 240.
Selwyn College, 266.
Senate House, 285.
Shadwell, Thomas, 73.
Shafto, Mr J. D., 158.
Shannon, portraits by Mr J. J., 274.
Shaxton, Nicholas, 72.
Sherlock, Thomas, 142.
Shorton, Robert, 191.
Shrewsbury, Mary, Countess of, 178.
Sibbes, Richard, 140.
Siborch, John, 286.
Sidgwick, Professor H., 242, 272.
⸺, Mrs, 274.
Simeon, Charles, 16, 117, 301.
Simpson, Sir E., 77, 82.
Skeat, Professor W. W., 173.
Skippe, John, 69.
Smith, Mr Charles, 261.
⸺, John, 74.
⸺, Mr J. Hamblin, 298.
⸺, Robert, 238.
⸺, organs by Father, 27, 163, 215.
Smythies, C. A., 243.
Somerset, Charles, Duke of, 286.
Spelman, Sir Henry, 229.
Spencer, John, 90.
Spenser, Edmund, 62.
Staunton, Hervé de, 225, 307.
Stephen, J. K., 118.
Sterne, Laurence, 155.
⸺, Richard, 91, 144, 155.
Stevenson, work by Mr J. J., 165.
Still, John, 229.
Stillingfleet, Edward, 194.
Stourbridge, 9, 10.
Strafford, Thomas, Earl of, 193.
Stratford de Redcliffe, Lord, 118.
Stretton, Robert de, 79.
Strype, John, 141.
Sumner, J. B., 116.
Sussex, Frances, Lady, 258.
⸺, Prince Frederick, Duke of, 239.
Sylvester, J. J., 199.
Symons, work by Ralph, 178, 185, 217, 221, 244, 252, 254.
T
Taylor, Dr Charles, 200.
⸺, Jeremy, 72.
Templars in Cambridge, 301, 308.
Temple, Sir William, 115, 252.
Tenison, Thomas, 90.
Tennyson, Alfred, Lord, 16, 240.
Thackeray, W. M., 241.
Thaxted, Walter of, 49.
Thirlby, Thomas, 80.
Thompson, W. H., 242.
Thorney Abbey, 88.
Thorwaldsen, statue by, 222.
Thurlow, Lord Chancellor, 75.
Tillotson, John, 51.
Torry, Rev. A. F., 194.
Townshend, Charles, Viscount, 116.
Troyes, windows at, 98.
Tuckney, Anthony, 193.
Turner, Francis, 194.
⸺, Thomas, 38.
Turton, Thomas, 142.
Tusser, Thomas, 84.

V
Vandlebury Camp, 1.
Vandyck, portraits by, 188.
Villiers, Hon. C. P., 200.

W
Wailes, glass by, 303.
Walden Abbey, 205.
Wallace, work by Mr W., 269.
Waller, Edmund, 114.
Wallis, Dr F., 75.
Walpole, Sir Robert, 103.
⸺, Horace, 115.
Walsingham, Alan de, 297.
⸺, Sir Francis, 113.
Ward, Samuel, 249.
⸺, Seth, 172.
Warham, William, 130.
Water-supply of Cambridge, 37.
Waterhouse, work by Mr, 54, 59, 66, 68, 152.
Waterland, Daniel, 209.
Watts, portraits by Mr G. F., 83, 218, 240, 291.
Waynflete, William of, 12, 106.
Wesley, Samuel, 91.
West, Nicholas, 108.
Westcott, Dr B. F., 242.
Whewell, William, 224, 241.
Whichcot, Benjamin, 113, 248.
Whiston, William, 52.
Whitaker, William, 192.
White, Francis, 39, 73.
⸺, H. Kirke, 197, 306.
Whitgift, John, 38, 61, 228.
Whittlesea, William of, 35.
Whood, portraits by Isaac, 228, 229, 231.
Wickham, William, 118.
Wilberforce, William, 196.
Wilkins, James, 263.
⸺, John, 231, 234.
⸺, work of William, 74, 86, 91, 103, 104, 223.
Wilkinson, Thomas, 129.
⸺, Dr T. E., 158.
Willement, glass by, 303.
Williams, George, 117.
⸺, John, 178, 181.
Willoughby the naturalist, 232.
Wilmot, Sir J. Eardley, 82.
Wilson, portraits by Benjamin, 63, 64.
⸺, Thomas, 261.
Wisbech, Richard of, 35.
Wishart, George, 89.
Wood, James, 188.
Woodlark, Robert, 108, 136.
Woolner, statues by Thomas, 216, 240, 242.
Wordsworth, Christopher, 240.
⸺, William, 15, 157, 169, 178, 197.
Wrangham, Archdeacon, 83.
Wray, Sir Christopher, 206.
Wren, Sir Christopher, 54, 221, 245.
⸺, Matthew, 30, 39, 53, 62.
Wright, Mr W. A., 242.
Wyatt, Sir M. Digby, 293.
Wyattville, work by Sir Jeffrey, 257.
Wydvil, Queen Elizabeth, 129.
Wylson, Thomas, 113.

Y
Yonge, Philip, 157.

TURNBULL AND SPEARS, PRINTERS, EDINBURGH


*** END OF THE PROJECT GUTENBERG EBOOK CAMBRIDGE AND
ITS COLLEGES ***

Updated editions will replace the previous one—the old editions


will be renamed.

Creating the works from print editions not protected by U.S.


copyright law means that no one owns a United States
copyright in these works, so the Foundation (and you!) can copy
and distribute it in the United States without permission and
without paying copyright royalties. Special rules, set forth in the
General Terms of Use part of this license, apply to copying and
distributing Project Gutenberg™ electronic works to protect the
PROJECT GUTENBERG™ concept and trademark. Project
Gutenberg is a registered trademark, and may not be used if
you charge for an eBook, except by following the terms of the
trademark license, including paying royalties for use of the
Project Gutenberg trademark. If you do not charge anything for
copies of this eBook, complying with the trademark license is
very easy. You may use this eBook for nearly any purpose such
as creation of derivative works, reports, performances and
research. Project Gutenberg eBooks may be modified and
printed and given away—you may do practically ANYTHING in
the United States with eBooks not protected by U.S. copyright
law. Redistribution is subject to the trademark license, especially
commercial redistribution.

START: FULL LICENSE


THE FULL PROJECT GUTENBERG LICENSE
PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK

To protect the Project Gutenberg™ mission of promoting the


free distribution of electronic works, by using or distributing this
work (or any other work associated in any way with the phrase
“Project Gutenberg”), you agree to comply with all the terms of
the Full Project Gutenberg™ License available with this file or
online at www.gutenberg.org/license.

Section 1. General Terms of Use and


Redistributing Project Gutenberg™
electronic works
1.A. By reading or using any part of this Project Gutenberg™
electronic work, you indicate that you have read, understand,
agree to and accept all the terms of this license and intellectual
property (trademark/copyright) agreement. If you do not agree
to abide by all the terms of this agreement, you must cease
using and return or destroy all copies of Project Gutenberg™
electronic works in your possession. If you paid a fee for
obtaining a copy of or access to a Project Gutenberg™
electronic work and you do not agree to be bound by the terms
of this agreement, you may obtain a refund from the person or
entity to whom you paid the fee as set forth in paragraph 1.E.8.

1.B. “Project Gutenberg” is a registered trademark. It may only


be used on or associated in any way with an electronic work by
people who agree to be bound by the terms of this agreement.
There are a few things that you can do with most Project
Gutenberg™ electronic works even without complying with the
full terms of this agreement. See paragraph 1.C below. There
are a lot of things you can do with Project Gutenberg™
electronic works if you follow the terms of this agreement and
help preserve free future access to Project Gutenberg™
electronic works. See paragraph 1.E below.
1.C. The Project Gutenberg Literary Archive Foundation (“the
Foundation” or PGLAF), owns a compilation copyright in the
collection of Project Gutenberg™ electronic works. Nearly all the
individual works in the collection are in the public domain in the
United States. If an individual work is unprotected by copyright
law in the United States and you are located in the United
States, we do not claim a right to prevent you from copying,
distributing, performing, displaying or creating derivative works
based on the work as long as all references to Project
Gutenberg are removed. Of course, we hope that you will
support the Project Gutenberg™ mission of promoting free
access to electronic works by freely sharing Project Gutenberg™
works in compliance with the terms of this agreement for
keeping the Project Gutenberg™ name associated with the
work. You can easily comply with the terms of this agreement
by keeping this work in the same format with its attached full
Project Gutenberg™ License when you share it without charge
with others.

1.D. The copyright laws of the place where you are located also
govern what you can do with this work. Copyright laws in most
countries are in a constant state of change. If you are outside
the United States, check the laws of your country in addition to
the terms of this agreement before downloading, copying,
displaying, performing, distributing or creating derivative works
based on this work or any other Project Gutenberg™ work. The
Foundation makes no representations concerning the copyright
status of any work in any country other than the United States.

1.E. Unless you have removed all references to Project


Gutenberg:

1.E.1. The following sentence, with active links to, or other


immediate access to, the full Project Gutenberg™ License must
appear prominently whenever any copy of a Project
Gutenberg™ work (any work on which the phrase “Project
Gutenberg” appears, or with which the phrase “Project
Gutenberg” is associated) is accessed, displayed, performed,
viewed, copied or distributed:

This eBook is for the use of anyone anywhere in the United


States and most other parts of the world at no cost and
with almost no restrictions whatsoever. You may copy it,
give it away or re-use it under the terms of the Project
Gutenberg License included with this eBook or online at
www.gutenberg.org. If you are not located in the United
States, you will have to check the laws of the country
where you are located before using this eBook.

1.E.2. If an individual Project Gutenberg™ electronic work is


derived from texts not protected by U.S. copyright law (does not
contain a notice indicating that it is posted with permission of
the copyright holder), the work can be copied and distributed to
anyone in the United States without paying any fees or charges.
If you are redistributing or providing access to a work with the
phrase “Project Gutenberg” associated with or appearing on the
work, you must comply either with the requirements of
paragraphs 1.E.1 through 1.E.7 or obtain permission for the use
of the work and the Project Gutenberg™ trademark as set forth
in paragraphs 1.E.8 or 1.E.9.

1.E.3. If an individual Project Gutenberg™ electronic work is


posted with the permission of the copyright holder, your use and
distribution must comply with both paragraphs 1.E.1 through
1.E.7 and any additional terms imposed by the copyright holder.
Additional terms will be linked to the Project Gutenberg™
License for all works posted with the permission of the copyright
holder found at the beginning of this work.

1.E.4. Do not unlink or detach or remove the full Project


Gutenberg™ License terms from this work, or any files
containing a part of this work or any other work associated with
Project Gutenberg™.

1.E.5. Do not copy, display, perform, distribute or redistribute


this electronic work, or any part of this electronic work, without
prominently displaying the sentence set forth in paragraph 1.E.1
with active links or immediate access to the full terms of the
Project Gutenberg™ License.

1.E.6. You may convert to and distribute this work in any binary,
compressed, marked up, nonproprietary or proprietary form,
including any word processing or hypertext form. However, if
you provide access to or distribute copies of a Project
Gutenberg™ work in a format other than “Plain Vanilla ASCII” or
other format used in the official version posted on the official
Project Gutenberg™ website (www.gutenberg.org), you must,
at no additional cost, fee or expense to the user, provide a copy,
a means of exporting a copy, or a means of obtaining a copy
upon request, of the work in its original “Plain Vanilla ASCII” or
other form. Any alternate format must include the full Project
Gutenberg™ License as specified in paragraph 1.E.1.

1.E.7. Do not charge a fee for access to, viewing, displaying,


performing, copying or distributing any Project Gutenberg™
works unless you comply with paragraph 1.E.8 or 1.E.9.

1.E.8. You may charge a reasonable fee for copies of or


providing access to or distributing Project Gutenberg™
electronic works provided that:

• You pay a royalty fee of 20% of the gross profits you


derive from the use of Project Gutenberg™ works
calculated using the method you already use to calculate
your applicable taxes. The fee is owed to the owner of the
Project Gutenberg™ trademark, but he has agreed to
donate royalties under this paragraph to the Project
Gutenberg Literary Archive Foundation. Royalty payments
must be paid within 60 days following each date on which
you prepare (or are legally required to prepare) your
periodic tax returns. Royalty payments should be clearly
marked as such and sent to the Project Gutenberg Literary
Archive Foundation at the address specified in Section 4,
“Information about donations to the Project Gutenberg
Literary Archive Foundation.”

• You provide a full refund of any money paid by a user who


notifies you in writing (or by e-mail) within 30 days of
receipt that s/he does not agree to the terms of the full
Project Gutenberg™ License. You must require such a user
to return or destroy all copies of the works possessed in a
physical medium and discontinue all use of and all access to
other copies of Project Gutenberg™ works.

• You provide, in accordance with paragraph 1.F.3, a full


refund of any money paid for a work or a replacement
copy, if a defect in the electronic work is discovered and
reported to you within 90 days of receipt of the work.

• You comply with all other terms of this agreement for free
distribution of Project Gutenberg™ works.

1.E.9. If you wish to charge a fee or distribute a Project


Gutenberg™ electronic work or group of works on different
terms than are set forth in this agreement, you must obtain
permission in writing from the Project Gutenberg Literary
Archive Foundation, the manager of the Project Gutenberg™
trademark. Contact the Foundation as set forth in Section 3
below.

1.F.

1.F.1. Project Gutenberg volunteers and employees expend


considerable effort to identify, do copyright research on,

You might also like