Post

VMSS Self hosted Agent pool-hoz extra csomagok hozzáadása

Előző Postban sikeresen hozzárendeltünk egy VMSS-t az Azure DevOps-os organizációhoz, amely egy alap UbuntuLTS-en alapult. Kényelmes, mert belső marketplace-ről elérhető és viszonylag kevés csomag található meg benne alapból, azonban a hátránya is egyben ez, hiszen sok olyan csomag van, amely szinte minden deploy-nál szükséges. Ezen csomagok telepítésére van lehetőség persze pipeline-ból is, de sokkal kényelmesebb, ha alapból rendelkezésre állnak a környezetünkben. Több lehetőségünk is van. Az egyik, hogy létrehozunk “Gold” image-et, amelyben minden csomagot elhelyezünk, amire csak szükségünk van, vagy pedig a VMSS létrehozásakor mondjuk meg, hogy mik lesznek azok a csomagok, amikre szükségünk van. Céges környezetben valószínűleg célszerűbb lenne a Gold verzió, hiszen értékes időt spórolhatunk meg azzal, ha ezeket csak egyszer kell megtenni, de akkor ezt a képfájlt karban is kell tartani, frissíteni stb. Nekem az az extra 1 perc, amíg feltelepíti az összes szükséges csomagomat induláskor, még elfogadható ár azért, hogy ne legyen munkám a folyamatos frissítésekkel. (Persze vannak még további indokok is mind egyik, mind másik mellett… :) )

Előfeltételek

Létrehozásához a következőkre van szükség:

  • Jogosultság
  • Azure előfizetés amibe van pár $
  • Vnet, amelyhez kapcsolódhatunk, illetve amin keresztül internetelérésünk van.

Hálózat

ESLZ környezetben a hálózati infrastruktúrához nem biztos, hogy van hozzáférésünk olyan szinten, ami szükséges a hálózati erőforrások létrehozásához is. Ebben a szcenárióban nem is fogunk létrehozni Vnet-et, ezt már létrehozta nekünk valaki egy valamilyen módon leadott igény alapján. Ehhez hozzá is kapcsolt már egy user defined routing (UDR)-t, tehát minden olyan eszköznek, amit hozzákapcsolunk ehhez a Vnet-hez, lesz egy értelmezhető belső hálózati kapcsolata és internet hozzáférése, ami elengedhetetlen ehhez az Azure DevOps szolgáltatáshoz. Tehát van egy előfizetésünk, amiben valami hasonló van:

img-description

Tűzfal/proxy

Természetesen a csomagokat le kell töltenie valahonnan, így az internet elérése ebben az esetben elengedhetetlen.

Virtual Machine Scale Sets

Virtual Machine Scale Sets (VMSS) létrehozása nem sokban különbözik egy sima VM létrehozásától, de azért egy két alapvető különség van… Az alap “a vmss create” parancs használata esetén sok olyan erőforrást lehet létrehozni, ami egy szabadabb környezetben hasznos lehet, de a mi esetünkben akár hibát is eredményezhet, hiszen a Puplic IP például, amit alapesetben létrehozna, gyakran le van tiltva az Azure Policy-val, de előbb hozzunk létre egy fájlt.

Cloud init fájl létrehozása

Hozzuk létre ott, ahonnan kezdeményezzük CLI-ból a VMSS létrehozását egy cloud-ini.yml fájlt és másoljuk bele:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#cloud-config
bootcmd:
  - mkdir -p /etc/systemd/system/walinuxagent.service.d
  - echo "[Unit]\nAfter=cloud-final.service" > /etc/systemd/system/walinuxagent.service.d/override.conf
  - sed "s/After=multi-user.target//g" /lib/systemd/system/cloud-final.service > /etc/systemd/system/cloud-final.service
  - systemctl daemon-reload
  - sudo apt update && sudo apt -y install gpg
  - wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
  - echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
  - curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
  - sudo apt update

packages:
 - unzip
 - git
 - wget
 - apt-transport-https
 - software-properties-common
 - npm 

Forrás Forrás2
Persze ennél jóval több csomagot vagy egyéb parancsot is megadhatunk, de most jelenleg nekem ennyi elég volt.
Bővebben itt lehet róla olvasni

VMSS létrehozása

VMSS létrehozásához egy egyszerű cli parancsra van szükségünk, de ehhez azért kell némi információt is megadni. Mivel már a vnet-et és a subnet-et is megkaptuk, így ezekre csak hivatkoznunk kell, szóval a változók értékét ki kell cserélni a kapott nevekre:

1
2
3
4
5
6
7
8
9
10
11
12
13
az login

#Ha több előfizetéshez van jogosultsága a felhasználónknak
az account list
az account set --subscription "Előfizetés_neve"

#----------------------------------------------------------
$vmssname = "vmssagentspool"
$rg = "DevOpsAgentPool"
$vnet = "devops-vmss"
$subnet = "default"

az vmss create --name $vmssname --resource-group $rg --image Canonical:0001-com-ubuntu-minimal-jammy-daily:minimal-22_04-daily-lts:latest --vm-sku Standard_D2ads_v5 --storage-sku Standard_LRS --authentication-type SSH --instance-count 0 --disable-overprovision --upgrade-policy-mode manual --single-placement-group false --platform-fault-domain-count 1 --generate-ssh-keys --ephemeral-os-disk true --os-disk-caching readonly --vnet-name $vnet --subnet $subnet --public-ip-address "" --load-balancer "" --custom-data cloud-ini.yml --authentication-type password --admin-password Alap12345678 --admin-u
This post is licensed under CC BY 4.0 by the author.