3.6.2. 새 etcd 호스트 수동 추가
마스터 노드에서 etcd를 정적 포드로 실행하지 않으면 다른 etcd 호스트를 추가해야 할 수도 있습니다.
프로시저
현재 etcd 클러스터 수정
etcd 인증서를 생성하려면 값을 사용자 환경의 값으로 교체하여 openssl
명령을 실행하십시오.
다음과 같이 일부 환경 변수를 생성하십시오.
export NEW_ETCD_HOSTNAME="*etcd0.example.com*" export NEW_ETCD_IP="192.168.55.21" export CN=$NEW_ETCD_HOSTNAME export SAN="IP:${NEW_ETCD_IP}, DNS:${NEW_ETCD_HOSTNAME}" export PREFIX="/etc/etcd/generated_certs/etcd-$CN/" export OPENSSLCFG="/etc/etcd/ca/openssl.cnf"
참고etcd_v3_ca_*
로 사용되는 사용자 정의openssl
확장에는 $SAN 환경 변수가subjectAltName
으로 포함됩니다. 자세한 내용은/etc/etcd/ca/openssl.cnf
를 참조하십시오.구성 및 인증서를 저장할 디렉터리를 생성하십시오.
# mkdir -p ${PREFIX}
서버 인증서 요청을 생성하고 서명하십시오(server.csr 및 server.crt).
# openssl req -new -config ${OPENSSLCFG} \ -keyout ${PREFIX}server.key \ -out ${PREFIX}server.csr \ -reqexts etcd_v3_req -batch -nodes \ -subj /CN=$CN # openssl ca -name etcd_ca -config ${OPENSSLCFG} \ -out ${PREFIX}server.crt \ -in ${PREFIX}server.csr \ -extensions etcd_v3_ca_server -batch
피어 인증서 요청을 생성하고 서명하십시오(peer.csr 및 peer.crt).
# openssl req -new -config ${OPENSSLCFG} \ -keyout ${PREFIX}peer.key \ -out ${PREFIX}peer.csr \ -reqexts etcd_v3_req -batch -nodes \ -subj /CN=$CN # openssl ca -name etcd_ca -config ${OPENSSLCFG} \ -out ${PREFIX}peer.crt \ -in ${PREFIX}peer.csr \ -extensions etcd_v3_ca_peer -batch
나중에 수정하기 위해 현재 노드의 현재 etcd 구성 및
ca.crt
파일을 예제로 복사하십시오.# cp /etc/etcd/etcd.conf ${PREFIX} # cp /etc/etcd/ca.crt ${PREFIX}
아직 남아 있는 etcd 호스트에서 새 호스트를 클러스터에 추가하십시오. 클러스터에 etcd 멤버를 추가하려면 먼저 첫 번째 멤버의
peerURLs
값에서 기본 localhost 피어를 조정해야 합니다.member list
명령을 사용하여 첫 번째 멤버의 멤버 ID를 가져오십시오.# etcdctl --cert-file=/etc/etcd/peer.crt \ --key-file=/etc/etcd/peer.key \ --ca-file=/etc/etcd/ca.crt \ --peers="https://172.18.1.18:2379,https://172.18.9.202:2379,https://172.18.0.75:2379" \ 1 member list
- 1
--peers
매개변수 값에 활성 etcd 멤버의 URL만 지정하십시오.
etcd가 클러스터 피어를 청취하는 IP 주소를 확보하십시오.
$ ss -l4n | grep 2380
멤버 ID와 이전 단계에서 얻은 IP 주소를 전달하여
etcdctl member update
명령으로peerURLs
의 값을 업데이트하십시오.# etcdctl --cert-file=/etc/etcd/peer.crt \ --key-file=/etc/etcd/peer.key \ --ca-file=/etc/etcd/ca.crt \ --peers="https://172.18.1.18:2379,https://172.18.9.202:2379,https://172.18.0.75:2379" \ member update 511b7fb6cc0001 https://172.18.1.18:2380
-
member list
명령을 다시 실행하고 피어 URL에 더 이상 localhost가 포함되지 않도록 하십시오.
새 호스트를 etcd 클러스터에 추가하십시오. 새 호스트는 아직 구성되지 않았으므로 새 호스트를 구성할 때까지 상태는
unstarted
로 남아 있습니다.주의각 멤버를 추가하고 한 번에 하나씩 온라인 상태로 만들어야 합니다. 각 멤버를 클러스터에 추가할 때 현재 피어의
peerURL
목록을 조정해야 합니다.peerURL
목록은 각 멤버가 추가될 때마다 하나씩 늘어납니다.etcdctl member add
명령은 다음 지침에 설명된 대로 각 멤버를 추가할 때 etcd.conf 파일에 설정해야 하는 값을 출력합니다.# etcdctl -C https://${CURRENT_ETCD_HOST}:2379 \ --ca-file=/etc/etcd/ca.crt \ --cert-file=/etc/etcd/peer.crt \ --key-file=/etc/etcd/peer.key member add ${NEW_ETCD_HOSTNAME} https://${NEW_ETCD_IP}:2380 1 Added member named 10.3.9.222 with ID 4e1db163a21d7651 to cluster ETCD_NAME="<NEW_ETCD_HOSTNAME>" ETCD_INITIAL_CLUSTER="<NEW_ETCD_HOSTNAME>=https://<NEW_HOST_IP>:2380,<CLUSTERMEMBER1_NAME>=https:/<CLUSTERMEMBER2_IP>:2380,<CLUSTERMEMBER2_NAME>=https:/<CLUSTERMEMBER2_IP>:2380,<CLUSTERMEMBER3_NAME>=https:/<CLUSTERMEMBER3_IP>:2380" ETCD_INITIAL_CLUSTER_STATE="existing"
- 1
- 이 라인에서
10.3.9.222
는 etcd 멤버의 레이블입니다. 호스트 이름, IP 주소 또는 간단한 이름을 지정할 수 있습니다.
샘플
${PREFIX}/etcd.conf
파일을 업데이트하십시오.다음 값을 이전 단계에서 생성된 값으로 교체하십시오.
- ETCD_NAME
- ETCD_INITIAL_CLUSTER
- ETCD_INITIAL_CLUSTER_STATE
이전 단계의 출력에서 얻은 새 호스트 IP로 다음 변수를 수정하십시오.
${NEW_ETCD_IP}
를 값으로 사용할 수 있습니다.ETCD_LISTEN_PEER_URLS ETCD_LISTEN_CLIENT_URLS ETCD_INITIAL_ADVERTISE_PEER_URLS ETCD_ADVERTISE_CLIENT_URLS
- 이전에 멤버 시스템을 etcd 노드로 사용한 경우 /etc/etcd/etcd.conf 파일에서 현재 값을 덮어써야 합니다.
구문 오류 또는 누락된 IP 주소가 있는지 파일을 확인하십시오. 그렇지 않으면 etcd 서비스가 실패할 수 있습니다.
# vi ${PREFIX}/etcd.conf
-
설치 파일을 호스팅하는 노드에서 /etc/ansible/hosts 인벤토리 파일의
[etcd]
호스트 그룹을 업데이트하십시오. 이전 etcd 호스트를 제거하고 새 호스트를 추가하십시오. 인증서, 샘플 구성 파일 및
ca
가 포함된tgz
파일을 생성하여 새 호스트에 복사하십시오.# tar -czvf /etc/etcd/generated_certs/${CN}.tgz -C ${PREFIX} . # scp /etc/etcd/generated_certs/${CN}.tgz ${CN}:/tmp/
새 etcd 호스트 수정
iptables-services
를 설치하여 etcd의 필수 포트를 여는 iptables 유틸리티를 제공하십시오.# yum install -y iptables-services
etcd가 통신할 수 있도록
OS_FIREWALL_ALLOW
방화벽 규칙을 생성하십시오.- 클라이언트용 2379/tcp 포트
피어 통신용 2380/tcp 포트
# systemctl enable iptables.service --now # iptables -N OS_FIREWALL_ALLOW # iptables -t filter -I INPUT -j OS_FIREWALL_ALLOW # iptables -A OS_FIREWALL_ALLOW -p tcp -m state --state NEW -m tcp --dport 2379 -j ACCEPT # iptables -A OS_FIREWALL_ALLOW -p tcp -m state --state NEW -m tcp --dport 2380 -j ACCEPT # iptables-save | tee /etc/sysconfig/iptables
참고이 예에서는 새 체인
OS_FIREWALL_ALLOW
가 생성되는데, 이는 OpenShift Container Platform 설치 프로그램이 방화벽 규칙에 사용하는 표준 이름입니다.주의IaaS 환경에서 사용자 환경을 호스팅하는 경우 해당 포트로 들어오는 트래픽도 허용하도록 인스턴스의 보안 그룹을 수정하십시오.
etcd를 설치하십시오.
# yum install -y etcd
버전
etcd-2.3.7-4.el7.x86_64
이상이 설치되어 있는지 확인하십시오.etcd 포드 정의를 제거하여 etcd 서비스가 실행 중이지 않은지 확인하십시오.
# mkdir -p /etc/origin/node/pods-stopped # mv /etc/origin/node/pods/* /etc/origin/node/pods-stopped/
etcd 구성 및 데이터를 제거하십시오.
# rm -Rf /etc/etcd/* # rm -Rf /var/lib/etcd/*
인증서 및 구성 파일을 추출하십시오.
# tar xzvf /tmp/etcd0.example.com.tgz -C /etc/etcd/
새 호스트에서 etcd를 시작하십시오.
# systemctl enable etcd --now
호스트가 클러스터의 일부인지 확인하고 현재 클러스터 상태를 점검하십시오.
v2 etcd API를 사용하는 경우 다음 명령을 실행하십시오.
# etcdctl --cert-file=/etc/etcd/peer.crt \ --key-file=/etc/etcd/peer.key \ --ca-file=/etc/etcd/ca.crt \ --peers="https://*master-0.example.com*:2379,\ https://*master-1.example.com*:2379,\ https://*master-2.example.com*:2379,\ https://*etcd0.example.com*:2379"\ cluster-health member 5ee217d19001 is healthy: got healthy result from https://192.168.55.12:2379 member 2a529ba1840722c0 is healthy: got healthy result from https://192.168.55.8:2379 member 8b8904727bf526a5 is healthy: got healthy result from https://192.168.55.21:2379 member ed4f0efd277d7599 is healthy: got healthy result from https://192.168.55.13:2379 cluster is healthy
v3 etcd API를 사용하는 경우 다음 명령을 실행하십시오.
# ETCDCTL_API=3 etcdctl --cert="/etc/etcd/peer.crt" \ --key=/etc/etcd/peer.key \ --cacert="/etc/etcd/ca.crt" \ --endpoints="https://*master-0.example.com*:2379,\ https://*master-1.example.com*:2379,\ https://*master-2.example.com*:2379,\ https://*etcd0.example.com*:2379"\ endpoint health https://master-0.example.com:2379 is healthy: successfully committed proposal: took = 5.011358ms https://master-1.example.com:2379 is healthy: successfully committed proposal: took = 1.305173ms https://master-2.example.com:2379 is healthy: successfully committed proposal: took = 1.388772ms https://etcd0.example.com:2379 is healthy: successfully committed proposal: took = 1.498829ms
각 OpenShift Container Platform 마스터 수정
모든 마스터에서
/etc/origin/master/master-config.yaml
파일의etcClientInfo
섹션에서 마스터 구성을 수정하십시오. OpenShift Container Platform에서 데이터를 저장하는 데 사용하는 etcd 서버 목록에 새 etcd 호스트를 추가하고 실패한 etcd 호스트를 제거하십시오.etcdClientInfo: ca: master.etcd-ca.crt certFile: master.etcd-client.crt keyFile: master.etcd-client.key urls: - https://master-0.example.com:2379 - https://master-1.example.com:2379 - https://master-2.example.com:2379 - https://etcd0.example.com:2379
마스터 API 서비스를 다시 시작하십시오.
모든 마스터에서 다음을 수행하십시오.
# master-restart api # master-restart controllers
주의etcd 노드의 수는 홀수여야 하므로 2개 이상의 호스트를 추가해야 합니다.
Flannel을 사용하는 경우 새 etcd 호스트를 포함하도록 모든 OpenShift Container Platform 호스트에서
/etc/sysconfig/flanneld
에 있는flanneld
서비스 구성을 수정하십시오.FLANNEL_ETCD_ENDPOINTS=https://master-0.example.com:2379,https://master-1.example.com:2379,https://master-2.example.com:2379,https://etcd0.example.com:2379
flanneld
서비스를 다시 시작하십시오.# systemctl restart flanneld.service