-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
517 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
257 changes: 257 additions & 0 deletions
257
.../cloud-experts-getting-started-deploying/cloud-experts-getting-started-hcp.adoc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,257 @@ | ||
:_mod-docs-content-type: ASSEMBLY | ||
[id="cloud-experts-getting-started-hcp-guide-for-classic"] | ||
= Tutorial: Hosted control plane (HCP) guide | ||
include::_attributes/attributes-openshift-dedicated.adoc[] | ||
include::_attributes/common-attributes.adoc[] | ||
:context: cloud-experts-getting-started-hcp | ||
|
||
toc::[] | ||
|
||
//rosaworkshop.io content metadata | ||
//Brought into ROSA product docs 2023-11-21 | ||
//Updated for HCP 2024-07-01 | ||
|
||
Follow this workshop to deploy a sample {hcp-title-first} cluster. You can then use your cluster in the next tutorials. | ||
|
||
.Tutorial objectives | ||
|
||
* Learn to create your cluster prerequisites: | ||
** Create a sample virtual private cloud (VPC) | ||
** Create sample OpenID Connect (OIDC) resources | ||
* Create sample environment variables | ||
* Deploy a sample ROSA cluster | ||
.Prerequisites | ||
|
||
* ROSA version 1.2.31 or later | ||
* Amazon Web Service (AWS) command line interface (CLI) | ||
* ROSA CLI (`rosa`) | ||
== Creating your cluster prerequisites | ||
|
||
Before deploying a {hcp-title} cluster, you must have both a VPC and OIDC resources. We will create these resources first. ROSA uses the bring your own VPC (BYO-VPC) model. | ||
|
||
=== Creating a VPC | ||
. Make sure your AWS CLI (`aws`) is configured to use a region where ROSA is available. See the regions supported by the AWS CLI by running the following command: | ||
+ | ||
[source,terminal] | ||
---- | ||
$ rosa list regions --hosted-cp | ||
---- | ||
|
||
. Create the VPC. For this tutorial, the following link:https://github.com/openshift-cs/rosaworkshop/blob/master/rosa-workshop/rosa/resources/setup-vpc.sh[script] creates the VPC and its required components. It uses the region configured in your `aws` CLI. | ||
+ | ||
[source,bash] | ||
---- | ||
#!/bin/bash | ||
set -e | ||
########## | ||
# This script will create the network requirements for a ROSA cluster. This will be | ||
# a public cluster. This creates: | ||
# - VPC | ||
# - Public and private subnets | ||
# - Internet Gateway | ||
# - Relevant route tables | ||
# - NAT Gateway | ||
# | ||
# This will automatically use the region configured for the aws cli | ||
# | ||
########## | ||
VPC_CIDR=10.0.0.0/16 | ||
PUBLIC_CIDR_SUBNET=10.0.1.0/24 | ||
PRIVATE_CIDR_SUBNET=10.0.0.0/24 | ||
# Create VPC | ||
echo -n "Creating VPC..." | ||
VPC_ID=$(aws ec2 create-vpc --cidr-block $VPC_CIDR --query Vpc.VpcId --output text) | ||
# Create tag name | ||
aws ec2 create-tags --resources $VPC_ID --tags Key=Name,Value=$CLUSTER_NAME | ||
# Enable dns hostname | ||
aws ec2 modify-vpc-attribute --vpc-id $VPC_ID --enable-dns-hostnames | ||
echo "done." | ||
# Create Public Subnet | ||
echo -n "Creating public subnet..." | ||
PUBLIC_SUBNET_ID=$(aws ec2 create-subnet --vpc-id $VPC_ID --cidr-block $PUBLIC_CIDR_SUBNET --query Subnet.SubnetId --output text) | ||
aws ec2 create-tags --resources $PUBLIC_SUBNET_ID --tags Key=Name,Value=$CLUSTER_NAME-public | ||
echo "done." | ||
# Create private subnet | ||
echo -n "Creating private subnet..." | ||
PRIVATE_SUBNET_ID=$(aws ec2 create-subnet --vpc-id $VPC_ID --cidr-block $PRIVATE_CIDR_SUBNET --query Subnet.SubnetId --output text) | ||
aws ec2 create-tags --resources $PRIVATE_SUBNET_ID --tags Key=Name,Value=$CLUSTER_NAME-private | ||
echo "done." | ||
# Create an internet gateway for outbound traffic and attach it to the VPC. | ||
echo -n "Creating internet gateway..." | ||
IGW_ID=$(aws ec2 create-internet-gateway --query InternetGateway.InternetGatewayId --output text) | ||
echo "done." | ||
aws ec2 create-tags --resources $IGW_ID --tags Key=Name,Value=$CLUSTER_NAME | ||
aws ec2 attach-internet-gateway --vpc-id $VPC_ID --internet-gateway-id $IGW_ID > /dev/null 2>&1 | ||
echo "Attached IGW to VPC." | ||
# Create a route table for outbound traffic and associate it to the public subnet. | ||
echo -n "Creating route table for public subnet..." | ||
PUBLIC_ROUTE_TABLE_ID=$(aws ec2 create-route-table --vpc-id $VPC_ID --query RouteTable.RouteTableId --output text) | ||
aws ec2 create-tags --resources $PUBLIC_ROUTE_TABLE_ID --tags Key=Name,Value=$CLUSTER_NAME | ||
echo "done." | ||
aws ec2 create-route --route-table-id $PUBLIC_ROUTE_TABLE_ID --destination-cidr-block 0.0.0.0/0 --gateway-id $IGW_ID > /dev/null 2>&1 | ||
echo "Created default public route." | ||
aws ec2 associate-route-table --subnet-id $PUBLIC_SUBNET_ID --route-table-id $PUBLIC_ROUTE_TABLE_ID > /dev/null 2>&1 | ||
echo "Public route table associated" | ||
# Create a NAT gateway in the public subnet for outgoing traffic from the private network. | ||
echo -n "Creating NAT Gateway..." | ||
NAT_IP_ADDRESS=$(aws ec2 allocate-address --domain vpc --query AllocationId --output text) | ||
NAT_GATEWAY_ID=$(aws ec2 create-nat-gateway --subnet-id $PUBLIC_SUBNET_ID --allocation-id $NAT_IP_ADDRESS --query NatGateway.NatGatewayId --output text) | ||
aws ec2 create-tags --resources $NAT_IP_ADDRESS --resources $NAT_GATEWAY_ID --tags Key=Name,Value=$CLUSTER_NAME | ||
sleep 10 | ||
echo "done." | ||
# Create a route table for the private subnet to the NAT gateway. | ||
echo -n "Creating a route table for the private subnet to the NAT gateway..." | ||
PRIVATE_ROUTE_TABLE_ID=$(aws ec2 create-route-table --vpc-id $VPC_ID --query RouteTable.RouteTableId --output text) | ||
aws ec2 create-tags --resources $PRIVATE_ROUTE_TABLE_ID $NAT_IP_ADDRESS --tags Key=Name,Value=$CLUSTER_NAME-private | ||
aws ec2 create-route --route-table-id $PRIVATE_ROUTE_TABLE_ID --destination-cidr-block 0.0.0.0/0 --gateway-id $NAT_GATEWAY_ID > /dev/null 2>&1 | ||
aws ec2 associate-route-table --subnet-id $PRIVATE_SUBNET_ID --route-table-id $PRIVATE_ROUTE_TABLE_ID > /dev/null 2>&1 | ||
echo "done." | ||
# echo "***********VARIABLE VALUES*********" | ||
# echo "VPC_ID="$VPC_ID | ||
# echo "PUBLIC_SUBNET_ID="$PUBLIC_SUBNET_ID | ||
# echo "PRIVATE_SUBNET_ID="$PRIVATE_SUBNET_ID | ||
# echo "PUBLIC_ROUTE_TABLE_ID="$PUBLIC_ROUTE_TABLE_ID | ||
# echo "PRIVATE_ROUTE_TABLE_ID="$PRIVATE_ROUTE_TABLE_ID | ||
# echo "NAT_GATEWAY_ID="$NAT_GATEWAY_ID | ||
# echo "IGW_ID="$IGW_ID | ||
# echo "NAT_IP_ADDRESS="$NAT_IP_ADDRESS | ||
echo "Setup complete." | ||
echo "" | ||
echo "To make the cluster create commands easier, please run the following commands to set the environment variables:" | ||
echo "export PUBLIC_SUBNET_ID=$PUBLIC_SUBNET_ID" | ||
echo "export PRIVATE_SUBNET_ID=$PRIVATE_SUBNET_ID" | ||
---- | ||
+ | ||
[role="_additional-resources"] | ||
.Additional resources | ||
* For more about VPC requirements, see the xref:../../../rosa_planning/rosa-sts-aws-prereqs.adoc#rosa-vpc_rosa-sts-aws-prereqs[VPC documentation]. | ||
|
||
. The script outputs commands. Set the commands as environment variables to store the subnet IDs for later use. Copy and run the commands: | ||
+ | ||
[source,terminal] | ||
---- | ||
$ export PUBLIC_SUBNET_ID=$PUBLIC_SUBNET_ID | ||
$ export PRIVATE_SUBNET_ID=$PRIVATE_SUBNET_ID | ||
---- | ||
|
||
. Confirm your environment variables by running the following command: | ||
+ | ||
[source,terminal] | ||
---- | ||
$ echo "Public Subnet: $PUBLIC_SUBNET_ID"; echo "Private Subnet: $PRIVATE_SUBNET_ID" | ||
---- | ||
+ | ||
.Example output | ||
+ | ||
[source,terminal] | ||
---- | ||
Public Subnet: subnet-0faeeeb0000000000 | ||
Private Subnet: subnet-011fe340000000000 | ||
---- | ||
|
||
=== Creating your OIDC configuration | ||
In this tutorial, we will use the automatic mode when creating the OIDC configuration. We will also store the OIDC ID as an environment variable for later use. The command uses the ROSA CLI to create your cluster's unique OIDC configuration. | ||
|
||
* Create the OIDC configuration by running the following command: | ||
+ | ||
[source,terminal] | ||
---- | ||
$ export OIDC_ID=$(rosa create oidc-config --mode auto --managed --yes -o json | jq -r '.id') | ||
---- | ||
|
||
== Creating additional environment variables | ||
|
||
* Run the following command to set up environment variables. These variables make it easier to run the command to create a ROSA cluster: | ||
+ | ||
[source,terminal] | ||
---- | ||
$ export CLUSTER_NAME=<cluster_name> | ||
$ export REGION=<VPC_region> | ||
---- | ||
+ | ||
[TIP] | ||
==== | ||
Run `rosa whoami` to find the VPC region. | ||
==== | ||
|
||
== Creating a cluster | ||
|
||
. *Optional:* Run the following command to create the account-wide roles and policies, including the Operator policies and the AWS IAM roles and policies: | ||
+ | ||
[IMPORTANT] | ||
==== | ||
Only complete this step if this is the _first time_ you are deploying ROSA in this account and you have _not_ yet created your account roles and policies. | ||
==== | ||
+ | ||
[source,terminal] | ||
---- | ||
$ rosa create account-roles --mode auto --yes | ||
---- | ||
|
||
. Run the following command to create the cluster: | ||
+ | ||
[source,terminal] | ||
---- | ||
$ rosa create cluster --cluster-name $CLUSTER_NAME \ | ||
--subnet-ids ${PUBLIC_SUBNET_ID},${PRIVATE_SUBNET_ID} \ | ||
--hosted-cp \ | ||
--region $REGION \ | ||
--oidc-config-id $OIDC_ID \ | ||
--sts --mode auto --yes | ||
---- | ||
|
||
The cluster is ready after about 10 minutes. The cluster will have a control plane across three AWS availability zones in your selected region and create two worker nodes in your AWS account. | ||
|
||
== Checking the installation status | ||
. Run one of the following commands to check the status of the cluster: | ||
+ | ||
* For a detailed view of the cluster status, run: | ||
+ | ||
[source,terminal] | ||
---- | ||
$ rosa describe cluster --cluster $CLUSTER_NAME | ||
---- | ||
+ | ||
* For an abridged view of the cluster status, run: | ||
+ | ||
[source,terminal] | ||
---- | ||
$ rosa list clusters | ||
---- | ||
+ | ||
* To watch the log as it progresses, run: | ||
+ | ||
[source,terminal] | ||
---- | ||
$ rosa logs install --cluster $CLUSTER_NAME --watch | ||
---- | ||
|
||
. Once the state changes to “ready” your cluster is installed. It might take a few more minutes for the worker nodes to come online. |
Oops, something went wrong.