Provisionando o Fedora CoreOS na IBM Cloud

Esse guia mostra como provisionar instâncias novas do Fedora CoreOS (FCOS) no IBM Cloud VPC Generation 2.

Pré-Requisitos

Antes de provisionar uma instância FCOS, você deve ter um arquivo de configuração do Ignition contendo suas personalizações. Se você não tiver um, consulte production-ign.adoc.

Você também deverá ter acesso a uma Conta IBM Cloud. Os exemplos mostrados abaixo usam a ferramenta de linha de comando ibmcloud, que deve ser separadamente instalada e configurada previamente. Também há vários elementos que devem ser colocados no lugar, como uma VPC, chaves SSH, redes, permissões, etc. Infelizmente, esse guia não é um guia compreensível para IBM Cloud. Se você é novo na IBM Cloud, por favor familiarize-se usando a documentação pra o VPC Gen2.

Desconsiderando a CLI ibmcloud, vale a pena lembrar que rodar a CLI por um contêiner também é suportado. Você precisará dos plugins cloud-object-storage e infrastructure-service instalados. Isso pode ser feito com:

  • ibmcloud plugin install cloud-object-storage

  • ibmcloud plugin install infrastructure-service

Depois de logar usando ibmcloud login, você pode colocar uma região alvo:

Escolha uma região específica
REGION='us-east' #rode `ibmcloud regions` para ver opções
ibmcloud target -r $REGION

Criando uma imagem

Os seguintes conjuntos de comandos vão mostrar para você como fazer o download da imagem mais recentes para um fluxo, realizar um upload para o armazenamento em nuvem, e então criar a imagem em nuvem na IBM Cloud. Vale a pena notar que o Fedora CoreOS vem em três fluxos, com diferentes rotinas de atualizações por fluxo. Esses passos mostram o fluxo stable como exemplo, mas pode ser usado para outros fluxos também.

Obtenha a imagem mais recente adequada para o seu fluxo alvo (ou baixe e verifique na web).
STREAM='stable'
coreos-installer download -s "${STREAM}" -p vultr -f raw.xz --decompress
Crie uma conta de serviço para realizar uploads e uma Política de Autorização que permitem criar imagens para os objetos que sofreram upload.
BUCKET='my-unique-bucket'
ibmcloud resource service-instance-create "${BUCKET}-service-instance" cloud-object-storage standard global

SERVICE_INSTANCE_ID='25df0db0-89a4-4cb8-900f-ed8b44259f80' # pela recém criada conta de serviço
ibmcloud iam authorization-policy-create is --source-resource-type image cloud-object-storage Reader --target-service-instance-id $SERVICE_INSTANCE_ID
Realize o upload da imagem obtida para o armazenamento de objeto da IBM Cloud.
FCOS_VERSION='...'
FILE=fedora-coreos-${FCOS_VERSION}-ibmcloud.x86_64.qcow2
ibmcloud cos create-bucket --bucket $BUCKET --ibm-service-instance-id $SERVICE_INSTANCE_ID
ibmcloud cos upload --bucket=$BUCKET --key=$FILE --file=$FILE
Crie uma imagem pelo objeto de armazenamento.
IMAGE=${FILE:0:-6}     # obtém o .qcow2
IMAGE=${IMAGE//[._]/-} # substitui . e _ com -
ibmcloud is image-create $IMAGE --file "cos://${REGION}/${BUCKET}/${FILE}" --os-name centos-7-amd64
Especificar --os-name centos-7-amd64 é requerido por agora até que a IBM expanda a lista de tipos de SO.

Você terá que esperar o processo de criação da imagem terminar de pending para available antes que você consiga usar a imagem. Monitore com o seguinte comando:

Monitore o processo de criação de imagens vendo as imagens na sua conta
ibmcloud is images --visibility private

Lançando uma instância de VM

Agora que você tem uma imagem criada na sua conta você pode lançar uma instância de VM. Você terá que especificar várias informações no comando. Dicas estão embutidas no exemplo abaixo sobre como conseguir essas informações antes de lançar uma instância.

Você também deverá indicar a configuração Ignition que você criou previamente. Aqui está mostrado no comando de exemplo como @example.ign, que indica um arquivo no diretório corrente chamado example.ign.

Lançando uma instância de VM
NAME='instance1'
ZONE="${REGION}-1" # view more with `ibmcloud is zones`
PROFILE='bx2-2x8' # view more with `ibmcloud is instance-profiles`
VPC='r014-c9c65cc4-cfd3-44de-ad54-865aac182ea1'    # `ibmcloud is vpcs`
IMAGE='r014-1823b4cf-9c63-499e-8a27-b771be714ad8'  # `ibmcloud is images --visibility private`
SUBNET='0777-bf99cbf4-bc82-4c46-895a-5b7304201182' # `ibmcloud is subnets`
SSHKEY='r014-b44c37d0-5c21-4c2b-aba2-438a5b0a228d' # `ibmcloud is keys`
ibmcloud is instance-create $NAME $VPC $ZONE $PROFILE $SUBNET --image-id $IMAGE --key-ids $SSHKEY --user-data @example.ign
Se necessário você deverá criar primeiro uma subnet com um comando como 'ibmcloud is subnet-create my-subnet $VPC --ipv4-address-count 256 --zone $ZONE'.

Próximo, se você gostaria de realizar um acesso SSH para a instância por fora da IBM Cloud, você pode assinalar um IP Público para a instância:

Crie e assinale um IP flutuante
ibmcloud is floating-ip-reserve floating-ip-1 --zone=$ZONE
FIP='72251a2e-d6c5-42b4-97b0-b5f8e8d1f479'
NIC='0777-dd174c80-dbd9-41b1-b221-39bbcef8a481' # achar pelo output de `ibmcloud is instance`
ibmcloud is floating-ip-update $FIP --nic-id $NIC

Agora você deve conseguir acessar a instância por SSH usando o endereço IP associado com o IP flutuante.