예상 소요 시간: 3시간
작동 가능 구성요소 소유자: OLT/노드
기술 프로필: 배포 엔지니어
부트스트래퍼 머신은 Google Distributed Cloud (GDC) 에어갭 셀에 설치된 첫 번째 서버 정보 시스템 (IS)이며 나머지 Distributed Cloud 정보 시스템을 부트스트랩하는 데 사용됩니다. 머신은 프리플라이트 검사 후 작업자 클러스터 노드로 다시 이미지가 지정됩니다.
부트스트래퍼에는 세 번째 랙의 첫 번째 표준 서버를 사용합니다. 예를 들어 실험실 확인의 경우 애셋 태그의 일부로 기본이 없는 세 번째 랙 ac의 최상위 서버인 xx-ac-bm15를 사용합니다. 부트스트래퍼에는 특별한 요구사항이 없으므로 랙의 모든 머신이 부트스트래퍼가 될 수 있지만 이 목적을 위해 특정 머신이 표준화됩니다. 하지만 이름에 base이 포함된 서버는 루트 관리자 및 운영 클러스터에 사용되므로 처음 3개 랙에서 사용하면 안 됩니다.
9.1. OS 설치
모니터와 키보드를 사용하여 부트스트래퍼 머신에 연결합니다.
iLO 전용 네트워크 포트에서 IP를 설정합니다. 마지막 옥텟이 160인 관리 IP 범위의 주소를 사용합니다.
워크스테이션 IP를 동일한 서브넷의 다른 주소로 설정하고 크로스오버 이더넷 케이블로 후면 이더넷 포트에 일시적으로 연결합니다.
9.1.1. 로컬 ISO 파일이 있는 워크스테이션으로 설치
오프라인 워크스테이션 브라우저에서 부트스트래퍼 머신의 iLO 콘솔에 연결하고 탐색 트리에서 원격 콘솔 및 미디어 메뉴로 이동합니다. USB iLO를 통해 원격 미디어를 사용하지 마세요.
Virtual Media를 클릭하고 Connect CD/DVD-ROM에 가상 미디어 URL을 지정합니다.
선택사항: 다음 재설정 시 부팅을 선택합니다. 다음 재설정 시 부팅을 선택하면 다음 서버 재부팅 시에만 서버가 이 이미지로 부팅됩니다. 서버가 이 이미지로 두 번 부팅되지 않도록 두 번째 서버 재부팅 시 이미지가 자동으로 배출됩니다. 이 체크박스를 선택하지 않으면 이미지가 수동으로 꺼질 때까지 연결된 상태로 유지됩니다.
미디어 삽입을 클릭하여 확인합니다.
부트스트래퍼 머신이
.iso이미지에서 부팅되려면 머신을 재설정해야 합니다.- iLO 콘솔에서 전원 및 열 - 서버 전원을 클릭합니다.
- 재설정을 클릭합니다. 가상 콘솔을 열어 머신의 재설정과
.iso파일 부팅을 모니터링할 수 있습니다.
부트스트랩이 완료되면 로그인 및 비밀번호를 지정하여 부트스트래퍼 머신 (루트 계정)에 연결합니다. 부트스트래퍼는 Google에서 빌드한 ISO 파일을 사용하여 부트스트랩되므로 Google에서 기본 루트 비밀번호를 지정합니다.
운영자는 비밀번호에 액세스할 수 있으며 필요한 경우 다른 사용자를 만들 수 있습니다.
부트스트래퍼 ISO에는 docker, kubectl과 같은 필요한 모든 도구가 이미 포함되어 있으므로 별도로 설치할 필요가 없습니다.
9.1.2. USB 드라이브에 번 ISO를 통한 설치
9.1.2.1. ISO를 USB 드라이브에 굽기
- 시스템 컨트롤러는 rocky 이미지를 사용하므로 dd 명령어 또는 '디스크' 사용자 인터페이스 (UI)를 사용할 수 있습니다.
디스크 UI를 사용하는 경우:
- 플래시 드라이브를 연결합니다.
- 탐색 메뉴에서 USB 드라이브를 클릭한 다음 메뉴 바에서 햄버거 메뉴를 클릭합니다. 디스크 이미지 복원을 클릭하고 다운로드한 ISO 부트스트래퍼를 가리킵니다.

dd 사용:
USB 드라이브가 어떤 디스크인지 확인하려면 다음을 실행합니다.
sudo fdisk -l디스크 크기를 사용하여 기기가 USB인지 확인 다음 몇 단계를 위해 기기 이름을 기억해 둡니다.
이전 단계에서 제공된 기기 이름으로 디스크를 마운트합니다.
sudo umount <device name>드라이브를 포맷합니다.
sudo mkfs.vfat <device name>ISO를 드라이브에 복사합니다.
sudo dd bs=4M if=<path to ISO file> of=<device name> status=progress
9.1.2.2. USB 부팅 드라이브를 사용하여 부팅
- 전면 USB 포트 (iLO로 표시된 포트 아님)에 USB 썸 드라이브를 삽입합니다.
- iLO 인터페이스의 전원 버튼에서 일시 누르기를 선택합니다. 가상 버튼이 노란색으로 변경되어 머신이 꺼졌음을 나타낼 때까지 기다립니다.
- 관리를 선택한 다음 부팅 순서를 선택합니다.
- 일회성 부팅 상태 > 일회성 부팅 선택 섹션에서 USB 드라이브를 선택합니다.
- iLO 인터페이스에서 전원 버튼의 일시적 누르기를 선택하고 가상 버튼이 녹색으로 바뀌는지 확인합니다. OS 설치는 자동으로 진행되며 재부팅도 마찬가지입니다. 콘솔에
bootstrapper login프롬프트가 표시되면 부트스트래퍼 설치가 완료된 것입니다. - USB 드라이브를 제거합니다.
9.1.3. 감사 로깅 설치
부트스트래퍼 감사 로깅을 수동으로 설치하고 사용 설정하려면 다음 단계를 따르세요.
다음 블록을
/etc/bash.bootstrapper_audit.sh의 새 파일에 복사합니다.function log_previous_cmd() { rc=$? ; [[ "$rc" -eq 130 ]] && return line="rc=${rc};;pwd=$(pwd);;ppid=${PPID}" line="${line};;started=$(history 1|awk 'NR==1{$0=gensub(/^.{0,7}([^ ]*) /,"\\1;;cmd=","g",$0)}1')" logger --priority local6.info --id="$$" "${line}" } export PROMPT_COMMAND='log_previous_cmd' export HISTTIMEFORMAT='%G-%m-%dT%T '/etc/bash.bashrc끝에 다음 줄을 추가합니다.[ -f /etc/bash.bootstrapper_audit.sh ] && . /etc/bash.bootstrapper_audit.sh이러한 변경사항이 저장되면 모든 새 셸은 감사 로그 항목을 시스템 저널에 기록합니다.
(선택사항) 감사 로깅이 작동하는지 확인
감사 로그가 성공적으로 기록되는지 확인하려면 다음 명령어를 실행하고 유사한 출력이 생성되는지 확인합니다.
USER@bootstrapper:~$ echo 'a command' USER@bootstrapper:~$ sudo journalctl -eo short-iso -p info SYSLOG_FACILITY=22 2024-10-12T00:30:24+0000 bootstrapper USER[96558]: rc=0;;pwd=/root;;ppid=96479;;started=2024-10-12T00:30:24;;cmd=date 2024-10-12T00:30:47+0000 bootstrapper USER[96558]: rc=0;;pwd=/root;;ppid=96479;;started=2024-10-12T00:30:47;;cmd=echo 'a command'(선택사항) 감사 로깅 사용 중지
감사 로깅이 다른 부트스트래퍼 작업에 영향을 미치는 것으로 의심되는 드문 경우 다음을 사용하여 현재 셸에서 기능을 빠르게 사용 중지할 수 있습니다.
USER@bootstrapper:~$ unset PROMPT_COMMAND감사 로깅이 아무런 영향을 미치지 않는지 확인한 후 다음을 사용하여 현재 셸에서 다시 사용 설정합니다.
source /etc/bash.bashrc
9.2. 관리 인터페이스 및 경로 설정
이 섹션에서는 부트스트랩 프로세스에 필요한 관리 인터페이스와 경로를 설정합니다.
9.2.1. 관리 IP, CIDR, 게이트웨이 주소 찾기
cellcfg/serv-core.yaml파일에서 부트스트래퍼의 관리 IP를 찾습니다.yq eval -r 'select(.metadata.annotations."system.private.gdc.goog/bootstrapper" == "true") | .spec.managementNetwork.ips[0]' PATH_TO_SERV_CORE_FILEPATH_TO_SERV_CORE_FILE을cellcfg/serv-core.yaml파일의 경로로 바꿉니다.부트스트래퍼는
system.private.gdc.goog/bootstrapper: "true"주석으로 식별됩니다.spec.managementNetwork.ips[0]의 관리 IP 주소는 예시에서172.22.80.76입니다.apiVersion: system.private.gdc.goog/v1alpha1 kind: Server metadata: annotations: lcm.private.gdc.goog/claim-by-force: "true" helm.sh/resource-policy: keep system.private.gdc.goog/bootstrapper: "true" creationTimestamp: null labels: system.private.gdc.goog/rack-name: mb-aa name: mb-aa-bm13 namespace: gpc-system spec: bmc: credentialsRef: name: bmc-credentials-mb-aa-bm13 namespace: gpc-system ip: 172.22.80.108 mac: 5c:ba:2c:42:a9:68 protocol: redfish redfish: systemPath: /redfish/v1/Systems/1 dataplaneNetwork: {} encryptDisk: true firmwareInstall: true secureErase: true luks: enable: false managementNetwork: ips: - 172.22.80.76 link: LOM1관리 인터페이스의 IP 주소를 설정하는 데 필요한 CIDR 주소 범위를 찾습니다. 이 정보는 CIQ 설문지에 제공됩니다.
CIQ 예시:
oobManagementCIDRs: - ipFamily: IPv4 ipv4: 172.23.16.0/24 - ipFamily: IPv4 ipv4: 172.23.17.0/24 - ipFamily: IPv4 ipv4: 172.23.18.0/24 - ipFamily: IPv4 ipv4: 172.23.19.0/24이 예에서 CIDR 범위
172.23.16.0/22는 나열된 모든 관리 CIDR 주소를 포함합니다.관리 네트워크와 통신할 때 부트스트래퍼가 사용하는 게이트웨이 주소를 찾습니다. 부트스트래퍼가
ac랙에 있는 경우 다음 명령어를 사용하여CIDRClaim리소스의 이름을 찾습니다.grep -A 10 -B 10 "ac-mgmtsw01-server-os-cidr" cellcfg/pnet-core.yaml`.출력은 다음과 같이 표시됩니다.
apiVersion: system.private.gdc.goog/v1alpha1 kind: CIDRClaim metadata: annotations: lcm.private.gdc.goog/claim-by-force: "true" labels: cidrclaims.system.private.gdc.goog/cidr-category: internal cidrclaims.system.private.gdc.goog/cidr-org: root cidrclaims.system.private.gdc.goog/node-type: leaf network.private.gdc.goog/mgmtnw-device-category: server-os network.private.gdc.goog/mgmtsw: ag-ac-mgmtsw01 name: ag-ac-mgmtsw01-server-os-cidr namespace: root spec: ipv4Spec: staticCidrBlocks: - 172.28.120.128/26 parentCidrClaimName: server-os-mgmt-network-cidrag-ac-mgmtsw01-server-os-cidr이라는CIDRClaim리소스의ipv4Spec.staticCidrBlocks에 있는172.28.120.128/26를 사용하면 게이트웨이 주소는172.28.120.128/26의 첫 번째 IP 주소인172.28.120.129입니다.
9.2.2. 관리 인터페이스의 IP 주소 구성
ip address add dev MGMT_INTERFACE MGMT_IP/MGMT_SUBNET_PREFIX
다음을 바꿉니다.
MGMT_INTERFACE: 관리 인터페이스 이름의 예는ens15f0입니다.cellcfg/serv-core.yaml의 MAC 주소를 사용하여 관리 네트워크에 사용되는 인터페이스를 식별합니다.MGMT_IP: 관리 IP 및 CIDR 찾기 섹션에 있는 관리 IP 주소입니다.MGMT_SUBNET_PREFIX: 관리 CIDR 서브넷 접두사 (예: 앞의 예에서172.23.16.0/22의 경우22)입니다. 자세한 내용은 관리 IP 및 CIDR 찾기를 참고하세요.
그런 다음 부트스트래퍼에서 스크립트를 실행합니다. 이 스크립트는 IP 주소를 관리 인터페이스에 할당하고 관리 CIDR 범위의 기본 경로를 만듭니다.
9.2.3. 관리 인터페이스 활성화
이 섹션에서는 관리 인터페이스를 활성화하는 방법을 설명합니다. cellcfg/serv-core.yaml에서 부트스트래퍼의 관리 인터페이스 MAC 주소를 찾아 관리 인터페이스를 식별하고 부트스트래퍼의 ip a 출력에서 이 MAC 주소를 상호 참조합니다.
이 예시에서 관리 인터페이스 값은 ens15f0입니다. 이 안내를 따를 때는 자신의 값을 사용하세요. cellcfg/serv-core.yaml 파일에 있는 관리 IP 주소를 사용하여 IP 주소를 추가합니다.
apiVersion: system.private.gdc.goog/v1alpha1
kind: Server
metadata:
annotations:
lcm.private.gdc.goog/claim-by-force: "true"
helm.sh/resource-policy: keep
system.private.gdc.goog/bootstrapper: "true"
creationTimestamp: null
labels:
system.private.gdc.goog/rack-name: ma-ac
name: ma-ac-bm15
namespace: gpc-system
spec:
bmc:
credentialsRef:
name: bmc-credentials-ma-ac-bm15
namespace: gpc-system
ip: 172.29.8.208
mac: 5c:ba:2c:42:28:2e
protocol: redfish
redfish:
systemPath: /redfish/v1/Systems/1
dataplaneNetwork: {}
encryptDisk: true
firmwareInstall: true
secureErase: true
luks:
enable: false
managementNetwork:
ips:
- 172.29.24.147
link: LOM1
provider: external
serverHardware:
bmhNetworkRef:
name: ma-ac-bm15
dataplaneNICPorts:
- mac: 5c:ba:2c:61:83:90
name: s1p1
- mac: 5c:ba:2c:61:83:98
name: s1p2
machineClassName: o1-standard1-64-gdc-metal
managementNICPort:
mac: 98:f2:b3:28:0b:70
name: LOM1
portBond:
name: s1p1-s1p2
networkBondModeType: 802.3ad
nicPortNames:
- s1p1
- s1p2
status: {}
이 예시 YAML 파일에서 관리 IP 주소는 172.29.24.147입니다. 관리 IP, CIDR, 게이트웨이 주소 찾기에서 찾은 CIDR 블록이 /26이므로 프리픽스 길이 /26이 사용됩니다.
관리 인터페이스에 관리 IP 주소를 추가합니다.
sudo ip addr add 172.29.24.147/26 dev ens15f0,
그런 다음 다음 ip 명령어를 사용하여 인터페이스를 설정합니다.
ip link set ens15f0 up
인터페이스 구성이 성공했는지 확인하려면 ip link show ens15f0를 사용합니다.
ip link show ens15f0
출력은 다음과 비슷하며 UP 메시지는 성공을 나타냅니다.
6: ens15f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 98:f2:b3:28:0b:70 brd ff:ff:ff:ff:ff:ff
inet 172.29.24.147/26 brd 172.29.24.191 scope global ens15f0
valid_lft forever preferred_lft forever
inet6 fe80::9af2:b3ff:fe28:b70/64 scope link
valid_lft forever preferred_lft forever
9.2.4. 라우팅 구성 설정
MGMT_GATEWAY=MGMT_GATEWAY
MGMT_CIDR=MGMT_CIDR
MGMT_INTERFACE=MGMT_INTERFACE
ip route add $MGMT_CIDR via $MGMT_GATEWAY dev $MGMT_INTERFACE proto static"
다음을 바꿉니다.
MGMT_GATEWAY: 관리 IP, CIDR, 게이트웨이 주소 찾기 섹션에 있는 게이트웨이 IP 주소입니다.MGMT_CIDR: 관리 CIDR이 CIQ에서 가져옵니다. 관리 IP, CIDR, 게이트웨이 주소 찾기 섹션을 참고하세요.MGMT_INTERFACE: 관리 인터페이스 이름의 예는ens15f0입니다.cellcfg/serv-core.yaml의 MAC 주소를 사용하여 관리 네트워크에 사용되는 인터페이스를 식별할 수 있습니다.
그런 다음 부트스트래퍼에서 스크립트를 실행합니다.
9.3. 부트스트래퍼의 시계 구성
이 시점에는 아직 NTP 서버가 없습니다. 부트스트래퍼의 시계를 UTC의 적절히 정확한 시간 (실제 시간에서 1초 이내)으로 수동으로 설정해야 합니다. 24시간제 시계를 사용하고 있지 않다면 'AM' 또는 'PM'을 사용하세요. 시계가 잘못 설정되면 나중에 복구할 수 없는 영향을 미칩니다.
date --set "DATE_TIME_UTC"
DATE_TIME_UTC을 UTC의 날짜 및 시간(예: 2023-03-21 01:14:30 AM UTC)으로 바꿉니다.
9.4. 부트스트래퍼 서버에 로그인
부트스트래퍼 서버에서 로그아웃한 경우 부트스트래퍼 머신의 실제 위치에서 또는 시스템 컨트롤러를 사용하여 다시 로그인할 수 있습니다.
9.4.1. 실제 머신 로그인
실제 머신에서 부트스트래퍼 서버에 로그인합니다.
부트스트래퍼 머신에 키보드, 마우스, 모니터를 연결합니다.
기본 사용자 이름과 비밀번호를 사용하여 머신에 로그인합니다.
9.4.2. 시스템 컨트롤러 로그인
시스템 컨트롤러를 사용하여 부트스트래퍼 서버에 로그인합니다.
시스템 컨트롤러가 있는 응급 카트로 이동합니다.
다음 명령어를 실행합니다.
ssh ubuntu@BOOTSTRAPPER_IP_ADDRESSBOOTSTRAPPER_IP_ADDRESS를 부트스트래퍼 서버의 IP 주소로 바꿉니다.
9.5. 파일 구조
후속 작업은 모두 루트 사용자로 실행됩니다. 다음은 권장되는 디렉터리 구조이지만 필수는 아닙니다.
root
├── kubeconfigs/ - recommend creating this directory to keep track of the many kubeconfigs
└── .kube/config - location of bootstrap(KIND) cluster kubeconfig
└── full-release-y.y.y-gdch.yyy - Extraction of the gdch tar from step download-files
├── bootstrapper.iso
├── docs
├── examples
├── gdcloud
├── harbor
├── oci
└── operations_center
└── root-admin/root-admin-kubeconfig - where the root-admin kubeconfig will be put after root-admin creation
└── full-release-y.y.y-gdch.yyy-hotfix - if necessary, hotfixes will be extracted to another folder
├── README - explains how to apply the hotfix
├── oci - directory containing the hotfix
├── config - this is for the output of the "create configuration files" step
├── output/cellcfg - initial CRs applied to the bootstrap cluster
├── output/assets
├── devices.csv - HW file useful to have for debugging
├── cables.csv - HW file useful to have for debugging
├── ciq.yaml - HW file useful to have for debugging