kubernetes: Incorrect etcd version bundled with etcd docker image - k8s.gcr.io/etcd:3.5.0-0

What happened?

I am running a Kubernetes v1.22.2 cluster on ppc64le which uses k8s.gcr.io/etcd:3.5.0-0 for etcd. The actual etcd version bundled with this docker image is v3.4.13 which seems incorrect. Because of this version mismatch, etcd cannot recognize the flags (–experimental-enable-distributed-tracing) required to enable OpenTelemetry as tracing was enabled in v3.5 onwards

# kubectl exec -it $(kubectl get pods -n kube-system| grep etcd |awk '{print $1}') -n kube-system -- etcd --version
etcd Version: 3.4.13
Git SHA: ae9734ed2
Go Version: go1.13.5
Go OS/Arch: linux/ppc64le

What did you expect to happen?

etcd should have worked with the Tracing flags but it does not recognize them so it fails causing the cluster to go down.

How can we reproduce it (as minimally and precisely as possible)?

NOTE - This is for ppc64le hardware Create a single node kubernetes cluster (v1.22.2), edit /etc/kubernetes/manifests/etcd.yaml and add the below flags -

--experimental-enable-distributed-tracing=true
--experimental-distributed-tracing-address=0.0.0.0:4317
--experimental-distributed-tracing-service-name=etcd

This will cause etcd to fail with the below error -

2021-10-28T11:34:21.460593118Z stderr F flag provided but not defined: -experimental-enable-distributed-tracing
2021-10-28T11:34:21.460620131Z stderr F Usage:
2021-10-28T11:34:21.460626933Z stderr F
2021-10-28T11:34:21.460632029Z stderr F   etcd [flags]
2021-10-28T11:34:21.460637777Z stderr F     Start an etcd server.

Anything else we need to know?

This error has been seen on a cluster created on ppc64le h/w

Kubernetes version

$ kubectl version
# kubectl version
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.2", GitCommit:"8b5a19147530eaac9476b0ab82980b4088bbc1b2", GitTreeState:"clean", BuildDate:"2021-09-15T21:38:50Z", GoVersion:"go1.16.8", Compiler:"gc", Platform:"linux/ppc64le"}
Server Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.2", GitCommit:"8b5a19147530eaac9476b0ab82980b4088bbc1b2", GitTreeState:"clean", BuildDate:"2021-09-15T21:32:41Z", GoVersion:"go1.16.8", Compiler:"gc", Platform:"linux/ppc64le"}

Cloud provider

NA - This is seen on a IBM Power Virtual Machine

OS version

# On Linux:
$ cat /etc/os-release
NAME="CentOS Linux"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"

$ uname -a
Linux piy-test-ot 4.18.0-305.19.1.el8_4.ppc64le #1 SMP Wed Sep 15 15:51:05 UTC 2021 ppc64le ppc64le ppc64le GNU/Linux


Install tools

Container runtime (CRI) and and version (if applicable)

containerd has been used as runtime

Related plugins (CNI, CSI, …) and versions (if applicable)

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Comments: 20 (15 by maintainers)

Most upvoted comments

I think the reason was incorrect promotion in https://github.com/kubernetes/k8s.io/pull/2236 It selected sha256:9ce33ba33d8e738a5b85ed50b5080ac746deceed4a7496c550927a7a19ca3b6d that was result of docker pull image

Instead of sha256:9aeb407e6e534cdc82317a6f435b34e64d9c2bb60af945fae4f4204e47c4e6c8 that was under tag image

Using docker pull is not correct way to get image hashes as docker will pull the image for local machine and not the multi arch manifest.

ppc64le platform

$ docker run --platform=linux/amd64 -ti k8s.gcr.io/etcd:3.5.0-0 etcd --version
etcd Version: 3.4.13
Git SHA: ae9734ed2
Go Version: go1.13.5
Go OS/Arch: linux/ppc64le

amd64 platform

$ docker run -ti k8s.gcr.io/etcd:3.5.0-0 etcd --version
etcd Version: 3.5.0
Git SHA: 946a5a6f2
Go Version: go1.16.3
Go OS/Arch: linux/amd64

something is fishy!