This the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

ARM

Desgin docs for ARM processor development

Some of these date back to older versions but efforts are made to keep the most important - sometimes :)

LambdaStack ARM design document

Affected version: 1.1.x

Goals

This document outlines an aproach to add (partial) ARM support to LambdaStack. The requirements:

  • ARMv8/ARM64 architecture
  • Centos 7
  • "any" provider as we do not want to provide ARM infrastructure on any cloud providers yet through Terraform
  • LambdaStack components needed ordered by priority:
    1. Kubernetes
    2. Kafka
    3. HAProxy
    4. Keycloak (This is the only deployment we need to support from the applications role)
    5. PostgreSQL (Would only be used by keycloak and does not needs to support a single deployment)
    6. RabbitMQ
    7. Logging (ELK + filebeat)
    8. Monitoring (Prometheus + Grafana + Exporters) Initial research here shows additional information about available packages and effected roles for each component.

Approach

The 2 high level approaches that have been opted so far:

  1. Add “architecture” flag when using LambdaStack
  2. Add new OS (CentosARM64 fe.)

Have 2 big disadvanges from the start:

  1. Will require an additional input which makes things more confusing as they will need supply not only the OS but also Architecture for (offline) install. This should not be needed as we can detect the architecture we are working on, on all required levels.
  2. Does not require additional input but this will lead to code duplication in the repository role as we need to maintain download-requirements.sh for each OS and architecture then.

That is why I opt for an approach where we don't add any architecture flag or new additional OS. The architecture we can handle on the code level and on the OS level only the requirements.txt might be different for each as indicated by initial research here.

Changes required

Repostitory role

In the repository role we need to change the download of the requirements to support additional architectures as download requirements might be different as:

  • Some components/roles might not have packages/binaries/containers that support ARM
  • Some filenames for binaries will be different per architecture
  • Some package repositories will have different URLs per architecture

Hence we should make a requirements.txt for each architecture we want to support, for example:

  • requirements_x86_64.txt (Should be the default and present)
  • requirements_arm64.txt

The download-requirements.sh script should be able to figure out which one to select based on the output of:

uname -i

Download role

In the download role, which is used to download plain files from the repository, we should add support for filename patterns and automatically look for current architecture (optionally with regex based suffix like linux[_-]amd64\.(tar\.gz|tar|zip)):

For example select between:

  • haproxy_exporter-0.12.0.linux-x86_64.tar.gz
  • haproxy_exporter-0.12.0.linux-arm64.tar.gz

based on ansible_architecture fact.

Note that this should be optional as some filenames do not contain architecture like Java based packages for example.

Artitecture support for each component/role

As per current requirements not every LambdaStack component is required to support ARM and there might be cases that a component/role can't support ARM as indicated by initial research here.

Thats why every component/role should be marked which architecture it supports. Maybe something in <rolename>/defaults/main.yml like:

supported_architectures:
  - all ?
  - x86_64
  - arm64

We can assume the role/component will support everything if all is defined or if supported_architectures is not present.

Pre-flight check

The preflight should be expanded to check if all the components/roles we want to install from the inventory actually support the architecture we want to use. We should be able to do this with the definition from the above point. This way we will make sure people can only install components on ARM which we actually support.

Replace Skopeo with Crane

Currently we use Skopeo to download the image requirements. Skopeo however has the following issues with newer versions:

  • No support anymore for universal Go binaries. Each OS would need to have each own build version
  • Sketchy support for ARM64

That is why we should replace it with Crane.

  1. This tool can do the same as Skopeo:
./skopeo --insecure-policy copy docker://kubernetesui/dashboard:v2.3.1 docker-archive:skopeodashboard:v2.3.1
./crane pull --insecure kubernetesui/dashboard:v2.3.1 dashboard.tar

The above will produce the same Docker image package.

  1. Supports the universal cross distro binary.
  2. Has support for both ARM64 and x86_64.
  3. Has official pre-build binaries, unlike Skopeo.

1 - CentOS ARM Analysis

Desgin docs for CentOS ARM processor development

CentOS requirements.txt ARM analysis

Packages

Name ARM Supported Info Required
apr + +
apr-util + +
centos-logos + ?
createrepo + +
deltarpm + +
httpd + +
httpd-tools + +
libxml2-python + +
mailcap + +
mod_ssl + +
python-chardet + +
python-deltarpm + +
python-kitchen + +
yum-utils + +
audit + +
bash-completion + +
c-ares + ---
ca-certificates + +
cifs-utils + +
conntrack-tools + +
containerd.io + +
container-selinux + ?
cri-tools-1.13.0 + ?
curl + +
dejavu-sans-fonts + +
docker-ce-19.03.14 + +
docker-ce-cli-19.03.14 + +
ebtables + +
elasticsearch-curator-5.8.3 --- elasticsearch-curator-3.5.1 (from separate repo v3) +
elasticsearch-oss-7.9.1 + +
erlang-23.1.4 + +
ethtool + +
filebeat-7.9.2 + +
firewalld + +
fontconfig + +
fping + +
gnutls + +
grafana-7.3.5 + +
gssproxy + +
htop + +
iftop + +
ipset + +
java-1.8.0-openjdk-headless + +
javapackages-tools + +
jq + +
libini_config + +
libselinux-python + +
libsemanage-python + +
libX11 + +
libxcb + +
libXcursor + +
libXt + +
logrotate + +
logstash-oss-7.8.1 + +
net-tools + +
nfs-utils + +
nmap-ncat + ?
opendistro-alerting-1.10.1* + +
opendistro-index-management-1.10.1* + +
opendistro-job-scheduler-1.10.1* + +
opendistro-performance-analyzer-1.10.1* + +
opendistro-security-1.10.1* + +
opendistro-sql-1.10.1* + +
opendistroforelasticsearch-kibana-1.10.1* --- opendistroforelasticsearch-kibana-1.13.0 +
openssl + +
perl + +
perl-Getopt-Long + +
perl-libs + +
perl-Pod-Perldoc + +
perl-Pod-Simple + +
perl-Pod-Usage + +
pgaudit12_10 + ---
pgbouncer-1.10.* --- ---
pyldb + +
python-firewall + +
python-kitchen + +
python-lxml + +
python-psycopg2 + +
python-setuptools + ?
python-slip-dbus + +
python-ipaddress + ?
python-backports + ?
quota + ?
rabbitmq-server-3.8.9 + +
rh-haproxy18 --- ---
rh-haproxy18-haproxy-syspaths --- ---
postgresql10-server + +
repmgr10-4.0.6 --- ---
samba-client + +
samba-client-libs + +
samba-common + +
samba-libs + +
sysstat + +
tar + +
telnet + +
tmux + +
urw-base35-fonts + +
unzip + +
vim-common + +
vim-enhanced + +
wget + +
xorg-x11-font-utils + +
xorg-x11-server-utils + +
yum-plugin-versionlock + +
yum-utils + +
rsync + +
kubeadm-1.18.6 + +
kubectl-1.18.6 + +
kubelet-1.18.6 + +
kubernetes-cni-0.8.6-0 + +

Files

Name ARM Supported Info Required
https://github.com/prometheus/haproxy_exporter/releases/download/v0.10.0/haproxy_exporter-0.10.0.linux-arm64.tar.gz + dedicated package +
https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.14.0/jmx_prometheus_javaagent-0.14.0.jar + jar +
https://archive.apache.org/dist/kafka/2.6.0/kafka_2.12-2.6.0.tgz + shell scripts + jar libraries +
https://github.com/danielqsj/kafka_exporter/releases/download/v1.2.0/kafka_exporter-1.2.0.linux-arm64.tar.gz + dedicated package +
https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-arm64.tar.gz + dedicated package +
https://github.com/prometheus/prometheus/releases/download/v2.10.0/prometheus-2.10.0.linux-arm64.tar.gz + dedicated package +
https://github.com/prometheus/alertmanager/releases/download/v0.17.0/alertmanager-0.17.0.linux-arm64.tar.gz + dedicated package +
https://archive.apache.org/dist/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz + shell scripts + jar libraries ---
https://archive.apache.org/dist/ignite/2.9.1/apache-ignite-2.9.1-bin.zip + shell scripts + jar libraries ---
https://releases.hashicorp.com/vault/1.7.0/vault_1.7.0_linux_arm64.zip + dedicated package ---
https://get.helm.sh/helm-v3.2.0-linux-arm64.tar.gz + dedicated package ---
https://github.com/hashicorp/vault-helm/archive/v0.9.0.tar.gz + yaml files ---
https://github.com/wrouesnel/postgres_exporter/releases/download/v0.8.0/postgres_exporter_v0.8.0_linux-amd64.tar.gz --- +
https://charts.bitnami.com/bitnami/node-exporter-1.1.2.tgz + yaml files +
https://helm.elastic.co/helm/filebeat/filebeat-7.9.2.tgz + yaml files +

Images

Name ARM Supported Info Required
haproxy:2.2.2-alpine + arm64v8/haproxy +
kubernetesui/dashboard:v2.3.1 + +
kubernetesui/metrics-scraper:v1.0.7 + +
registry:2 +
hashicorp/vault-k8s:0.7.0 --- https://hub.docker.com/r/moikot/vault-k8s / custom build ---
vault:1.7.0 + ---
apacheignite/ignite:2.9.1 --- https://github.com/apache/ignite/tree/master/docker/apache-ignite / custom build ---
bitnami/pgpool:4.1.1-debian-10-r29 --- ---
brainsam/pgbouncer:1.12 --- ---
istio/pilot:1.8.1 --- https://github.com/istio/istio/issues/21094 / custom build ---
istio/proxyv2:1.8.1 --- https://github.com/istio/istio/issues/21094 / custom build ---
istio/operator:1.8.1 --- https://github.com/istio/istio/issues/21094 / custom build ---
jboss/keycloak:4.8.3.Final --- +
jboss/keycloak:9.0.0 --- +
rabbitmq:3.8.9 + +
coredns/coredns:1.5.0 + +
quay.io/coreos/flannel:v0.11.0 + +
calico/cni:v3.8.1 + +
calico/kube-controllers:v3.8.1 + +
calico/node:v3.8.1 + +
calico/pod2daemon-flexvol:v3.8.1 + +
k8s.gcr.io/kube-apiserver:v1.18.6 + k8s.gcr.io/kube-apiserver-arm64:v1.18.6 +
k8s.gcr.io/kube-controller-manager:v1.18.6 + k8s.gcr.io/kube-controller-manager-arm64:v1.18.6 +
k8s.gcr.io/kube-scheduler:v1.18.6 + k8s.gcr.io/kube-scheduler-arm64:v1.18.6 +
k8s.gcr.io/kube-proxy:v1.18.6 + k8s.gcr.io/kube-proxy-arm64:v1.18.6 +
k8s.gcr.io/coredns:1.6.7 --- coredns/coredns:1.6.7 +
k8s.gcr.io/etcd:3.4.3-0 + k8s.gcr.io/etcd-arm64:3.4.3-0 +
k8s.gcr.io/pause:3.2 + k8s.gcr.io/pause-arm64:3.2 +

Custom builds

Build multi arch image for Keycloak 9:

Clone repo: https://github.com/keycloak/keycloak-containers/

Checkout tag: 9.0.0

Change dir to: keycloak-containers/server

Create new builder: docker buildx create --name mybuilder

Switch to builder: docker buildx use mybuilder

Inspect builder and make sure it supports linux/amd64, linux/arm64: docker buildx inspect --bootstrap

Build and push container: docker buildx build --platform linux/amd64,linux/arm64 -t repo/keycloak:9.0.0 --push .


Additional info:

https://hub.docker.com/r/jboss/keycloak/dockerfile

https://github.com/keycloak/keycloak-containers/

https://catalog.redhat.com/software/containers/ubi8/ubi-minimal/5c359a62bed8bd75a2c3fba8?architecture=arm64&container-tabs=overview

https://docs.docker.com/docker-for-mac/multi-arch/

Components to roles mapping

Component name Roles
Repository repository
image-registry
node-exporter
firewall
filebeat
docker
Kubernetes kubernetes-master
kubernetes-node
applications
node-exporter
haproxy_runc
kubernetes_common
Kafka zookeeper
jmx-exporter
kafka
kafka-exporter
node-exporter
ELK (Logging) logging
elasticsearch
elasticsearch_curator
logstash
kibana
node-exporter
Exporters node-exporter
kafka-exporter
jmx-exporter
haproxy-exporter
postgres-exporter
PostgreSQL postgresql
postgres-exporter
node-exporter
Keycloak applications
RabbitMQ rabbitmq
node-exporter
HAProxy haproxy
haproxy-exporter
node-exporter
haproxy_runc
Monitoring prometheus
grafana
node-exporter

Except above table, components require following roles to be checked:

  • upgrade
  • backup
  • download
  • firewall
  • filebeat
  • recovery (n/a kubernetes)

2 - RedHat ARM Analysis

Desgin docs for RedHat ARM processor development

RedHat requirements.txt ARM analysis

Packages

Name ARM Supported Info Required
apr + +
apr-util + +
redhat-logos + ?
createrepo + +
deltarpm + +
httpd + +
httpd-tools + +
libxml2-python + +
mailcap + +
mod_ssl + +
python-chardet + +
python-deltarpm + +
python-kitchen + +
yum-utils + +
audit + +
bash-completion + +
c-ares + ---
ca-certificates + +
cifs-utils + +
conntrack-tools + +
containerd.io + +
container-selinux + ?
cri-tools-1.13.0 + ?
curl + +
dejavu-sans-fonts + +
docker-ce-19.03.14 + +
docker-ce-cli-19.03.14 + +
ebtables + +
elasticsearch-curator-5.8.3 --- elasticsearch-curator-3.5.1 (from separate repo v3) +
elasticsearch-oss-7.10.2 + +
ethtool + +
filebeat-7.9.2 + +
firewalld + +
fontconfig + +
fping + +
gnutls + +
grafana-7.3.5 + +
gssproxy + +
htop + +
iftop + +
ipset + +
java-1.8.0-openjdk-headless + +
javapackages-tools + +
jq + +
libini_config + +
libselinux-python + +
libsemanage-python + +
libX11 + +
libxcb + +
libXcursor + +
libXt + +
logrotate + +
logstash-oss-7.8.1 + +
net-tools + +
nfs-utils + +
nmap-ncat + ?
opendistro-alerting-1.13.1* + +
opendistro-index-management-1.13.1* + +
opendistro-job-scheduler-1.13.1* + +
opendistro-performance-analyzer-1.13.1* + +
opendistro-security-1.13.1* + +
opendistro-sql-1.13.1* + +
opendistroforelasticsearch-kibana-1.13.1* + +
unixODBC + +
openssl + +
perl + +
perl-Getopt-Long + +
perl-libs + +
perl-Pod-Perldoc + +
perl-Pod-Simple + +
perl-Pod-Usage + +
pgaudit12_10 ? ---
pgbouncer-1.10.* ? ---
policycoreutils-python + +
pyldb + +
python-cffi + +
python-firewall + +
python-kitchen + +
python-lxml + +
python-psycopg2 + +
python-pycparser + +
python-setuptools + ?
python-slip-dbus + +
python-ipaddress + ?
python-backports + ?
quota + ?
rabbitmq-server-3.8.9 + +
rh-haproxy18 --- ---
rh-haproxy18-haproxy-syspaths --- ---
postgresql10-server + +
repmgr10-4.0.6 --- ---
samba-client + +
samba-client-libs + +
samba-common + +
samba-libs + +
sysstat + +
tar + +
telnet + +
tmux + +
urw-base35-fonts ? Need to be verified, no package found +
unzip + +
vim-common + +
vim-enhanced + +
wget + +
xorg-x11-font-utils + +
xorg-x11-server-utils + +
yum-plugin-versionlock + +
yum-utils + +
rsync + +
kubeadm-1.18.6 + +
kubectl-1.18.6 + +
kubelet-1.18.6 + +
kubernetes-cni-0.8.6-0 + +

Files

Name ARM Supported Info Required
https://packages.erlang-solutions.com/erlang/rpm/centos/7/aarch64/esl-erlang_23.1.5-1~centos~7_arm64.rpm + dedicated package +
https://github.com/prometheus/haproxy_exporter/releases/download/v0.10.0/haproxy_exporter-0.10.0.linux-arm64.tar.gz + dedicated package +
https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.14.0/jmx_prometheus_javaagent-0.14.0.jar + jar +
https://archive.apache.org/dist/kafka/2.6.0/kafka_2.12-2.6.0.tgz + shell scripts + jar libraries +
https://github.com/danielqsj/kafka_exporter/releases/download/v1.2.0/kafka_exporter-1.2.0.linux-arm64.tar.gz + dedicated package +
https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-arm64.tar.gz + dedicated package +
https://github.com/prometheus/prometheus/releases/download/v2.10.0/prometheus-2.10.0.linux-arm64.tar.gz + dedicated package +
https://github.com/prometheus/alertmanager/releases/download/v0.17.0/alertmanager-0.17.0.linux-arm64.tar.gz + dedicated package +
https://archive.apache.org/dist/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz + shell scripts + jar libraries ---
https://archive.apache.org/dist/ignite/2.9.1/apache-ignite-2.9.1-bin.zip + shell scripts + jar libraries ---
https://releases.hashicorp.com/vault/1.7.0/vault_1.7.0_linux_arm64.zip + dedicated package ---
https://get.helm.sh/helm-v3.2.0-linux-arm64.tar.gz + dedicated package ---
https://github.com/hashicorp/vault-helm/archive/v0.9.0.tar.gz + yaml files ---
https://github.com/prometheus-community/postgres_exporter/releases/download/v0.9.0/postgres_exporter-0.9.0.linux-arm64.tar.gz --- +
https://charts.bitnami.com/bitnami/node-exporter-1.1.2.tgz + yaml files +
https://helm.elastic.co/helm/filebeat/filebeat-7.9.2.tgz + yaml files +

Images

Name ARM Supported Info Required
haproxy:2.2.2-alpine + arm64v8/haproxy +
kubernetesui/dashboard:v2.3.1 + +
kubernetesui/metrics-scraper:v1.0.7 + +
registry:2 +
hashicorp/vault-k8s:0.7.0 --- https://hub.docker.com/r/moikot/vault-k8s / custom build ---
vault:1.7.0 + ---
lambdastack/keycloak:9.0.0 + custom build +
bitnami/pgpool:4.1.1-debian-10-r29 --- ---
brainsam/pgbouncer:1.12 --- ---
istio/pilot:1.8.1 --- https://github.com/istio/istio/issues/21094 / custom build ---
istio/proxyv2:1.8.1 --- https://github.com/istio/istio/issues/21094 / custom build ---
istio/operator:1.8.1 --- https://github.com/istio/istio/issues/21094 / custom build ---
jboss/keycloak:4.8.3.Final --- ---
jboss/keycloak:9.0.0 --- ---
rabbitmq:3.8.9 --- ---
coredns/coredns:1.5.0 + +
quay.io/coreos/flannel:v0.11.0 + +
calico/cni:v3.8.1 + +
calico/kube-controllers:v3.8.1 + +
calico/node:v3.8.1 + +
calico/pod2daemon-flexvol:v3.8.1 + +
k8s.gcr.io/kube-apiserver:v1.18.6 + k8s.gcr.io/kube-apiserver-arm64:v1.18.6 +
k8s.gcr.io/kube-controller-manager:v1.18.6 + k8s.gcr.io/kube-controller-manager-arm64:v1.18.6 +
k8s.gcr.io/kube-scheduler:v1.18.6 + k8s.gcr.io/kube-scheduler-arm64:v1.18.6 +
k8s.gcr.io/kube-proxy:v1.18.6 + k8s.gcr.io/kube-proxy-arm64:v1.18.6 +
k8s.gcr.io/coredns:1.6.7 --- coredns/coredns:1.6.7 +
k8s.gcr.io/etcd:3.4.3-0 + k8s.gcr.io/etcd-arm64:3.4.3-0 +
k8s.gcr.io/pause:3.2 + k8s.gcr.io/pause-arm64:3.2 +

Custom builds

Build multi arch image for Keycloak 9:

Clone repo: https://github.com/keycloak/keycloak-containers/

Checkout tag: 9.0.0

Change dir to: keycloak-containers/server

Create new builder: docker buildx create --name mybuilder

Switch to builder: docker buildx use mybuilder

Inspect builder and make sure it supports linux/amd64, linux/arm64: docker buildx inspect --bootstrap

Build and push container: docker buildx build --platform linux/amd64,linux/arm64 -t repo/keycloak:9.0.0 --push .


Additional info:

https://hub.docker.com/r/jboss/keycloak/dockerfile

https://github.com/keycloak/keycloak-containers/

https://catalog.redhat.com/software/containers/ubi8/ubi-minimal/5c359a62bed8bd75a2c3fba8?architecture=arm64&container-tabs=overview

https://docs.docker.com/docker-for-mac/multi-arch/

Components to roles mapping

Component name Roles
Repository repository
image-registry
node-exporter
firewall
filebeat
docker
Kubernetes kubernetes-master
kubernetes-node
applications
node-exporter
haproxy_runc
kubernetes_common
Kafka zookeeper
jmx-exporter
kafka
kafka-exporter
node-exporter
ELK (Logging) logging
elasticsearch
elasticsearch_curator
logstash
kibana
node-exporter
Exporters node-exporter
kafka-exporter
jmx-exporter
haproxy-exporter
postgres-exporter
PostgreSQL postgresql
postgres-exporter
node-exporter
Keycloak applications
RabbitMQ rabbitmq
node-exporter
HAProxy haproxy
haproxy-exporter
node-exporter
haproxy_runc
Monitoring prometheus
grafana
node-exporter

Except above table, components require following roles to be checked:

  • backup
  • recovery (n/a kubernetes)

Known issues:

  • Postgresql repository need to be verify : "https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7Server-aarch64/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found"
  • Additional repositories need to be enabled: "rhel-7-for-arm-64-extras-rhui-rpms" and "rhel-7-for-arm-64-rhui-rpms"
  • No package found for urw-base35-fonts
  • Only RHEL-7.6 and 8.x images are available for AWS

3 - Ubuntu ARM Analysis

Desgin docs for Ubuntu ARM processor development

Ubuntu requirements.txt ARM analysis

Packages

Name ARM Supported Info Required
adduser + +
apt-transport-https + +
auditd + +
bash-completion + +
build-essential + +
ca-certificates + +
cifs-utils + +
containerd.io + +
cri-tools + +
curl + +
docker-ce + +
docker-ce-cli + +
ebtables + +
elasticsearch-curator + +
elasticsearch-oss + +
erlang-asn1 + +
erlang-base + +
erlang-crypto + +
erlang-eldap + +
erlang-ftp + +
erlang-inets + +
erlang-mnesia + +
erlang-os-mon + +
erlang-parsetools + +
erlang-public-key + +
erlang-runtime-tools + +
erlang-snmp + +
erlang-ssl + +
erlang-syntax-tools + +
erlang-tftp + +
erlang-tools + +
erlang-xmerl + +
ethtool + +
filebeat + +
firewalld + +
fping + +
gnupg2 + +
grafana + +
haproxy + +
htop + +
iftop + +
jq + +
libfontconfig1 + +
logrotate + +
logstash-oss + +
netcat + +
net-tools + +
nfs-common + +
opendistro-alerting + +
opendistro-index-management + +
opendistro-job-scheduler + +
opendistro-performance-analyzer + +
opendistro-security + +
opendistro-sql + +
opendistroforelasticsearch-kibana + +
openjdk-8-jre-headless + +
openssl + +
postgresql-10 + +
python-pip + +
python-psycopg2 + +
python-selinux + +
python-setuptools + +
rabbitmq-server + +
smbclient + +
samba-common + +
smbclient + +
software-properties-common + +
sshpass + +
sysstat + +
tar + +
telnet + +
tmux + +
unzip + +
vim + +
rsync + +
libcurl4 + +
libnss3 + +
libcups2 + +
libavahi-client3 + +
libavahi-common3 + +
libjpeg8 + +
libfontconfig1 + +
libxtst6 + +
fontconfig-config + +
python-apt + +
python + +
python2.7 + +
python-minimal + +
python2.7-minimal + +
gcc + +
gcc-7 + +
g++ + +
g++-7 + +
dpkg-dev + +
libc6-dev + +
cpp + +
cpp-7 + +
libgcc-7-dev + +
binutils + +
gcc-8-base + +
libodbc1 + +
apache2 + +
apache2-bin + +
apache2-utils + +
libjq1 + +
gnupg + +
gpg + +
gpg-agent + +
smbclient + +
samba-libs + +
libsmbclient + +
postgresql-client-10 + +
postgresql-10-pgaudit + +
postgresql-10-repmgr + +
postgresql-common + +
pgbouncer + +
ipset + +
libipset3 + +
python3-decorator + +
python3-selinux + +
python3-slip + +
python3-slip-dbus + +
libpq5 + +
python3-psycopg2 + +
python3-jmespath + +
libpython3.6 + +
python-cryptography + +
python-asn1crypto + +
python-cffi-backend + +
python-enum34 + +
python-idna + +
python-ipaddress + +
python-six + +
kubeadm + +
kubectl + +
kubelet + +
kubernetes-cni + +

Files

Name ARM Supported Info Required
https://github.com/prometheus/haproxy_exporter/releases/download/v0.10.0/haproxy_exporter-0.10.0.linux-arm64.tar.gz + dedicated package +
https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.14.0/jmx_prometheus_javaagent-0.14.0.jar + jar +
https://archive.apache.org/dist/kafka/2.6.0/kafka_2.12-2.6.0.tgz + shell scripts + jar libraries +
https://github.com/danielqsj/kafka_exporter/releases/download/v1.2.0/kafka_exporter-1.2.0.linux-arm64.tar.gz + dedicated package +
https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-arm64.tar.gz + dedicated package +
https://github.com/prometheus/prometheus/releases/download/v2.10.0/prometheus-2.10.0.linux-arm64.tar.gz + dedicated package +
https://github.com/prometheus/alertmanager/releases/download/v0.17.0/alertmanager-0.17.0.linux-arm64.tar.gz + dedicated package +
https://archive.apache.org/dist/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz + shell scripts + jar libraries ---
https://archive.apache.org/dist/ignite/2.9.1/apache-ignite-2.9.1-bin.zip + shell scripts + jar libraries ---
https://releases.hashicorp.com/vault/1.7.0/vault_1.7.0_linux_arm64.zip + dedicated package ---
https://get.helm.sh/helm-v3.2.0-linux-arm64.tar.gz + dedicated package ---
https://github.com/hashicorp/vault-helm/archive/v0.9.0.tar.gz + yaml files ---
https://github.com/wrouesnel/postgres_exporter/releases/download/v0.8.0/postgres_exporter_v0.8.0_linux-amd64.tar.gz --- +
https://charts.bitnami.com/bitnami/node-exporter-1.1.2.tgz + yaml files +
https://helm.elastic.co/helm/filebeat/filebeat-7.9.2.tgz + yaml files +

Images

Name ARM Supported Info Required
haproxy:2.2.2-alpine + arm64v8/haproxy +
kubernetesui/dashboard:v2.3.1 + +
kubernetesui/metrics-scraper:v1.0.7 + +
registry:2 +
hashicorp/vault-k8s:0.7.0 --- https://hub.docker.com/r/moikot/vault-k8s / custom build ---
vault:1.7.0 + ---
apacheignite/ignite:2.9.1 --- https://github.com/apache/ignite/tree/master/docker/apache-ignite / custom build ---
bitnami/pgpool:4.1.1-debian-10-r29 --- ---
brainsam/pgbouncer:1.12 --- ---
istio/pilot:1.8.1 --- https://github.com/istio/istio/issues/21094 / custom build ---
istio/proxyv2:1.8.1 --- https://github.com/istio/istio/issues/21094 / custom build ---
istio/operator:1.8.1 --- https://github.com/istio/istio/issues/21094 / custom build ---
jboss/keycloak:4.8.3.Final --- +
jboss/keycloak:9.0.0 --- +
rabbitmq:3.8.9 + +
coredns/coredns:1.5.0 + +
quay.io/coreos/flannel:v0.11.0 + +
calico/cni:v3.8.1 + +
calico/kube-controllers:v3.8.1 + +
calico/node:v3.8.1 + +
calico/pod2daemon-flexvol:v3.8.1 + +
k8s.gcr.io/kube-apiserver:v1.18.6 + k8s.gcr.io/kube-apiserver-arm64:v1.18.6 +
k8s.gcr.io/kube-controller-manager:v1.18.6 + k8s.gcr.io/kube-controller-manager-arm64:v1.18.6 +
k8s.gcr.io/kube-scheduler:v1.18.6 + k8s.gcr.io/kube-scheduler-arm64:v1.18.6 +
k8s.gcr.io/kube-proxy:v1.18.6 + k8s.gcr.io/kube-proxy-arm64:v1.18.6 +
k8s.gcr.io/coredns:1.6.7 --- coredns/coredns:1.6.7 +
k8s.gcr.io/etcd:3.4.3-0 + k8s.gcr.io/etcd-arm64:3.4.3-0 +
k8s.gcr.io/pause:3.2 + k8s.gcr.io/pause-arm64:3.2 +

Custom builds

Build multi arch image for Keycloak 9:

Clone repo: https://github.com/keycloak/keycloak-containers/

Checkout tag: 9.0.0

Change dir to: keycloak-containers/server

Create new builder: docker buildx create --name mybuilder

Switch to builder: docker buildx use mybuilder

Inspect builder and make sure it supports linux/amd64, linux/arm64: docker buildx inspect --bootstrap

Build and push container: docker buildx build --platform linux/amd64,linux/arm64 -t repo/keycloak:9.0.0 --push .


Additional info:

https://hub.docker.com/r/jboss/keycloak/dockerfile

https://github.com/keycloak/keycloak-containers/

https://catalog.redhat.com/software/containers/ubi8/ubi-minimal/5c359a62bed8bd75a2c3fba8?architecture=arm64&container-tabs=overview

https://docs.docker.com/docker-for-mac/multi-arch/

Components to roles mapping

Component name Roles
Repository repository
image-registry
node-exporter
firewall
filebeat
docker
Kubernetes kubernetes-master
kubernetes-node
applications
node-exporter
haproxy_runc
kubernetes_common
Kafka zookeeper
jmx-exporter
kafka
kafka-exporter
node-exporter
ELK (Logging) logging
elasticsearch
elasticsearch_curator
logstash
kibana
node-exporter
Exporters node-exporter
kafka-exporter
jmx-exporter
haproxy-exporter
postgres-exporter
PostgreSQL postgresql
postgres-exporter
node-exporter
Keycloak applications
RabbitMQ rabbitmq
node-exporter
HAProxy haproxy
haproxy-exporter
node-exporter
haproxy_runc
Monitoring prometheus
grafana
node-exporter

Except above table, components require following roles to be checked:

  • upgrade
  • backup
  • download
  • firewall
  • filebeat
  • recovery (n/a kubernetes)