$ oc get managedclusters local-cluster
托管集群 是一个 OpenShift Container Platform 集群,其 API 端点和控制平面托管在管理集群上。托管集群包括控制平面及其相应的数据平面。要在本地配置托管控制平面,必须在管理集群中安装 Kubernetes 运算符的多集群引擎。通过使用hypershift-addon
托管集群附加组件在现有托管集群上部署 HyperShift 运算符,您可以将该集群启用为管理集群并开始创建托管集群。hypershift-addon
托管集群附加组件默认情况下为local-cluster
托管集群启用。
您可以使用多集群引擎运算符控制台或托管控制平面命令行界面 (CLI)hcp
创建托管集群。托管集群会自动作为托管集群导入。但是,您可以禁用此自动导入功能到多集群引擎运算符。
在准备在 Amazon Web Services (AWS) 上部署托管控制平面时,请考虑以下信息
每个托管集群必须具有集群范围内的唯一名称。为了让多集群引擎 Operator 能够管理托管集群,其名称不能与任何现有的托管集群名称相同。
请勿使用 clusters
作为托管集群名称。
对于托管控制平面,请在同一平台上运行管理集群和工作节点。
无法在多集群引擎 Operator 管理的集群的命名空间中创建托管集群。
配置管理集群需要满足以下先决条件:
您已在 OpenShift Container Platform 集群上安装了 Kubernetes Operator 2.5 或更高版本的 Multicluster Engine。安装 Red Hat Advanced Cluster Management (RHACM) 时会自动安装 Multicluster Engine Operator。Multicluster Engine Operator 也可以作为 OpenShift Container Platform OperatorHub 中的 Operator 在没有 RHACM 的情况下安装。
您至少拥有一个供 Multicluster Engine Operator 使用的托管 OpenShift Container Platform 集群。在 Multicluster Engine Operator 2.5 及更高版本中,local-cluster
会自动导入。您可以运行以下命令来检查您的中心集群的状态:
$ oc get managedclusters local-cluster
您已安装 aws
命令行界面 (CLI)。
您已安装托管控制平面 CLI,hcp
。
在 Amazon Web Services (AWS) 上创建和管理托管集群之前,必须创建 S3 存储桶和 S3 OIDC 密钥。
创建一个 S3 存储桶,该存储桶允许公开访问您的集群的 OIDC 发现文档,方法是运行以下命令:
$ aws s3api create-bucket --bucket <bucket_name> \(1)
--create-bucket-configuration LocationConstraint=<region> \(2)
--region <region> (2)
1 | 将 <bucket_name> 替换为您要创建的 S3 存储桶的名称。 |
2 | 要在 us-east-1 区域之外的区域创建存储桶,请包含此行并将 <region> 替换为您要使用的区域。要在 us-east-1 区域创建存储桶,请省略此行。 |
$ aws s3api delete-public-access-block --bucket <bucket_name> (1)
1 | 将 <bucket_name> 替换为您要创建的 S3 存储桶的名称。 |
$ echo '{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::<bucket_name>/*" (1)
}
]
}' | envsubst > policy.json
1 | 将 <bucket_name> 替换为您要创建的 S3 存储桶的名称。 |
$ aws s3api put-bucket-policy --bucket <bucket_name> --policy file://policy.json (1)
1 | 将 <bucket_name> 替换为您要创建的 S3 存储桶的名称。 |
如果您使用的是 Mac 计算机,则必须导出存储桶名称才能使策略正常工作。 |
为 HyperShift Operator 创建一个名为 hypershift-operator-oidc-provider-s3-credentials
的 OIDC S3 密钥。
将密钥保存到 local-cluster
命名空间。
请参阅下表,以验证密钥是否包含以下字段:
字段名称 | 描述 |
---|---|
|
包含一个 S3 存储桶,允许公开访问托管集群的 OIDC 发现文档。 |
|
对包含可以访问存储桶的 |
|
指定 S3 存储桶的区域。 |
要创建 AWS 密钥,请运行以下命令:
$ oc create secret generic <secret_name> --from-file=credentials=<path>/.aws/credentials --from-literal=bucket=<s3_bucket> --from-literal=region=<region> -n local-cluster
不会自动启用密钥的灾难恢复备份。要添加启用
|
要访问托管集群中的应用程序,必须配置可路由公共区域。如果公共区域已存在,请跳过此步骤。否则,公共区域会影响现有功能。
要为 DNS 记录创建可路由公共区域,请输入以下命令:
$ aws route53 create-hosted-zone --name <basedomain> --caller-reference $(whoami)-$(date --rfc-3339=date) (1)
1 | 将 <basedomain> 替换为您的基础域,例如 www.example.com 。 |
在 Amazon Web Services (AWS) 上创建托管集群之前,必须创建 AWS IAM 角色和 STS 凭据。
通过运行以下命令获取您的用户的 Amazon 资源名称 (ARN):
$ aws sts get-caller-identity --query "Arn" --output text
arn:aws:iam::1234567890:user/<aws_username>
将此输出用作下一步中 <arn>
的值。
创建一个包含角色信任关系配置的 JSON 文件。请参见以下示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "<arn>" (1)
},
"Action": "sts:AssumeRole"
}
]
}
1 | 将 <arn> 替换为您在上一步中记下的用户的 ARN。 |
通过运行以下命令创建 Identity and Access Management (IAM) 角色:
$ aws iam create-role \
--role-name <name> \(1)
--assume-role-policy-document file://<file_name>.json \(2)
--query "Role.Arn"
1 | 将 <name> 替换为角色名称,例如 hcp-cli-role 。 |
2 | 将 <file_name> 替换为您在上一步中创建的 JSON 文件的名称。 |
arn:aws:iam::820196288204:role/myrole
创建一个名为 policy.json
的 JSON 文件,其中包含角色的以下权限策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EC2",
"Effect": "Allow",
"Action": [
"ec2:CreateDhcpOptions",
"ec2:DeleteSubnet",
"ec2:ReplaceRouteTableAssociation",
"ec2:DescribeAddresses",
"ec2:DescribeInstances",
"ec2:DeleteVpcEndpoints",
"ec2:CreateNatGateway",
"ec2:CreateVpc",
"ec2:DescribeDhcpOptions",
"ec2:AttachInternetGateway",
"ec2:DeleteVpcEndpointServiceConfigurations",
"ec2:DeleteRouteTable",
"ec2:AssociateRouteTable",
"ec2:DescribeInternetGateways",
"ec2:DescribeAvailabilityZones",
"ec2:CreateRoute",
"ec2:CreateInternetGateway",
"ec2:RevokeSecurityGroupEgress",
"ec2:ModifyVpcAttribute",
"ec2:DeleteInternetGateway",
"ec2:DescribeVpcEndpointConnections",
"ec2:RejectVpcEndpointConnections",
"ec2:DescribeRouteTables",
"ec2:ReleaseAddress",
"ec2:AssociateDhcpOptions",
"ec2:TerminateInstances",
"ec2:CreateTags",
"ec2:DeleteRoute",
"ec2:CreateRouteTable",
"ec2:DetachInternetGateway",
"ec2:DescribeVpcEndpointServiceConfigurations",
"ec2:DescribeNatGateways",
"ec2:DisassociateRouteTable",
"ec2:AllocateAddress",
"ec2:DescribeSecurityGroups",
"ec2:RevokeSecurityGroupIngress",
"ec2:CreateVpcEndpoint",
"ec2:DescribeVpcs",
"ec2:DeleteSecurityGroup",
"ec2:DeleteDhcpOptions",
"ec2:DeleteNatGateway",
"ec2:DescribeVpcEndpoints",
"ec2:DeleteVpc",
"ec2:CreateSubnet",
"ec2:DescribeSubnets"
],
"Resource": "*"
},
{
"Sid": "ELB",
"Effect": "Allow",
"Action": [
"elasticloadbalancing:DeleteLoadBalancer",
"elasticloadbalancing:DescribeLoadBalancers",
"elasticloadbalancing:DescribeTargetGroups",
"elasticloadbalancing:DeleteTargetGroup"
],
"Resource": "*"
},
{
"Sid": "IAMPassRole",
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:*:iam::*:role/*-worker-role",
"Condition": {
"ForAnyValue:StringEqualsIfExists": {
"iam:PassedToService": "ec2.amazonaws.com"
}
}
},
{
"Sid": "IAM",
"Effect": "Allow",
"Action": [
"iam:CreateInstanceProfile",
"iam:DeleteInstanceProfile",
"iam:GetRole",
"iam:UpdateAssumeRolePolicy",
"iam:GetInstanceProfile",
"iam:TagRole",
"iam:RemoveRoleFromInstanceProfile",
"iam:CreateRole",
"iam:DeleteRole",
"iam:PutRolePolicy",
"iam:AddRoleToInstanceProfile",
"iam:CreateOpenIDConnectProvider",
"iam:ListOpenIDConnectProviders",
"iam:DeleteRolePolicy",
"iam:UpdateRole",
"iam:DeleteOpenIDConnectProvider",
"iam:GetRolePolicy"
],
"Resource": "*"
},
{
"Sid": "Route53",
"Effect": "Allow",
"Action": [
"route53:ListHostedZonesByVPC",
"route53:CreateHostedZone",
"route53:ListHostedZones",
"route53:ChangeResourceRecordSets",
"route53:ListResourceRecordSets",
"route53:DeleteHostedZone",
"route53:AssociateVPCWithHostedZone",
"route53:ListHostedZonesByName"
],
"Resource": "*"
},
{
"Sid": "S3",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:DeleteObject",
"s3:DeleteBucket"
],
"Resource": "*"
}
]
}
通过运行以下命令将 policy.json
文件附加到您的角色:
$ aws iam put-role-policy \
--role-name <role_name> \(1)
--policy-name <policy_name> \(2)
--policy-document file://policy.json (3)
1 | 将 <role_name> 替换为您的角色名称。 |
2 | 将 <policy_name> 替换为您的策略名称。 |
3 | policy.json 文件包含您的角色的权限策略。 |
通过运行以下命令在名为 sts-creds.json
的 JSON 文件中检索 STS 凭据:
$ aws sts get-session-token --output json > sts-creds.json
sts-creds.json
文件{
"Credentials": {
"AccessKeyId": "ASIA1443CE0GN2ATHWJU",
"SecretAccessKey": "XFLN7cZ5AP0d66KhyI4gd8Mu0UCQEDN9cfelW1”,
"SessionToken": "IQoJb3JpZ2luX2VjEEAaCXVzLWVhc3QtMiJHMEUCIDyipkM7oPKBHiGeI0pMnXst1gDLfs/TvfskXseKCbshAiEAnl1l/Html7Iq9AEIqf////KQburfkq4A3TuppHMr/9j1TgCj1z83SO261bHqlJUazKoy7vBFR/a6LHt55iMBqtKPEsIWjBgj/jSdRJI3j4Gyk1//luKDytcfF/tb9YrxDTPLrACS1lqAxSIFZ82I/jDhbDs=",
"Expiration": "2025-05-16T04:19:32+00:00"
}
}
要在 Amazon Web Services (AWS) 上使用 PrivateLink 预配托管控制平面,请为托管控制平面启用 AWS PrivateLink。
为 HyperShift Operator 创建一个 AWS 凭据密钥,并将其命名为 hypershift-operator-private-link-credentials
。密钥必须位于用作管理集群的托管集群的命名空间中。如果您使用的是 local-cluster
,请在 local-cluster
命名空间中创建密钥。
请参阅下表,以确认密钥是否包含必需的字段:
字段名称 | 描述 | 可选或必需 |
---|---|---|
|
与 Private Link 一起使用的区域 |
必需 |
|
凭据访问密钥 ID。 |
必需 |
|
凭据访问密钥。 |
必需 |
要创建 AWS 密钥,请运行以下命令:
$ oc create secret generic <secret_name> --from-literal=aws-access-key-id=<aws_access_key_id> --from-literal=aws-secret-access-key=<aws_secret_access_key> --from-literal=region=<region> -n local-cluster
不会自动启用密钥的灾难恢复备份。运行以下命令添加启用
|
在托管控制平面中,控制平面和数据平面是分开的。您可以在两个独立的区域配置 DNS:
托管集群内工作负载的入口,例如以下域:*.apps.service-consumer-domain.com
。
管理集群内服务端点的入口,例如通过服务提供商域的 API 或 OAuth 端点:*.service-provider-domain.com
。
hostedCluster.spec.dns
的输入管理托管集群内工作负载的入口。hostedCluster.spec.services.servicePublishingStrategy.route.hostname
的输入管理管理集群内服务端点的入口。
外部DNS为托管集群的Services
创建名称记录,这些记录指定发布类型为LoadBalancer
或Route
,并为该发布类型提供主机名。对于具有Private
或PublicAndPrivate
端点访问类型的托管集群,只有APIServer
和OAuth
服务支持主机名。对于Private
托管集群,DNS记录解析为虚拟私有云 (VPC) 中VPC端点的私有IP地址。
托管控制平面公开以下服务:
APIServer
OIDC
您可以使用HostedCluster
规范中的servicePublishingStrategy
字段公开这些服务。默认情况下,对于servicePublishingStrategy
的LoadBalancer
和Route
类型,您可以通过以下方式发布服务:
使用状态为LoadBalancer
类型的Service
的负载均衡器的主机名。
使用Route
资源的status.host
字段。
但是,当您在托管服务环境中部署托管控制平面时,这些方法可能会公开底层管理集群的入口子域名,并限制管理集群生命周期和灾难恢复的选项。
当在LoadBalancer
和Route
发布类型上叠加DNS间接寻址层时,托管服务运营商可以使用服务级域名发布所有公共托管集群服务。此架构允许将DNS名称重新映射到新的LoadBalancer
或Route
,并且不会公开管理集群的入口域名。托管控制平面使用外部DNS来实现该间接寻址层。
您可以在管理集群的hypershift
命名空间中与HyperShift Operator一起部署external-dns
。外部DNS会监视具有external-dns.alpha.kubernetes.io/hostname
注释的Services
或Routes
。该注释用于创建指向Service
(例如,A记录)或Route
(例如,CNAME记录)的DNS记录。
您只能在云环境中使用外部DNS。对于其他环境,您需要手动配置DNS和服务。
有关外部DNS的更多信息,请参阅external DNS。
在为Amazon Web Services (AWS)上的托管控制平面设置外部DNS之前,您必须满足以下先决条件:
您已创建外部公共域名。
您可以访问AWS Route53管理控制台。
您已为托管控制平面启用AWS PrivateLink。
您可以使用外部DNS或服务级DNS配置托管控制平面。
为HyperShift Operator创建一个Amazon Web Services (AWS)凭据密钥,并将其命名为hypershift-operator-external-dns-credentials
,位于local-cluster
命名空间中。
请参阅下表以验证密钥是否具有必需的字段:
字段名称 | 描述 | 可选或必需 |
---|---|---|
|
管理服务级DNS区域的DNS提供商。 |
必需 |
|
服务级域名。 |
必需 |
|
支持所有外部DNS类型的凭据文件。 |
使用AWS密钥时可选 |
|
凭据访问密钥 ID。 |
使用AWS DNS服务时可选 |
|
凭据访问密钥。 |
使用AWS DNS服务时可选 |
要创建 AWS 密钥,请运行以下命令:
$ oc create secret generic <secret_name> --from-literal=provider=aws --from-literal=domain-filter=<domain_name> --from-file=credentials=<path_to_aws_credentials_file> -n local-cluster
不会自动启用密钥的灾难恢复备份。要备份用于灾难恢复的密钥,请通过输入以下命令添加
|
外部DNS Operator使用公共DNS托管区域来创建您的公共托管集群。
您可以创建公共DNS托管区域用作外部DNS domain-filter。请在AWS Route 53管理控制台中完成以下步骤:
在Route 53管理控制台中,单击**创建托管区域**。
在**托管区域配置**页面上,键入域名,验证是否已选择**发布托管区域**作为类型,然后单击**创建托管区域**。
区域创建后,在**记录**选项卡上,记下**值/将流量路由到**列中的值。
在主域名中,创建NS记录以将DNS请求重定向到委派区域。在**值**字段中,输入您在上一步中记下的值。
单击**创建记录**。
通过在新子区域中创建一个测试条目并使用dig
命令(例如以下示例)对其进行测试,来验证DNS托管区域是否正常工作:
$ dig +short test.user-dest-public.aws.kerberos.com
192.168.1.1
要创建设置LoadBalancer
和Route
服务的 hostname 的托管集群,请输入以下命令:
$ hcp create cluster aws --name=<hosted_cluster_name> --endpoint-access=PublicAndPrivate --external-dns-domain=<public_hosted_zone> ... (1)
1 | 将<public_hosted_zone> 替换为您创建的公共托管区域。 |
services
块: platform:
aws:
endpointAccess: PublicAndPrivate
...
services:
- service: APIServer
servicePublishingStrategy:
route:
hostname: api-example.service-provider-domain.com
type: Route
- service: OAuthServer
servicePublishingStrategy:
route:
hostname: oauth-example.service-provider-domain.com
type: Route
- service: Konnectivity
servicePublishingStrategy:
type: Route
- service: Ignition
servicePublishingStrategy:
type: Route
控制平面操作员创建Services
和Routes
资源,并使用external-dns.alpha.kubernetes.io/hostname
注释对其进行注释。对于Services
和Routes
,控制平面操作员使用服务端点的servicePublishingStrategy
字段中hostname
参数的值。要创建DNS记录,您可以使用某种机制,例如external-dns
部署。
您只能为公共服务配置服务级DNS间接寻址。您无法为私有服务设置hostname
,因为它们使用hypershift.local
私有区域。
下表显示了何时可以为服务和端点组合设置hostname
:
服务 | 公共 |
---|---|
公共和私有 |
私有 |
|
Y |
Y |
N |
|
Y |
Y |
N |
|
Y |
N |
N |
|
Y |
N |
N |
要在Amazon Web Services (AWS)上使用PublicAndPrivate
或Public
发布策略创建托管集群,您必须在管理集群中配置以下工件:
公共DNS托管区域
外部DNS Operator
HyperShift Operator
您可以使用hcp
命令行界面 (CLI) 部署托管集群。
要访问您的管理集群,请输入以下命令:
$ export KUBECONFIG=<path_to_management_cluster_kubeconfig>
通过输入以下命令来验证外部DNS Operator是否正在运行:
$ oc get pod -n hypershift -lapp=external-dns
NAME READY STATUS RESTARTS AGE
external-dns-7c89788c69-rn8gp 1/1 Running 0 40s
要使用外部DNS创建托管集群,请输入以下命令:
$ hcp create cluster aws \
--role-arn <arn_role> \ (1)
--instance-type <instance_type> \ (2)
--region <region> \ (3)
--auto-repair \
--generate-ssh \
--name <hosted_cluster_name> \ (4)
--namespace clusters \
--base-domain <service_consumer_domain> \ (5)
--node-pool-replicas <node_replica_count> \ (6)
--pull-secret <path_to_your_pull_secret> \ (7)
--release-image quay.io/openshift-release-dev/ocp-release:<ocp_release_image> \ (8)
--external-dns-domain=<service_provider_domain> \ (9)
--endpoint-access=PublicAndPrivate (10)
--sts-creds <path_to_sts_credential_file> (11)
1 | 指定Amazon资源名称 (ARN),例如arn:aws:iam::820196288204:role/myrole 。 |
2 | 指定实例类型,例如m6i.xlarge 。 |
3 | 指定AWS区域,例如us-east-1 。 |
4 | 指定您的托管集群名称,例如my-external-aws 。 |
5 | 指定服务使用者拥有的公共托管区域,例如service-consumer-domain.com 。 |
6 | 指定节点副本数量,例如2 。 |
7 | 指定拉取密钥文件的路径。 |
8 | 指定您要使用的受支持的OpenShift Container Platform版本,例如4.17.0-multi 。 |
9 | 指定服务提供商拥有的公共托管区域,例如service-provider-domain.com 。 |
10 | 设置为PublicAndPrivate 。只有Public 或PublicAndPrivate 配置才能使用外部DNS。 |
11 | 指定AWS STS凭证文件的路径,例如,/home/user/sts-creds/sts-creds.json 。 |
您可以使用hcp
命令行界面(CLI)在Amazon Web Services (AWS)上创建托管集群。
在Amazon Web Services (AWS)上托管控制平面默认使用AMD64托管集群。但是,您可以启用托管控制平面在ARM64托管集群上运行。更多信息,请参见“在ARM64架构上运行托管集群”。
有关节点池和托管集群的兼容组合,请参见下表
托管集群 | 节点池 |
---|---|
AMD64 |
AMD64或ARM64 |
ARM64 |
ARM64或AMD64 |
您已设置托管控制平面CLI,hcp
。
您已启用local-cluster
托管集群作为管理集群。
您已创建AWS身份和访问管理(IAM)角色和AWS安全令牌服务(STS)凭证。
要在AWS上创建托管集群,请运行以下命令
$ hcp create cluster aws \
--name <hosted_cluster_name> \(1)
--infra-id <infra_id> \(2)
--base-domain <basedomain> \(3)
--sts-creds <path_to_sts_credential_file> \(4)
--pull-secret <path_to_pull_secret> \(5)
--region <region> \(6)
--generate-ssh \
--node-pool-replicas <node_pool_replica_count> \(7)
--namespace <hosted_cluster_namespace> \(8)
--role-arn <role_name> \(9)
--render-into <file_name>.yaml (10)
1 | 指定托管集群的名称,例如,example 。 |
2 | 指定您的基础设施名称。您必须为<hosted_cluster_name> 和<infra_id> 提供相同的值。否则,集群可能无法在Kubernetes Operator控制台的多集群引擎中正确显示。 |
3 | 指定您的基础域名,例如,example.com 。 |
4 | 指定AWS STS凭证文件的路径,例如,/home/user/sts-creds/sts-creds.json 。 |
5 | 指定您的拉取密钥的路径,例如,/user/name/pullsecret 。 |
6 | 指定AWS区域名称,例如,us-east-1 。 |
7 | 指定节点池副本数量,例如,3 。 |
8 | 默认情况下,所有HostedCluster 和NodePool 自定义资源都在clusters 命名空间中创建。您可以使用--namespace <namespace> 参数,在特定命名空间中创建HostedCluster 和NodePool 自定义资源。 |
9 | 指定Amazon资源名称 (ARN),例如arn:aws:iam::820196288204:role/myrole 。 |
10 | 如果要指示EC2实例是在共享硬件还是单租户硬件上运行,请包含此字段。--render-into 标志将Kubernetes资源渲染到您在此字段中指定的YAML文件中。然后,继续下一步编辑YAML文件。 |
如果您在上一个命令中包含了--render-into
标志,请编辑指定的YAML文件。编辑YAML文件中的NodePool
规范以指示EC2实例是否应在共享硬件或单租户硬件上运行,类似于以下示例
apiVersion: hypershift.openshift.io/v1beta1
kind: NodePool
metadata:
name: <nodepool_name> (1)
spec:
platform:
aws:
placement:
tenancy: "default" (2)
1 | 指定NodePool 资源的名称。 |
2 | 指定租户的有效值:"default" 、"dedicated" 或"host" 。当节点池实例在共享硬件上运行时,使用"default" 。当每个节点池实例在单租户硬件上运行时,使用"dedicated" 。当节点池实例在您预分配的专用主机上运行时,使用"host" 。 |
验证托管集群的状态,检查AVAILABLE
的值是否为True
。运行以下命令
$ oc get hostedclusters -n <hosted_cluster_namespace>
通过运行以下命令获取节点池列表
$ oc get nodepools --namespace <hosted_cluster_namespace>
在Amazon Web Services (AWS)上创建托管集群后,您可以通过获取kubeconfig
文件、访问密钥和kubeadmin
凭证来访问托管集群。
托管集群命名空间包含托管集群资源和访问密钥。托管控制平面在托管控制平面命名空间中运行。
密钥名称格式如下
kubeconfig
密钥:<hosted_cluster_namespace>-<name>-admin-kubeconfig
。例如,clusters-hypershift-demo-admin-kubeconfig
。
kubeadmin
密码密钥:<hosted_cluster_namespace>-<name>-kubeadmin-password
。例如,clusters-hypershift-demo-kubeadmin-password
。
|
使用包含已解码kubeconfig
配置的<hosted_cluster_name>.kubeconfig
文件来访问托管集群。输入以下命令
$ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
您必须解码kubeadmin
密码密钥才能登录到托管集群的API服务器或控制台。
您可以使用hcp
命令行界面(CLI)在Amazon Web Services (AWS)上的多个区域创建托管集群。
您已创建AWS身份和访问管理(IAM)角色和AWS安全令牌服务(STS)凭证。
通过运行以下命令在AWS上的多个区域创建托管集群
$ hcp create cluster aws \
--name <hosted_cluster_name> \(1)
--node-pool-replicas=<node_pool_replica_count> \(2)
--base-domain <basedomain> \(3)
--pull-secret <path_to_pull_secret> \(4)
--role-arn <arn_role> \(5)
--region <region> \(6)
--zones <zones> \(7)
--sts-creds <path_to_sts_credential_file> (8)
1 | 指定托管集群的名称,例如,example 。 |
2 | 指定节点池副本数量,例如,2 。 |
3 | 指定您的基础域名,例如,example.com 。 |
4 | 指定您的拉取密钥的路径,例如,/user/name/pullsecret 。 |
5 | 指定Amazon资源名称 (ARN),例如arn:aws:iam::820196288204:role/myrole 。 |
6 | 指定AWS区域名称,例如,us-east-1 。 |
7 | 指定AWS区域内的可用区,例如,us-east-1a 和us-east-1b 。 |
8 | 指定AWS STS凭证文件的路径,例如,/home/user/sts-creds/sts-creds.json 。 |
对于每个指定的区域,将创建以下基础设施
公共子网
私有子网
NAT网关
私有路由表
公共路由表在公共子网之间共享。
每个区域将创建一个NodePool
资源。节点池名称以区域名称作为后缀。区域的私有子网设置在spec.platform.aws.subnet.id
中。
当您使用hcp create cluster aws
命令创建托管集群时,您必须提供具有创建托管集群基础设施资源权限的Amazon Web Services (AWS)帐户凭证。
基础设施资源包括以下示例
虚拟私有云 (VPC)
子网
网络地址转换 (NAT) 网关
您可以通过以下两种方式之一提供AWS凭证
AWS安全令牌服务 (STS) 凭证
来自多集群引擎 Operator 的AWS云提供商密钥
要通过提供AWS STS凭证在AWS上创建托管集群,请输入以下命令
$ hcp create cluster aws \
--name <hosted_cluster_name> \(1)
--node-pool-replicas <node_pool_replica_count> \(2)
--base-domain <basedomain> \(3)
--pull-secret <path_to_pull_secret> \(4)
--sts-creds <path_to_sts_credential_file> \(5)
--region <region> \(6)
--role-arn <arn_role> (7)
1 | 指定托管集群的名称,例如,example 。 |
2 | 指定节点池副本数量,例如,2 。 |
3 | 指定您的基础域名,例如,example.com 。 |
4 | 指定您的拉取密钥的路径,例如,/user/name/pullsecret 。 |
5 | 指定AWS STS凭证文件的路径,例如,/home/user/sts-creds/sts-creds.json 。 |
6 | 指定AWS区域名称,例如,us-east-1 。 |
7 | 指定Amazon资源名称 (ARN),例如arn:aws:iam::820196288204:role/myrole 。 |
在 Amazon Web Services (AWS) 上默认情况下,托管控制平面使用 AMD64 托管集群。但是,您可以启用托管控制平面在 ARM64 托管集群上运行。
有关节点池和托管集群的兼容组合,请参见下表
托管集群 | 节点池 |
---|---|
AMD64 |
AMD64或ARM64 |
ARM64 |
ARM64或AMD64 |
您可以通过使用多架构发行版镜像覆盖默认发行版镜像,在 Amazon Web Services (AWS) 的 ARM64 OpenShift Container Platform 集群上运行托管集群。
如果您不使用多架构发行版镜像,则节点池中的计算节点将不会创建,并且节点池的协调将停止,直到您在托管集群中使用多架构发行版镜像或根据发行版镜像更新NodePool
自定义资源。
您必须拥有一个安装在 AWS 上的,具有 64 位 ARM 基础设施的 OpenShift Container Platform 集群。更多信息,请参见 创建 OpenShift Container Platform 集群:AWS (ARM)。
您必须创建一个 AWS Identity and Access Management (IAM) 角色和 AWS 安全令牌服务 (STS) 凭据。更多信息,请参见“创建 AWS IAM 角色和 STS 凭据”。
通过输入以下命令在 ARM64 OpenShift Container Platform 集群上创建一个托管集群
$ hcp create cluster aws \
--name <hosted_cluster_name> \(1)
--node-pool-replicas <node_pool_replica_count> \(2)
--base-domain <basedomain> \(3)
--pull-secret <path_to_pull_secret> \(4)
--sts-creds <path_to_sts_credential_file> \(5)
--region <region> \(6)
--release-image quay.io/openshift-release-dev/ocp-release:<ocp_release_image> \(7)
--role-arn <role_name> (8)
1 | 指定托管集群的名称,例如,example 。 |
2 | 指定节点池副本数量,例如,3 。 |
3 | 指定您的基础域名,例如,example.com 。 |
4 | 指定您的拉取密钥的路径,例如,/user/name/pullsecret 。 |
5 | 指定AWS STS凭证文件的路径,例如,/home/user/sts-creds/sts-creds.json 。 |
6 | 指定AWS区域名称,例如,us-east-1 。 |
7 | 指定您想要使用的受支持的 OpenShift Container Platform 版本,例如,4.17.0-multi 。如果您使用的是脱机环境,请将<ocp_release_image> 替换为摘要镜像。要提取 OpenShift Container Platform 发行版镜像摘要,请参见“提取 OpenShift Container Platform 发行版镜像摘要”。 |
8 | 指定Amazon资源名称 (ARN),例如arn:aws:iam::820196288204:role/myrole 。 |
通过运行以下命令向托管集群添加NodePool
对象
$ hcp create nodepool aws \
--cluster-name <hosted_cluster_name> \(1)
--name <nodepool_name> \(2)
--node-count <node_pool_replica_count> (3)
1 | 指定托管集群的名称,例如,example 。 |
2 | 指定节点池名称。 |
3 | 指定节点池副本数量,例如,3 。 |
您可以从同一个托管控制平面调度NodePool
对象上的应用程序工作负载,这些对象在 64 位 ARM 和 AMD 上运行。您可以在NodePool
规范中定义arch
字段来设置NodePool
对象所需的处理器架构。arch
字段的有效值如下:
arm64
amd64
您必须拥有HostedCluster
自定义资源才能使用多架构镜像。您可以访问 多架构每日构建镜像。
通过运行以下命令向 AWS 上的托管集群添加 ARM 或 AMD NodePool
对象
$ hcp create nodepool aws \
--cluster-name <hosted_cluster_name> \(1)
--name <node_pool_name> \(2)
--node-count <node_pool_replica_count> \(3)
--arch <architecture> (4)
1 | 指定托管集群的名称,例如,example 。 |
2 | 指定节点池名称。 |
3 | 指定节点池副本数量,例如,3 。 |
4 | 指定架构类型,例如arm64 或amd64 。如果您没有为--arch 标志指定值,则默认使用amd64 值。 |
启用local-cluster
作为托管集群后,您可以在 Amazon Web Services (AWS) 上部署托管集群或私有托管集群。
默认情况下,托管集群可以通过公共 DNS 和管理集群的默认路由器公开访问。
对于 AWS 上的私有集群,与托管集群的所有通信都通过 AWS PrivateLink 进行。
您已启用 AWS PrivateLink。更多信息,请参见“启用 AWS PrivateLink”。
您已创建 AWS Identity and Access Management (IAM) 角色和 AWS 安全令牌服务 (STS) 凭据。更多信息,请参见“创建 AWS IAM 角色和 STS 凭据”和“身份和访问管理 (IAM) 权限”。
您已配置了 AWS 上的堡垒机实例。
通过输入以下命令在 AWS 上创建一个私有托管集群
$ hcp create cluster aws \
--name <hosted_cluster_name> \(1)
--node-pool-replicas=<node_pool_replica_count> \(2)
--base-domain <basedomain> \(3)
--pull-secret <path_to_pull_secret> \(4)
--sts-creds <path_to_sts_credential_file> \(5)
--region <region> \(6)
--endpoint-access Private \(7)
--role-arn <role_name> (8)
1 | 指定托管集群的名称,例如,example 。 |
2 | 指定节点池副本数量,例如,3 。 |
3 | 指定您的基础域名,例如,example.com 。 |
4 | 指定您的拉取密钥的路径,例如,/user/name/pullsecret 。 |
5 | 指定AWS STS凭证文件的路径,例如,/home/user/sts-creds/sts-creds.json 。 |
6 | 指定AWS区域名称,例如,us-east-1 。 |
7 | 定义集群是公共的还是私有的。 |
8 | 指定 Amazon 资源名称 (ARN),例如,arn:aws:iam::820196288204:role/myrole 。有关 ARN 角色的更多信息,请参见“身份和访问管理 (IAM) 权限”。 |
托管集群的以下 API 端点可以通过私有 DNS 区域访问
api.<hosted_cluster_name>.hypershift.local
*.apps.<hosted_cluster_name>.hypershift.local
您可以使用命令行界面 (CLI) 访问您的私有管理集群。
通过输入以下命令查找节点的私有 IP
$ aws ec2 describe-instances --filter="Name=tag:kubernetes.io/cluster/<infra_id>,Values=owned" | jq '.Reservations[] | .Instances[] | select(.PublicDnsName=="") | .PrivateIpAddress'
通过输入以下命令为托管集群创建一个kubeconfig
文件,您可以将其复制到节点
$ hcp create kubeconfig > <hosted_cluster_kubeconfig>
要通过堡垒机 SSH 到其中一个节点,请输入以下命令
$ ssh -o ProxyCommand="ssh ec2-user@<bastion_ip> -W %h:%p" core@<node_ip>
在 SSH shell 中,通过输入以下命令将kubeconfig
文件内容复制到节点上的文件
$ mv <path_to_kubeconfig_file> <new_file_name>
通过输入以下命令导出kubeconfig
文件
$ export KUBECONFIG=<path_to_kubeconfig_file>
通过输入以下命令观察托管集群状态
$ oc get clusteroperators clusterversion