본문 바로가기

리눅스

[draft] 우분투에 etcd를 설치하는 방법

728x90

우분투에 etcd를 설치하는 방법

etcd는 분산형 키-값 저장소로 주로 Kubernetes와 같은 분산 시스템의 상태 저장에 사용됩니다.

etcd 사용자 및 그룹 생성

sudo useradd -r etcd

작업 디렉토리로 이동

cd /usr/local/src

etcd 바이너리 다운로드(3.5.15)

ETCD_VERSION=$(curl -s https://api.github.com/repos/etcd-io/etcd/releases/latest | grep -oP '(?<="tag_name": "v)[^"]*')
  • AMD(CentOS, Ubuntu)
curl -fsSL  "https://github.com/etcd-io/etcd/releases/download/v${ETCD_VERSION}/etcd-v${ETCD_VERSION}-linux-amd64.tar.gz" \
-o /usr/local/src/etcd-v${ETCD_VERSION}.tar.gz
  • ARM(macOS)
curl -fsSL  "https://github.com/etcd-io/etcd/releases/download/v${ETCD_VERSION}/etcd-v${ETCD_VERSION}-linux-arm64.tar.gz" \
-o /usr/local/src/etcd-v${ETCD_VERSION}.tar.gz

압축 해제 및 설치

tar xzf /usr/local/src/etcd-v${ETCD_VERSION}.tar.gz -C /usr/local/bin --strip-components=1

etcd 데이터 디렉토리 생성 및 권한 부여

sudo mkdir /var/lib/etcd
sudo chown -R etcd:etcd /var/lib/etcd

etcd 서비스 설정

vim /etc/systemd/system/etcd.service
[Unit]
Description=etcd
Documentation=https://etcd.io
After=network.target

[Service]
User=etcd
ExecStart=/usr/local/bin/etcd --data-dir=/var/lib/etcd
Restart=always
RestartSec=5
LimitNOFILE=65536
LimitNPROC=4096
LimitCORE=infinity

[Install]
WantedBy=multi-user.target

etcd 시작 및 활성화

sudo systemctl daemon-reload
sudo systemctl start etcd
sudo systemctl enable etcd
더보기

---

기본 설정으로 실행

기본 설정으로 etcd를 실행합니다.
sudo /usr/local/bin/etcd --data-dir=/var/lib/etcd

---

etcd 로그 확인

journalctl -u etcd
728x90

네트워크 및 포트 확인

etcd는 기본적으로 포트 2379와 2380을 사용합니다.

sudo netstat -tuln | egrep '2379|2380'
$ sudo netstat -tuln | egrep '2379|2380'
tcp        0      0 127.0.0.1:2380          0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:2379          0.0.0.0:*               LISTEN

데이터 쓰기

  • etcdctl put 명령어를 사용하여 데이터를 etcd에 저장할 수 있습니다.
etcdctl put <key> <value>
etcdctl --endpoints=localhost:2379 put foo bar
$ etcdctl --endpoints=localhost:2379 put foo bar
OK

데이터 읽기

  • etcdctl get 명령어를 사용하여 저장된 데이터를 읽을 수 있습니다.
etcdctl get <key>
etcdctl --endpoints=localhost:2379 get foo
$ etcdctl --endpoints=localhost:2379 get foo
foo
bar

데이터 삭제

  • etcdctl del 명령어를 사용하여 특정 키의 데이터를 삭제할 수 있습니다.
etcdctl del <key>
etcdctl --endpoints=localhost:2379 del foo
$ etcdctl --endpoints=localhost:2379 del foo
1

모든 데이터 나열

  • 모든 데이터를 나열하려면 etcdctl get 명령어에 --prefix 플래그를 추가하여 범위 검색을 수행할 수 있습니다.
etcdctl get "" --prefix
$ etcdctl get "" --prefix
foo
bar

etcd 설치 스크립트

스크립트 작성

vim install_etcd.sh
#!/bin/bash

ETCD_VERSION=$(curl -s https://api.github.com/repos/etcd-io/etcd/releases/latest | grep -oP '(?<="tag_name": "v)[^"]*')
DOWNLOAD_URL=https://github.com/etcd-io/etcd/releases/download

cd /usr/local/src || { echo "Failed to change directory to /usr/local/src"; exit 1; }

# 현재 시스템의 아키텍처를 확인합니다.
ARCH=$(uname -m)
# 아키텍처를 설정하는 조건문입니다.
if [[ "$ARCH" == "aarch64" || "$ARCH" == "arm64" ]]; then
    Architecture="arm64"
elif [[ "$ARCH" == "x86_64" ]]; then
    Architecture="amd64"
else
    echo "Unsupported architecture: $ARCH"
    exit 1
fi

# etcd 바이너리 다운로드
curl -fsSL ${DOWNLOAD_URL}/v${ETCD_VERSION}/etcd-v${ETCD_VERSION}-linux-${Architecture}.tar.gz -o /usr/local/src/etcd-v${ETCD_VERSION}.tar.gz
if [[ $? -ne 0 ]]; then
    echo "Failed to download etcd"
    exit 1
fi

# etcd 압축 해제
tar xzf /usr/local/src/etcd-v${ETCD_VERSION}.tar.gz -C /usr/local/bin --strip-components=1
if [[ $? -ne 0 ]]; then
    echo "Failed to extract etcd"
    rm -f /usr/local/src/etcd-v${ETCD_VERSION}.tar.gz
    exit 1
fi

# 임시 파일 삭제
rm -f /usr/local/src/etcd-v${ETCD_VERSION}.tar.gz

# etcd 바이너리 권한 설정
chmod +x /usr/local/bin/etcd
chmod +x /usr/local/bin/etcdctl
chmod +x /usr/local/bin/etcdutl

# etcd 버전 출력
echo -e "\netcd version : $(etcd --version)"
echo -e "\netcdctl version $(etcdctl version)"
echo -e "\netcdutl version : $(etcdutl version)\n"
chmod +x install_etcd.sh
$ bash install_etcd.sh

etcd version : etcd Version: 3.5.15
Git SHA: 9a5533382
Go Version: go1.21.12
Go OS/Arch: linux/arm64

etcdctl version etcdctl version: 3.5.15
API version: 3.5

etcdutl version : etcdutl version: 3.5.15
API version: 3.5

 

참고URL

- etcd GitHub 릴리스 페이지 : https://github.com/etcd-io/etcd/releases

 

728x90