Перейти к содержанию

Bootstrapping the etcd Cluster

Kubernetes components are stateless and store cluster state in etcd. In this lab you will bootstrap a three node etcd cluster and configure it for high availability and secure remote access.

Prerequisites

Copy etcd binaries and systemd unit files to the server instance:

scp \
  downloads/etcd-v3.4.36-linux-amd64.tar.gz \
  units/etcd.service \
  root@server:~/

The commands in the following sections of this lab must be run on the server machine. Login to the server machine using the ssh command. Example:

ssh root@server

Bootstrapping an etcd Cluster

Install the etcd Binaries

If you don't already have it installed, first install the tar utility using dnf. And then extract and install the etcd server and the etcdctl command line utility:

  dnf -y install tar
  tar -xvf etcd-v3.4.36-linux-amd64.tar.gz
  mv etcd-v3.4.36-linux-amd64/etcd* /usr/local/bin/

Configure the etcd Server

  mkdir -p /etc/etcd /var/lib/etcd
  chmod 700 /var/lib/etcd
  cp ca.crt kube-api-server.key kube-api-server.crt \
    /etc/etcd/

Each etcd member must have a unique name within an etcd cluster. Set the etcd name to match the hostname of the current compute instance:

Create the etcd.service systemd unit file:

mv etcd.service /etc/systemd/system/
chmod 644 /etc/systemd/system/etcd.service

Note

Although considered bad security form, you might have to temporarily or permanently disable SELinux if you run into any issues starting the etcd systemd service. The proper fix is to investigate and create the needed policy files using tools such as ausearch, audit2allow and so on.
The commands get SELinux out of the way and disable it is by running the following:

sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

Start the etcd Server

  systemctl daemon-reload
  systemctl enable etcd
  systemctl start etcd

Verification

List the etcd cluster members:

etcdctl member list
6702b0a34e2cfd39, started, controller, http://127.0.0.1:2380, http://127.0.0.1:2379, false

Next: Bootstrapping the Kubernetes Control Plane