在阿里云上配置Fedora CoreOS(阿里云)

本指南介绍如何在阿里云上配置新的Fedora CoreOS(FCOS)节点。Fedora目前不在阿里云中发布Fedora CoreOS镜像,因此您必须从Fedora下载阿里云镜像并将其上传到您的对象存储服务(OSS)存储桶中。

先决条件

在配置FCOS计算机之前,您必须具有包含自定义设置的Ignition配置文件。如果您没有,请参见 生成Ignition文件

如果您不想使用Ignition入门,可以使用 加力支撑 并通过云提供商提供SSH密钥,然后从那里继续。

您还需要访问阿里巴巴云帐户,并 激活的对象存储服务(OSS) 。 下面的示例使用 阿里云命令行工具JQ 作为命令行JSON处理器。

下载阿里云镜像

Fedora CoreOS被设计为自动更新,每个流有不同的时间表。 选择好相关流后,下载、验证、解压最新的阿里云镜像:

STREAM="stable"
coreos-installer download --decompress -s "${STREAM}" -p aliyun -f qcow2.xz

或者,您也可以从 下载页面 。按照该页面上的说明验证下载,然后将其解压缩。

上传图片到阿里云

使用全局唯一的名称创建您的阿里云账户中尚未存在的任何存储桶,或重复使用现有的存储桶:

+ .创建阿里云OSS(对象存储服务)存储桶示例

REGION="ap-southeast-1"
BUCKET_NAME="my-bucket"
BUCKET_URL="oss://${BUCKET_NAME}"
aliyun oss mb "${BUCKET_URL}" --region="${REGION}" --acl=private
上传FCOS镜像:

+ .上传FCOS至阿里云OSS存储桶示例

DOWNLOADED_IMAGE="./image.qcow2"
IMAGE_NAME="my-fcos-image"
IMAGE_BLOB="${IMAGE_NAME}.qcow2"
aliyun oss cp "${DOWNLOADED_IMAGE}" "${BUCKET_URL}/${IMAGE_BLOB}" \
    --region="${REGION}" --acl=private
导入上传的FCOS镜像:

+ .FCOS导入阿里云ECS示例

TASK_ID=$(aliyun ecs ImportImage \
    --region="${REGION}" \
    --DiskDeviceMapping.1.OSSBucket="${BUCKET_NAME}" \
    --DiskDeviceMapping.1.OSSObject="${IMAGE_BLOB}" \
    --ImageName="${IMAGE_NAME}" \
    | jq --raw-output .TaskId)
等待映像成功导入

+ .超时等于一小时的等待示例

aliyun ecs DescribeTasks --region="${REGION}" --TaskIds="${TASK_ID}" \
    --waiter expr='TaskSet.Task[0].TaskStatus' to=Finished timeout=3600
确定导入的FCOS映像的ID:

+ .确定导入的FCOS映像的ID的示例

IMAGE_ID=$(aliyun ecs DescribeImages --region="${REGION}" --ImageName="${IMAGE_NAME}" \
    | jq --raw-output .Images.Image[0].ImageId)
删除上传的Blob

+ .删除上载的Blob示例

aliyun oss rm "${BUCKET_URL}/${IMAGE_BLOB}" --region "${REGION}"

创建vSwitch

阿里云中不存在默认私有网络或私有网络交换机。因此,要创建任何实例,必须存在vSwitch。选择一些现有的或通过以下步骤创建一个。

创建新的私有网络:

+ .创建新VPC的示例

VPC_CIDR="172.16.0.0/12"
VPC_NAME="fcos-test"
VPC_ID=$(aliyun vpc CreateVpc --region="${REGION}" \
    --CidrBlock="${VPC_CIDR}" --VpcName="${VPC_NAME}" \
    | jq --raw-output .VpcId)
选择一些可用区来创建vSwitch:

+ .示例选择一些可用区

ZONE_ID=$(aliyun ecs DescribeZones --region="${REGION}" \
    | jq --raw-output .Zones.Zone[0].ZoneId)
创建新的vSwitch:

+ .创建新vSwitch的示例

VSWITCH_CIDR="172.16.0.0/16"
VSWITCH_NAME="${VPC_NAME}"
VSWITCH_ID=$(aliyun vpc CreateVSwitch \
    --region="${REGION}" \
    --CidrBlock="${VSWITCH_CIDR}" \
    --VpcId="${VPC_ID}" \
    --VSwitchName="${VSWITCH_NAME}" \
    --ZoneId="${ZONE_ID}" \
    | jq --raw-output .VSwitchId)

启动ECS实例

上传SSH公钥到阿里云ECS

+ .上载SSH公钥的示例

KEY_PAIR_NAME="fcos-key"
PUBLIC_KEY_PATH="<Please fill the path to your public key>"
PUBLIC_KEY_BODY=$(cat ${PUBLIC_KEY_PATH})
aliyun ecs ImportKeyPair --region="${REGION}" \
    --KeyPairName="${KEY_PAIR_NAME}" --PublicKeyBody="${PUBLIC_KEY_BODY}"
创建ECS实例

+ .创建ECS实例示例

INSTANCE_NAME="my-fcos-vm"
INSTANCE_TYPE="ecs.t6-c1m1.large"
INSTANCE_ID=$(aliyun ecs CreateInstance \
    --region="${REGION}" \
    --KeyPairName="${KEY_PAIR_NAME}" \
    --ImageId="${IMAGE_ID}" \
    --InstanceName="${INSTANCE_NAME}" \
    --InstanceType="${INSTANCE_TYPE}" \
    --InternetChargeType=PayByTraffic \
    --InternetMaxBandwidthIn=5 \
    --InternetMaxBandwidthOut=5 \
    --VSwitchId="${VSWITCH_ID}" \
    | jq --raw-output .InstanceId)
为先前创建的实例分配公有IPv4地址

+ .分配公有IP地址示例

PUBLIC_IP=$(aliyun ecs AllocatePublicIpAddress \
    --region="${REGION}" --InstanceId="${INSTANCE_ID}" \
    | jq --raw-output .IpAddress)
启动实例

+ .启动实例示例

aliyun ecs StartInstance --region="${REGION}" --InstanceId="${INSTANCE_ID}"
等待实例运行

+ .示例等待和确定公有IP地址

aliyun ecs DescribeInstanceStatus --InstanceId.1="$INSTANCE_ID" --region="${REGION}" \
    --waiter expr='InstanceStatuses.InstanceStatus[0].Status' to=Running timeout=600
通过SSH连接到新实例

+ .连接示例

ssh core@"${PUBLIC_IP}"

通过添加参数,您可以使用您的Ignition文件启动一个自定义实例 --UserData=$(cat <Path to your Ignition config> | base64 -w0) 发送到 aliyun ecs CreateInstance 创建新实例的命令。