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.
Version |
Location |
Description |
Submitted By |
Date submitted |
Date corrected |
|
Page not sure, using the O'reilly reader
Chapter 8 - Installing contour, code example |
The expected output of "kubectl get -n projectcontour service contour -o wide" does not match what I get. The expected output from the book is:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) ...
contour 10.106.53.14 a477...amazonaws.com 80:30274/TCP ...
I get:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
contour ClusterIP 10.100.134.112 <none> 8001/TCP 14m app=contour
It looks like the service I should be using is "envoy":
$kubectl get -n projectcontour service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
contour ClusterIP 10.100.134.112 <none> 8001/TCP 15m
envoy LoadBalancer 10.100.201.191 a7c...elb.amazonaws.com 80:31475/TCP,443:30006/TCP 15m
I am using kubernetes and kubectl version 1.21
Note from the Author or Editor: The output needs to be updated as follows:
$ kubectl get -n projectcontour service envoy -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) ...
envoy LoadBalancer 10.106.53.14 a477...amazonaws.com 80:30274/TCP ...
We've made the fix in copy.
Cheers,
KUAR authors
|
James Kelleher |
May 10, 2022 |
Jun 01, 2022 |
|
Page Chapter 8, section Using Hostnames
2nd code box after host-ingress.yaml, with the kubectl get and describe commands |
My output for "kubectl describe ingress host-ingress" does not match what's provided in the book. In the book, the default backend line is: "Default backend: default-http-backend:80 (<none>)". For me, the line is "Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)".
Note from the Author or Editor: I believe this has already been addressed as I could no longer replicate via the contents of the ePUB
|
James Kelleher |
May 10, 2022 |
Jun 01, 2022 |
|
Page Chapter 15, Introduction, Encryption and authentication with Mutal TLS (mTLS)
1st paragraph in the section |
"Possible" is misspelled as "possile"
Note from the Author or Editor: Hi - Thank you very much for reporting this errata. We have corrected the spelling error. We appreciate you taking the time to report this.
Cheers,
Kubernetes: Up and Running authors
|
James Kelleher |
May 12, 2022 |
Jun 01, 2022 |
|
Page Chapter 7 - Service Object
Under Service Objects, kubectl commands and output are inconsistent |
I believe the commands as printed would have created selector app=alpaca-prod and app=bandicoot-prod vs what is printed in the table (without prod suffix).
This causes the subsequent command "ALPACA_POD=$(...)" to fail with array index out of bounds in the second table (right above Service DNS section)
I believe a quick fix would be to remove all the '-prod' suffixes in the commands so it would be consistent with output of "kubectl get services -o wide" as well as the subsequent "ALPACA_POD=$(...)" commands in the following table.
Note from the Author or Editor: Update the table output from
NAME CLUSTER-IP ... PORT(S) ... SELECTOR
alpaca-prod 10.115.245.13 ... 8080/TCP ... app=alpaca
bandicoot-prod 10.115.242.3 ... 8080/TCP ... app=bandicoot
kubernetes 10.115.240.1 ... 443/TCP ... <none>
to
NAME CLUSTER-IP ... PORT(S) ... SELECTOR
alpaca-prod 10.115.245.13 ... 8080/TCP ... app=alpaca-prod
bandicoot-prod 10.115.242.3 ... 8080/TCP ... app=bandicoot-prod
kubernetes 10.115.240.1 ... 443/TCP ... <none>
Also update
ALPACA_POD=$(kubectl get pods -l app=alpaca \
-o jsonpath='{.items[0].metadata.name}')
to
ALPACA_POD=$(kubectl get pods -l app=alpaca-prod \
-o jsonpath='{.items[0].metadata.name}')
|
Kenny Yeung |
Sep 04, 2022 |
|
|
Page page 32 (Chapter 3: Deploying a Kubernetes Cluster)
"Running Kubernetes in Docker" section, example commands. Command: export KUBECONFIG="$(kind get kubeconfig-path)" |
'kind' no longer supports 'kind get kubeconfig-path'.
Apparently it was deprecated/removed in 0.6.0. There is a 'kind get kubeconfig' but it prints the full config yaml content instead.
github kubernetes-sigs/kind/issues/1060 "KUBECONFIG management migration for kind v0.6.0+ #1060" has a note about how to migrate to the new way to do it;
Quote:
You can emulate the previous behavior by switching from:
kind create cluster --name=foo
export KUBECONFIG="$(kind get kubeconfig-path --name=foo)"
to:
export KUBECONFIG="${HOME}/.kube/kind-config-foo"
kind create cluster --name=foo
Note from the Author or Editor: Remove the line `$ export KUBECONFIG="$(kind get kubeconfig-path)"` as the cluster context is now set by default
|
Anonymous |
Sep 17, 2022 |
|
|
Page pp50 (Chapter 5 Pods / Creating a Pod)
First example command in "Creating a Pod" section |
`kubectl run` no longer supports `--generated`. It appears it was deprecated almost 4 years ago, and entirely removed since then., so this example is well out-of-date.
This command "seemed" to work by simply omitting the `--generator=run-pod/v1` parameter.
Note from the Author or Editor: Should be updated to (I believe that this change has already been made)
$ docker run -d --name kuard \
--publish 8080:8080 \
gcr.io/kuar-demo/kuard-amd64:blue
|
Anonymous |
Sep 18, 2022 |
|
|
Page Chapter 5
First example under "Creating a Pod" |
The example given uses the --generator parameter, which has been deprecated (per GitHub pull request 87077). Removing this parameter in its entirety (i.e., '--generator=run-pod/v1') will cause the command to complete correctly.
Note from the Author or Editor: The generate flag needs to be removed so that the command looks like
$ kubectl run kuard \
--image=gcr.io/kuar-demo/kuard-amd64:blue
|
Anonymous |
Nov 02, 2022 |
|
|
Page Page 290 Appendex A. Building Your Own Cluster
5th paragraph - kubectl commands right before "SUMMARY" |
The two kubectl commands that can inspect the two objects created by the "kubectl apply -f kube-flannel.yaml" command should be the following:
$ kubectl describe --namespace=kube-flannel configmaps/kube-flannel-cfg
$ kubectl describe --namespace=kube-flannel daemonsets/kube-flannel-ds
The flannel objects are created in namespace=kube-flannel, not namespace=kubesystem as shown incorrectly in the commands given in the book.
Note from the Author or Editor: The following
$ kubectl describe --namespace=kube-system configmaps/kube-flannel-cfg
$ kubectl describe --namespace=kube-system daemonsets/kube-flannel-ds
must be updated to
$ kubectl describe --namespace=kube-flannel configmaps/kube-flannel-cfg
$ kubectl describe --namespace=kube-flannel daemonsets/kube-flannel-ds
|
Elliot Weitzman |
Sep 30, 2022 |
|
|
Page Page 111 - AutoScaling a ReplicaSet
4th paragraph - To scale a ReplicaSet ... |
As directed in the section, the creation of the HPA (HorizontalPodAutoScaler) will succeed, but it will not operate correctly because the Podtemplate in the ReplicaSet (shown on the top of Page 107) does not contain Resource metrics for CPU (or Memory). The HPA uses those resource metrics in the pod to calculate the utilization (CPU utilization) for autoscaling.
Without the Resource metrics in the PodTemplate, the following messages are shown when the HPA is created:
kubectl describe hpa kuard
Conditions:
Type Status Reason Message
---- ------ ------ -------
AbleToScale True SucceededGetScale the HPA controller was able to get the target's current scale
ScalingActive False FailedGetResourceMetric the HPA was unable to compute the replica count: failed to get cpu utilization: missing request for cpu
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedGetResourceMetric 5s horizontal-pod-autoscaler failed to get cpu utilization: missing request for cpu
Warning FailedComputeMetricsReplicas 5s horizontal-pod-autoscaler invalid metrics (1 invalid out of 1), first error is: failed to get cpu resource metric value: failed to get cpu utilization: missing request for cpu
To resolve this, add the following to the PodTemplate spec for ReplicaSet kuard:
resources:
requests:
cpu: "500m"
memory: "128Mi"
Note from the Author or Editor: Update example 9-1 kuard-rs.yaml to add the following at the end (from resources and beyond. Added prior lines just to illustrate for spacing and context.
```
spec:
containers:
- name: kuard
image: "gcr.io/kuar-demo/kuard-amd64:green"
resources:
requests:
cpu: "500m"
memory: "128Mi"
```
|
Elliot Weitzman |
Oct 10, 2022 |
|
|
Page Resource Management section on p. 58
Last paragraph and note at bottom of page |
- MB is the power of 10 and MiB power of 2, not the other way around.
- “400m” is 0.4 bytes, not "0.4 MB" as written.
Note from the Author or Editor: Needs to be updated from 0.4MB to 0.4 bytes
|
Apoorva Srivastava |
Nov 24, 2022 |
|
|
Page The Future of Ingress (in Chapter 8.)
2nd paragraph |
In Kindle edition, second sentence of the second paragraph of the section reads "The way that multiple objects compbine". The word "combine" is misspelled.
Note from the Author or Editor: Thank you very much for reporting this typo. We will get it updated as soon as possible.
Regards,
Kubernetes Up and Running 3E Authors
|
Jędrzej Dąbrowa |
Jan 02, 2023 |
|
|
Page Ch 2 Creating and Running Containers
Exploring the kuard Application |
The text says "kuard exposes a simple web interface, wich you can load by pointing your browser at localhost:3000", but the kuard container was published to port 8080 in the prior section.
Note from the Author or Editor: Should be updated to http://localhost:8080 in italics
|
Collin Bell |
Jan 28, 2023 |
|
Printed |
Page p94 and p95
First paragraph on 94 second on 95 |
This output
$ kubectl apply -f simple-ingress.yaml
ingress.extensions/simple-ingress created
needs to be updated to
$ kubectl apply -f simple-ingress.yaml
ingress.networking.k8s.io/simple-ingress created
and this output
$ kubectl apply -f host-ingress.yaml
ingress.extensions/host-ingress created
needs to be updated to
$ kubectl apply -f host-ingress.yaml
ingress.networking.k8s.io/host-ingress created
|
Lachlan Evenson |
Feb 27, 2023 |
|
Printed |
Page p30
Installing Kubernetes with GKE section |
Create note callout box which includes the following:
You may need to first enable the Kubernetes Engine API using the following command `gcloud services enable container`
|
Lachlan Evenson |
Feb 27, 2023 |
|
|
Page 31
Section: Installing Kubernetes locally using minikube, 2nd pp. |
Background:
While minikube's original driver was VirtialBox, and Windows requires hyper-v to function this is not true of Linux which current supports 7 different drivers or ways to run minikube.
Therefore the following :
"Because it only runs in a VM on a single node, it doesn't provide the reliability of a distributed Kubernetes cluster." is incorrect and unnecessarily misleading.
"only runs in a VM" is incorrect and irrelevant to the point the the sentence is trying to convey.
It should be changed to :
"Because it only runs on a single node, it doesn't provide the reliability of a distributed Kubernetes cluster."
Note from the Author or Editor: Update "Because it only runs in a VM on a single node,..."
to ""Because it only runs on a single node,...."
|
Robert Leland |
Oct 11, 2022 |
|
|
Page 187
1st Paragraph |
Page 187, first paragraph, sentence ending: "which we can access at the full domain name mysql.svc.default.cluster"
should be:
"which we can access at the full domain name mysql.default.svc.cluster" or
"which we can access at the full domain name mysql.default.svc.cluster.local"
The format of the fully qualified DNS name for services is:
service-name.namespace-name.svc.cluster-domain-name
Note from the Author or Editor: which we can access at the full domain name mysql.svc.default.cluster
Should be updated to
which we can access at the full domain name mysql.default.svc.cluster.local
|
Elliot Weitzman |
Nov 13, 2022 |
|
|
Page 194
Just above last paragraph on the page |
The last kubectl command:
kubectl apply -f mongo-simple.yaml
should be:
kubectl apply -f mongo.yaml
Note from the Author or Editor: The last kubectl command:
kubectl apply -f mongo-simple.yaml
should be:
kubectl apply -f mongo.yaml
|
Elliot Weitzman |
Nov 13, 2022 |
|