Errata

Kubernetes: Up and Running

Errata for Kubernetes: Up and Running

Submit your own errata for this product.

The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".

The following errata were submitted by our customers and approved as valid errors by the author or editor.

Color key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update

Version Location Description Submitted By Date submitted Date corrected
ePub
Chapter 12 - Updating a container image

Encountered an error when trying out following code snippet

spec:
template:
annotations: kubernetes.io/ change-cause: "Update nginx to 1.9.10" ...


I think it should be

...
spec:
template:
metadata:
annotations: kubernetes.io/ change-cause: "Update nginx to 1.9.10"

Note from the Author or Editor:
The reporter is correct, 'metadata' is needed there. The indentation is important though, there should be 2 additional spaces on each subsequent line, it should look like this:

spec:
template:
metadata:
annotations: kubernetes.io/ change-cause: "Update nginx to 1.9.10"

Thanks

Roman S.  Oct 25, 2017  Feb 02, 2018
Printed
front cover

The animal on the front cover is supposed to be a bottle nose dolphin, per the Colophon, but the animal pictured is a white-sided dolphin.

Considering old British book from which the picture was borrowed has the bottle nose and the white-sided dolphin two pages apart I can only assume that the intent was to get the bottle nose illustration and that the cover should be updated. Updating the colophon is the other option.

Note from the Author or Editor:
You are correct! We will be updating the colophon in a future update.

Stephane Odul  Nov 02, 2017  Feb 02, 2018
Service Discovery
Readiness Checks third paragraph from end of section

Reads "Now go back to your browser and hit the “Fail” link for the readiness check. You should see that the server is not returning 500s. "

Should read:

Now go back to your browser and hit the “Fail” link for the readiness check. You should see that the server is now returning 500s.


That is, "not" should be "now".

Note from the Author or Editor:
Reporter is correct the word 'not' should be removed.

Chris Stone  Nov 03, 2017  Feb 02, 2018
"Creating a ReplicaSet" section in Chapter 8

In the section, there is a sentence that says as follows:

> The ReplicaSet configuration file in Example 8-1 will ensure one copy of the gcr.io/kuar-demo/kuard-amd64:1 container is running at a given time.

But it seems the configuration file tries to run a copy of "gcr.io/kuar-demo/kuard-amd64:2".

Note from the Author or Editor:
Reporter is correct 'gcr.io/kuar-demo/kuard-amd64:1' should be 'gcr.io/kuar-demo/kuard-amd64:2'

Yasunori MAHATA  Dec 07, 2017  Feb 02, 2018
Chapter 10 - POD FAILURE

In Example 10-2, the filename is written as "job-oneshot-failure1.yaml", but the file is referred as "jobs-oneshot-failure1.yaml" in the following paragraph.

Note from the Author or Editor:
Confirmed.

`kubectl apply -f jobs-oneshot-failure1.yaml`

Should be:

`kubectl apply -f job-oneshot-failure1.yaml`

I fixed this in the repo already.

Yasunori MAHATA  Dec 13, 2017  Feb 02, 2018
Figure 6-1

I believe 3 of 4 labels ("alpaca-prod") in Figure 6-1 in the book Kubernetes: Up and Running should be "alpaca-test", "bandicoot-prod", and "bandicoot-staging".

Link to the page: https://www.safaribooksonline.com/library/view/kubernetes-up-and/9781491935668/ch06.html
Link to the figure: https://www.safaribooksonline.com/library/view/kubernetes-up-and/9781491935668/assets/kuar_06in01.png

Note from the Author or Editor:
This is correct. The image should look like:

alpaca-prod bandicoot-prod

alpaca-test bandicoot-staging

Hirotake Shimoji  Jan 22, 2018  Feb 02, 2018
The "Designing with ReplicaSets" paragrph in Chapter 8. ReplicaSets

Sentence "Generally speaking, ReplicaSets are designed for stateles (or nearly stateless) services." has a typo. "designed for stateles" should be "designed for
stateless".

Note from the Author or Editor:
Confirmed, that's a spelling mistake.

HIROTAKE SHIMOJI  Feb 09, 2018 
ePub
Page ch 2
Dockerfile in Building Applications with Docker

(from Safari books online, dont know the page number)

Under Building Applications with Docker in Ch 2, the thrid line of teh Docker file should read:
COPY bin/1/amd64/kuard /kuard

This is actually fixed in the Readme for the repo, per Issue #7.
I list it here because it is incorrect in the book, and for those following along in the book, it can cause a hiccup.

Note from the Author or Editor:
Now fixed in the original source

David Glaubman  May 17, 2018 
Chapter 14
last paragraph

First of all, a big thank you and congratulations to the authors, I love this book, I learned a lot in a short time and the language used is a pleasure to read.
In chapter 14 the Redis example unfortunately doesn’t work anymore with more recent Kubernetes versions (I’m using the v1.11.2). The reason is that in new Kubernetes versions the mounted volume related to the configmap is read-only (the change was made to address a security hole) and not read-write as with the version used at the time of writing.
Redis sentinel needs to write on /redis-config/sentinel.conf file otherwise exits with error; the pod is restarted forever and the whole deployment fails.
My simple solution (as a noob, maybe there are better ones) was to create an additional empty dir (which has RW permissions) in the sentinel container, copy the configmap files into this empty dir and point the sentinel over the copied files. It works fine. Attached below are the two files I tweaked from the book:

redis.yaml

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: redis
spec:
replicas: 3
serviceName: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- command: [sh, -c, source /redis-config/init.sh ]
image: redis:4.0.11-alpine
name: redis
ports:
- containerPort: 6379
name: redis
volumeMounts:
- mountPath: /redis-config
name: config
- mountPath: /redis-data
name: data
- command: [sh, -c, source /redis-config-src/sentinel.sh]
image: redis:4.0.11-alpine
name: sentinel
volumeMounts:
- mountPath: /redis-config-src
name: config
- mountPath: /redis-config
name: data
volumes:
- configMap:
defaultMode: 420
name: redis-config
name: config
- emptyDir:
name: data




sentinel.sh

#!/bin/bash
cp /redis-config-src/*.* /redis-config
while ! ping -c 1 redis-0.redis; do
echo 'Waiting for server'
sleep 1
done

redis-sentinel /redis-config/sentinel.conf

Note from the Author or Editor:
This is an update for newer versions of Kubernetes. The example was correct and the time of writing but now needs to be updated. Applied to the source repo.

Antonio Massaro  Oct 10, 2018 
Chapter 5
Pod Manifest , 2nd paragraph

"Pod manifests are processed by the Kubernetes API service, stored in persistent storage."

Missing an 'and'

"Pod manifests are processed by the Kubernetes API service, and stored in persistent storage."

Note from the Author or Editor:
Good catch. Fixing now.

Joseph Engel  Aug 03, 2017  Sep 05, 2017
Chapter 14
Configuring Redis

This section states the default redis port is 6380, when in fact it is 6379.

Note from the Author or Editor:
Good catch. I'm changing the example to use port 6379.

Joseph Engel  Aug 04, 2017  Sep 05, 2017

Chapter 5. Pods > Pod Manifest > Creating a Pod Manifest

apiVersion: v1
kind: Pod
metadata:
name: influxdb
spec:
containers:
- image: b.gcr.io/kuar/influxdb:0.9.4.2
name: influxdb
ports:
- containerPort: 8083
name: admin
protocol: TCP
- containerPort: 8086
name: http
protocol: TCP

Error:
image can't be downloaded

Reason:
"On February 28th, 2017, the use of “bring-your-own-bucket” registries such as b.gcr.io and bucket.gcr.io is deprecated. Container Registry no longer serves any container images hosted in those buckets."
https://cloud.google.com/container-registry/docs/support/deprecation-notices

David Verdejo  Sep 05, 2017  Sep 05, 2017
Chapter 7, Readiness checks section,

Typo: not replace it with now. 3rd paragraph from bottom on section Readiness check, just after the command to get endpoints.

You should see that the server is not returning 500s.

should read

You should see that the server is now returning 500s.

Walid Shaari  Sep 06, 2017  Feb 02, 2018
Chapter 12, section Updating Container Images

The section for adding annotation is asking to add it to the template, not deployment, however, kubectl records change cause on the deployment metadata, not template metadata, could you please clarify? and how entering it manually will affect if one has used --record in first kubectl creation for the manifest

Walid Shaari  Sep 07, 2017  Feb 02, 2018
14
I set page to 14, meaning chapter 14. I'm on safari books, so I don't see the page

Into chapter 14: "Deploying Real-World Applications", onto the Ghost section, the authors suggest we create a ConfigMap from a file the following way:

$ kubectl apply cm --from-file ghost-config.js ghost-config

I tried this, and this caused an error on kubectl. I changed the command to:

$ kubectl create cm --from-file ghost-config.js ghost-config

The latter worked, as I believe the authors intended.


I hope this may help.

Kind Regards!
Alberto Biasao

Note from the Author or Editor:
The reporter is correct 'kubectl apply' should be 'kubectl create'

Thanks!

Alberto Biasao  Oct 09, 2017  Feb 02, 2018
PDF
Page 14
The last paragraph

A project that is standardizing the container image format is not Open Container Image (OCI) project but Open Container Initiative (OCI) https://www.opencontainers.org/.

Note from the Author or Editor:
The reporter is correct. "Open Container Image" should be "Open Container Initiative"

Hayato Matsuura  Nov 25, 2017  Feb 02, 2018
Printed
Page 21
Summary

Chapter 2 summary refers to Docker's ability to mount external directories, yet the chapter did not cover this topic!

Note from the Author or Editor:
The reporter is correct. I re-worked the summary in the books Atlas repository.

Xabriel Collazo Mojica  Dec 01, 2017  Feb 02, 2018
Other Digital Version
24
Google Container Service

This command ...

$ gcloud container clusters create kuar-cluster


Does not produce this ...

$ kubectl get nodes
NAME         STATUS         AGE
kubernetes   Ready,master   45d
node-1       Ready          45d
node-2       Ready          45d
node-3       Ready          45d


But this ...

$ kubectl get nodes
NAME STATUS AGE VERSION
gke-kuar-cluster-default-pool-c7891302-2f1v Ready 42m v1.7.6
gke-kuar-cluster-default-pool-c7891302-34pk Ready 42m v1.7.6
gke-kuar-cluster-default-pool-c7891302-8q56 Ready 42m v1.7.6


The kubernetes master does not display, and the nodes are not named, "node-1", etc.

Note from the Author or Editor:
Edited the original. This is tricky because it will never match exactly. Added a note to this effect.

Anonymous  Oct 20, 2017  Feb 02, 2018
PDF
Page 30
First code section

Text claims that running:

kubectl get daemonSets --namespace=kube-system kube-proxy

should show kube-proxy. It returns the below error. And, omitting kube-proxy on the command line only shows fluentd, not kube-proxy.

[tom@MacBook-Pro python]$ kubectl get daemonSets --namespace=kube-system kube-proxy
Error from server (NotFound): daemonsets.extensions "kube-proxy" not found
[tom@MacBook-Pro python]$ kubectl get daemonSets --namespace=kube-system
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE-SELECTOR AGE
fluentd-gcp-v2.0 3 3 3 3 3 beta.kubernetes.io/fluentd-ds-ready=true 20m

Note from the Author or Editor:
Good catch. Not all clusters will use DaemonSets to run the proxy. It can be configured and managed outside of Kubernetes. I'm updating the section to make it clear that many clusters will use a DaemonSet here but not all.

matommy  Jul 15, 2017  Feb 02, 2018
PDF
Page 33
introduction

Two references to the UTC namespace. I believe this should be the UTS namespace.

Note from the Author or Editor:
Yup -- good catch. This has been updated in the latest versions of the book.

George V. Reilly  Nov 03, 2015  Sep 05, 2017
Printed
Page 47
1st paragraph

The command provided to show details of the restart is wrong: It should read "kubectl describe pod kuard" instead of "kubectl describe kuard".

Note from the Author or Editor:
The reporter is correct.

'kubectl describe kuard'

should be:

'kubectl describe pods kuard'

Bernd K.  Oct 30, 2017  Feb 02, 2018
Printed
Page 52
"Mounting the host filesystem" chapter

The "Mounting the host filesystem" chapter talks about "hostDir" volumes whereas the previous example referenced and the Kubernetes documentation talk about "hostPath" volumes.

Note from the Author or Editor:
Reporter is correct 'hostDir' should be 'hostPath' everywhere.

Bernd K.  Oct 30, 2017  Feb 02, 2018
ePub
Page 57
First paragraph after a list of kubectl commands to enter

The following code example:

kubectl label pods bar -color

The dash must be after the "color"? E.g:

kubectl label pods bar color-

Note from the Author or Editor:
The reporter is correct, '-color' should be 'color-'

Ievgen Pyrogov  Oct 16, 2017  Feb 02, 2018
Printed
Page 67
"Service DNS" chapter

The respective section in the kuard UI is called "DNS Query", not "DNS Resolver".

Note from the Author or Editor:
Correct, please replace "DNS Resolver" with "DNS Query"

Bernd K.  Oct 30, 2017  Feb 02, 2018
Printed
Page 68
1st paragraph

The formatting of "svc" and "cluster.local" as well as the corresponding explanations is broken. It should be the same as "alpaca-prod" and "default" on the previous page.

Note from the Author or Editor:
Acknowledged. One of the definition list entries needs a newline.

Fixed in the repository.

Bernd K.  Oct 30, 2017  Feb 02, 2018
Printed
Page 69
4th paragraph

The respective kuard section is called "Readiness Probe", not "Readiness Check".

Note from the Author or Editor:
Fixed in repository.

Bernd K.  Oct 30, 2017  Feb 02, 2018
Printed
Page 75
1st paragraph

The respective section in the kuard example application is called "Server Env", not "Environment". In the table shown, the first column is called "Key", not "Name".

Note from the Author or Editor:
Fixed in book repository.

Bernd K.  Oct 30, 2017  Feb 02, 2018
PDF
Page 81
Section Labeling and Annotating Objects, 4th paragraph

"If you want to remove a label, you can use the -<label-name> syntax:

$ kubectl label pods bar -color


This should instead be "<label-name>- syntax":

$ kubectl label pods bar color-


The above correction was found from "kubectl label --help":

# Update pod 'foo' by removing a label named 'bar' if it exists.
# Does not require the --overwrite flag.
kubectl label pods foo bar-

Note from the Author or Editor:
The reporter is correct '-color' should be 'color-'

Agrim Prasad  Oct 07, 2017  Feb 02, 2018
ePub
Page 81
1st paragraph

"...the POD manifested" should read "...the POD manifest"?

Note from the Author or Editor:
Reporter is correct 'manifested' should be 'manifest'

Ievgen Pyrogov  Oct 16, 2017  Feb 02, 2018
ePub
Page 85
First paragraph after a list of kubectl commands to enter

Sentence starting with:
"You should have four deployments—alpaca-prod, alpaca-staging..."

It should be alpaca-test, not alpaca-staging.

Also, the Figure 6-1. The Venn digram only depicts 4 instances of alpaca-prod! Where are alpaca-test, bandicoot-staging, bandicoot-prod?

Note from the Author or Editor:
confirmed. 'alpaca-staging' should be 'alpaca-test'

Also the illustration needs to be fixed as described.

Ievgen Pyrogov  Oct 16, 2017  Feb 02, 2018
Printed
Page 88-89
code at the bottom of the page

The code in Example 9-1 is creating a DaemonSet in the namespace kube-system, but then the command to describe it at the bottom of page 89 does not specify the --namespace=kube-system filter, ending up in the DaemonSet not being returned by the API.


Feels like the intention was to make this a default namespace resource, so I would suggest to change the code and remove the namespace: kube-system qualification.

Note from the Author or Editor:
Fixed in the atlas repo.

Mauro Giusti  Dec 06, 2018 
ePub
Page 103
First paragraph

The sentence:

"You should see that the server is not returning 500s."

Must contains redundant "not"? E.g. is must read:

"You should see that the server is returning 500s."

Note from the Author or Editor:
Confirmed. 'not' should be deleted.

Ievgen Pyrogov  Oct 16, 2017  Feb 02, 2018
Printed
Page 113
At the end of the page, right before the last paragraph.

The text states that mounting the kuard-tls secrets volume (which includes two data elements, kuard.crt and kuard.key) will result into the following files:

/tls/cert.pem
/tls/key.pem

being visible from the pod. Shouldn't the visible files be

/tls/kuard.crt
/tls/kuard.key

instead?

Note from the Author or Editor:
Error confirmed. Fixed in the original source in Atlas.

Miguel Martínez  Mar 29, 2018 
ePub
Page 114
Last paragraph

There's a redundant "in" the sentence containing the following:

"...a cookie cutter and a desired of number of cookies..."

Must not contain redundant "of"? E.g. is must read:

"...a cookie cutter and a desired number of cookies..."

Note from the Author or Editor:
Reporter is correct, delete the 'of' before 'number'

Ievgen Pyrogov  Oct 16, 2017  Feb 02, 2018
PDF
Page 130
Designing with ReplicaSets

Part of the sentence reads as follows:

“...ReplicaSets are designed for stateles (or nearly stateless) services”

Excerpt From: Kelsey Hightower, Brendan Burns & Joe Beda. “Kubernetes: Up and Running.”

I think `stateles` should be `stateless`.



Note from the Author or Editor:
The reporter is correct 'stateles' should be 'stateless'

Thanks

Elrick Ryan  Sep 22, 2017  Feb 02, 2018
PDF
Page 132
Figure 12-1

In the example of a couple application architecture in Figure 12-1, the boxes at the bottom are labeled as "Frontend". However, frontend servers are at the top so the ones at the bottom should be "Backend".

Note from the Author or Editor:
Reporter is correct. Boxes on the lower right-hand side of the illustration should be labelled "Backend #1" and "Backend #N", instead of "Frontend #1" and "Frontend #N".

The boxes on the upper right hand side of the illustration are labelled correctly.

Hayato Matsuura  Nov 25, 2017  Feb 02, 2018
ePub
Page 132
Chapter 9, subheading "Updating a DaemonSet by Deleting Individual Pods"

The current code snippet is this:

PODS=$(kubectl get pods -o jsonpath -template='{.items[*].metadata.name}'
for x in $PODS; do
kubectl delete pods ${x}
sleep 60
done

There are 2 typos in that snippet:
1. It should be using `--template` instead of `-template`
2. The closing parenthesis is missing from the line PODS=$(...

The correct snippet should look like this:

PODS=$(kubectl get pods -o jsonpath --template='{.items[*].metadata.name}')
for x in $PODS; do
kubectl delete pods ${x}
sleep 60
done

Note from the Author or Editor:
Confirmed, and fixed in atlas source.

Janos Lenart  Apr 15, 2018 
ePub
Page 132
Chapter 9, subheading "Rolling Update of a DaemonSet", paragraph 4

The formula for estimating the amount of time for the rollout should refer to `minReadySeconds` instead of `maxReadySeconds`

Note from the Author or Editor:
Confirmed and fixed in source.

Janos Lenart  Apr 15, 2018 
PDF
Page 135
kubectl command to scale the kuard replicaSet

In the replicaSet Chapter on page 135 there is a command to imperatively scale up as follows ` kubectl scale kuard --replicas=4` that returns an error in the console.

The Error reads: error: resource(s) were provided, but no name, label selector, or --all flag specified

I was able to get the command to execute by adding `rs` to the command as follows.
`kubectl scale rs kuard --replicas=4` which then returned this message in the console "replicaset "kuard" scaled".

Note from the Author or Editor:
The reporter is correct. The command should read:

kubectl scale replicasets kuard --replicas=4

Thanks!

Elrick Ryan  Sep 22, 2017  Feb 02, 2018
PDF
Page 140
1st paragraph under `Naming Constraints`

The paragraph reads:

The key names for data items inside of a secret or ConfigMap are defined to map to valid environment variable names. They may begin with a dot followed by a letter or number. Following characters include dots, dashes, and underscores. Dots cannot be repeated and dots and underscores or dashes cannot be adjacent to each other. More formally, this means that they must conform to the regular expression [.]?[a-zAZ0-9]([.]?[-_a-zA-Z0-9]*[a-zA-Z0-9])*.

As I understand the intent of the paragraph the name `.a1e.---_beta` should be invalid, but it is a match against the supplied regex pattern.

Note from the Author or Editor:
Confirmed. The correct regular expression is:

^[.]?[a-zAZ0-9]([.]?[a-zA-Z0-9]+[-_a-zA-Z0-9]?)*$

Fixed in the second edition.

Anonymous  May 30, 2019 
PDF
Page 148
3rd section

“Adding the ssd=true label to additional nodes will case the nginx-fast-storage Pod to be deployed on those nodes. ”


Typo: "Case" should be "Cause"

Note from the Author or Editor:
the reporter is correct. 'case' should be 'cause'

Elrick Ryan  Sep 22, 2017  Feb 02, 2018
Printed
Page 157
Sample at the top of the page

The environment variables used to configure the parse-server application are all missing the PARSE_SERVER_ prefix in sample 14-1.parse.yaml. Updating the Deployment object using the following spec.env section fixes the issue:

---
env:
- name: PARSE_SERVER_DATABASE_URI
value: "mongodb://mongo-0.mongo:27017,\
mongo-1.mongo:27017,mongo-2.mongo\
:27017/dev?replicaSet=rs0"
- name: PARSE_SERVER_APPLICATION_ID
value: my-app-id
- name: PARSE_SERVER_MASTER_KEY
value: my-master-key
---
Reference: https://github.com/parse-community/parse-server/blob/master/README.md#using-environment-variables-to-configure-parse-server

Note from the Author or Editor:
Confirmed, and corrected in the upstream repository.

Pierre Beitz  Feb 11, 2018 
Printed
Page 158
Chapter 13 - Configuring Ghost

The text talks about "Once you have this configuration file saved to config.js ..." whereas the example file and command line talk about the file being named "ghost-config.js". So, I think the text should read "Once you have this configuration file saved to ghost-config.js ...".

Note from the Author or Editor:
Confirmed. 'config.js' should be 'ghost-config.js'

Bernd K.  Nov 08, 2017  Feb 02, 2018
Printed
Page 159
Chapter 14 - Configuring Ghost

The ghost.yaml shown (and also the version at https://github.com/kubernetes-up-and-running/examples/blob/master/14-4-ghost.yaml) didn't work for me for two reasons:

1. The yaml file reads

cp /ghost-config/config.js /var/lib/ghost/config.js

whereas the config file was previously called ghost-config.js, so it should read

cp /ghost-config/ghost-config.js /var/lib/ghost/config.js

2. I'm not totally sure about the canonical solution here, but:

a) /entrypoint.sh doesn't exist in the Dockerfile as far as I can see, but there's /usr/local/bin/docker-entrypoint.sh instead

b) There doesn't seem to be a package.json so calling /usr/local/bin/docker-entrypoint.sh with 'npm start' as indicated in the yaml file leads to npm complaining about the missing package.json. What worked for me was to instead call node directly with the CMD provided in the Dockerfile:

&& /usr/local/bin/docker-entrypoint.sh node current/index.js

So, putting it all together, this command is working for me:
...
command:
- sh
- -c
- cp /ghost-config/ghost-config.js /var/lib/ghost/config.js
&& /usr/local/bin/docker-entrypoint.sh node current/index.js
...

Note from the Author or Editor:
Reporter is correct. I fixed this erratta in the book repository.

Bernd K.  Nov 14, 2017  Feb 02, 2018
Printed
Page 160
Chapter 14 - Ghost + MySQL

The chapter talks about config.js ("...first modify config.js to include:") and also the kubectl command says

kubectl create configmap ghost-config-mysql --from-file config.js

whereas previously, the configuration file was called ghost-config.js, so it would be:

kubectl create configmap ghost-config-mysql --from-file ghost-config.js

Note from the Author or Editor:
Reporter is correct. I fixed this error in the text.

Bernd K.  Nov 14, 2017  Feb 02, 2018
Printed
Page 169
Paragraph 13

Where you say "Then configure the DHCP server as follows:" you should reference the file you need to edit with the additional information.

i.e. This should read, "Then configure the DHCP server by editing /etc/dhcp/dhcpd.conf as follows:"

Note from the Author or Editor:
Thanks. This has been fixed in the second edition.

Michael Davies  May 14, 2019 
Printed
Page 170
3rd paragraph

Here you suggest that you restart the DHCP server with "sudo systemctl restart dhcpd". This is incorrect, it should be: "sudo systemctl restart isc-dhcp-server"

Note from the Author or Editor:
Fixed in the second edition.

Michael Davies  May 14, 2019 
Printed
Page 170
paragraph 7

After suggesting the edit to /etc/sysctl.conf you need to reboot for the change to take effect.

Note from the Author or Editor:
fixed in source.

Michael Davies  May 14, 2019 
Printed
Page 171
paragraph 15

In the `kubeadm init` command you use `--api-advertise-addresses` when it should be `--apiserver-advertise-address`

Note from the Author or Editor:
Fixed in second edition.

Michael Davies  May 14, 2019 
PDF
Page 178
second code section

getting the details of the fluentd daemonSt you say use the command:

kubectl describe demonset fluentd

this returns nothing, however specifying the kube-system namespace does return this daemonset:


kubectl describe daemonset fluentd --namespace=kube-system

Note from the Author or Editor:
Reporter is correct, we should add '--namespace=kube-system' to that command.

Izaak Alpert  Oct 30, 2017  Feb 02, 2018
PDF
Page 182
curl commands to create files


There are two commands to curl to get a crt and key in the book it says that these files are created locally however i think you need to write the response to a file

such as::
“curl -O https://storage.googleapis.com/kuar-demo/kuard.crt >> kuard.crt”


Note from the Author or Editor:
Confirmed, the two lines should read:

$ curl -o kuard.crt https://storage.googleapis.com/kuar-demo/kuard.crt
$ curl -o kuard.key https://storage.googleapis.com/kuar-demo/kuard.key

I have fixed this in the Atlas repo.

Elrick Ryan  Sep 22, 2017  Feb 02, 2018
ePub
Page 193
3rd paragraph

There are words:

> Imagine that we have test and product namespaces defined.

Must be changed to:

> Imagine that we have test and prod namespaces defined.

Note from the Author or Editor:
'product' should be 'production' fixed in the repository.

Ievgen Pyrogov  Nov 26, 2017  Feb 02, 2018
ePub
Page 208
1st paragraph of the note

There are words:

> Since we want our main Mongo container to be restarted...

Should be changed to:

> Since we do not want our main Mongo container to be restarted...

Note from the Author or Editor:
reporter is correct, fixed in the repo.

Ievgen Pyrogov  Nov 26, 2017  Feb 02, 2018
ePub
Page 217
last half of the page (nfs-volume.yaml)

For the mysql singleton example, both the nfs volume & and nfs volume claim yaml files will not work as written since kubernetes requires you to specify accessModes (spec.accessModes).

Note from the Author or Editor:
Reporter is correct. I have corrected the text in the repository, no further corrections necessary.

Andrew Lee  Oct 17, 2017  Feb 02, 2018
ePub
Page 226
first command on the page

In Chapter 13, in the mongo stateful set example...

[$kubectl exec mongo-0 bash ping mongo-1.mongo] will not work with the specified StateFull set definition, the reason being curl does not come pre-installed on the default mongo Docker image. I'm not exactly sure what image the default mongo image is built on top of (e.g. alpine, scratch, wheezy), but in order to get the example to work, I had to change the image spec.template.containers.image value from mongo 3.4.1 to mongo:3.4.9-jessie.

Then running [$kubectl exec -it mongo-0 /bin/bash], I installed curl via [$apt update && apt install iputils-ping].

Then everything else works as listed in the book

Note from the Author or Editor:
The reporter is correct. I have fixed this in the book's original repository. No further action is needed.

Andrew Lee  Oct 17, 2017  Feb 02, 2018
ePub
Page 232
Middle

Incorrect tabbing of readiness probe portion of the mongo example

Written as: "livenessProbe:\n\texec:\n\t\tcommand:\n\t\t\t- /usr/bin/mongo\n\t\t\t- --eval\n\t\t\t- db.serverStatus()\n\t\tinitialDelaySeconds: 10\n\t\ttimeoutSeconds: 10\n", should be "livenessProbe:\n\texec:\n\t\tcommand:\n\t\t\t- /usr/bin/mongo\n\t\t\t- --eval\n\t\t\t- db.serverStatus()\n\tinitialDelaySeconds: 10\n\ttimeoutSeconds: 10\n"

Note from the Author or Editor:
Reporter is correct.

Tabbing fixed in the origin Atlas repo.

Andrew Lee  Oct 17, 2017  Feb 02, 2018
ePub
Page 234
2nd paragraph in the "Installing Kubernetes" section

There are words:

> Using SSH, run the following commands on all nodes to the kubelet and kubeadm tools.

Should be changed to:

> Using SSH, run the following commands on all nodes to install the kubelet and kubeadm tools.

Note from the Author or Editor:
reporter is correct, the word 'install' should be added.

Ievgen Pyrogov  Nov 26, 2017  Feb 02, 2018
PDF
Page 258
dns-service.yaml code sample

ultra minor!

externalName: "database.company.com

should be

externalName: "database.company.com"

or

externalName: database.company.com

Note from the Author or Editor:
Reporter is correct, we should delete the initial '"'

John Alpert  Oct 31, 2017  Feb 02, 2018
Other Digital Version
411
Dockerfile section.

I'm using a kindle version in location 411 there is a Dockerfile example that provides no context.
```
FROM alpine
MAINTAINER Kelsey Hightower <kelsey.hightower@kuar.io>
COPY bin/kuard /kuard
ENTRYPOINT ["/kuard"]
```
The book does not explain from where is the directory bin or file kuard.
The book has a link to the git repo but there is no directory bin.
There is one issue open about this problem in github.

Note from the Author or Editor:
Added some text that indicates that you need to build the binary.

Roger Gomez  Nov 02, 2017  Feb 02, 2018