Skip to content

Commit 741ea96

Browse files
authored
Merge pull request #55427 from ogradyp/TELCODOCS-959
TELCODOCS-959: Openshift on AWS Outpost support
2 parents e15e7d3 + c7a5e02 commit 741ea96

18 files changed

+413
-28
lines changed

_topic_maps/_topic_map.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,8 @@ Topics:
180180
File: installing-aws-localzone
181181
- Name: Installing a cluster on AWS in a restricted network with user-provisioned infrastructure
182182
File: installing-restricted-networks-aws
183+
- Name: Installing a cluster on AWS with remote workers on AWS Outposts
184+
File: installing-aws-outposts-remote-workers
183185
- Name: Uninstalling a cluster on AWS
184186
File: uninstalling-cluster-aws
185187
- Name: Installing on Azure

installing/installing_aws/installing-aws-account.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,4 @@ include::modules/installation-aws-regions.adoc[leveloffset=+1]
4646
** xref:../../installing/installing_aws/installing-aws-customizations.adoc#installing-aws-customizations[Install a cluster with cloud customizations on installer-provisioned infrastructure]
4747
** xref:../../installing/installing_aws/installing-aws-network-customizations.adoc#installing-aws-network-customizations[Install a cluster with network customizations on installer-provisioned infrastructure]
4848
** xref:../../installing/installing_aws/installing-aws-user-infra.adoc#installing-aws-user-infra[Installing a cluster on user-provisioned infrastructure in AWS by using CloudFormation templates]
49+
** xref:../../installing/installing_aws/installing-aws-outposts-remote-workers.adoc#installing-aws-outposts-remote-workers[Installing a cluster on AWS with remote workers on AWS Outposts]
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
:_content-type: ASSEMBLY
2+
[id="installing-aws-outposts-remote-workers"]
3+
= Installing a cluster on AWS with remote workers on AWS Outposts
4+
include::_attributes/common-attributes.adoc[]
5+
:context: installing-aws-outposts-remote-workers
6+
7+
toc::[]
8+
9+
In {product-title} version {product-version}, you can install a cluster on
10+
Amazon Web Services (AWS) with remote workers running in AWS Outposts.
11+
This can be achieved by customizing the default AWS installation and performing some manual steps.
12+
13+
For more info about AWS Outposts see link:https://docs.aws.amazon.com/outposts/index.html[AWS Outposts Documentation].
14+
15+
[IMPORTANT]
16+
====
17+
In order to install a cluster with remote workers in AWS Outposts, all worker instances must be located within the same Outpost instance and cannot be located in an AWS region. It is not possible for the cluster to have instances in both AWS Outposts and AWS region. In addition, it also follows that control plane nodes mustn't be schedulable.
18+
====
19+
20+
== Prerequisites
21+
22+
* You reviewed details about the xref:../../architecture/architecture-installation.adoc#architecture-installation[{product-title} installation and update] processes.
23+
* You read the documentation on xref:../../installing/installing-preparing.adoc#installing-preparing[selecting a cluster installation method and preparing it for users].
24+
* You xref:../../installing/installing_aws/installing-aws-account.adoc#installing-aws-account[configured an AWS account] to host the cluster.
25+
* You are familiar with the instance types are supported in the AWS Outpost instance you use. This can be validated with link:https://docs.aws.amazon.com/cli/latest/reference/outposts/get-outpost-instance-types.html[get-outpost-instance-types AWS CLI command]
26+
* You are familiar with the AWS Outpost instance details, such as OutpostArn and AvailabilityZone. This can be validated with link:https://docs.aws.amazon.com/cli/latest/reference/outposts/list-outposts.html[list-outposts AWS CLI command]
27+
+
28+
[IMPORTANT]
29+
====
30+
Since the cluster uses the provided AWS credentials to create AWS resources for its entire life cycle, the credentials must be key-based and long-lived. So, If you have an AWS profile stored on your computer, it must not use a temporary session token, generated while using a multi-factor authentication device. For more information about generating the appropriate keys, see link:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html[Managing Access Keys for IAM Users] in the AWS documentation. You may supply the keys when you run the installation program.
31+
====
32+
* You have access to an existing Amazon Virtual Private Cloud (VPC) in Amazon Web Services (AWS). See the section "About using a custom VPC" for more information.
33+
* If a firewall is used, it was xref:../../installing/install_config/configuring-firewall.adoc#configuring-firewall[configured to allow the sites] that your cluster requires access to.
34+
* If the cloud identity and access management (IAM) APIs are not accessible in your environment, or if you do not want to store an administrator-level credential secret in the `kube-system` namespace, you can xref:../../installing/installing_aws/manually-creating-iam.adoc#manually-creating-iam-aws[manually create and maintain IAM credentials].
35+
36+
include::modules/installation-custom-aws-vpc.adoc[leveloffset=+1]
37+
38+
include::modules/cluster-entitlements.adoc[leveloffset=+1]
39+
40+
include::modules/ssh-agent-using.adoc[leveloffset=+1]
41+
42+
include::modules/installation-obtaining-installer.adoc[leveloffset=+1]
43+
44+
include::modules/installation-minimum-resource-requirements.adoc[leveloffset=+1]
45+
46+
include::modules/installation-identify-supported-aws-outposts-instance-types.adoc[leveloffset=+1]
47+
48+
include::modules/installation-initializing.adoc[leveloffset=+1]
49+
50+
include::modules/installation-configuration-parameters.adoc[leveloffset=+2]
51+
52+
include::modules/installation-aws-config-yaml.adoc[leveloffset=+2]
53+
54+
include::modules/installation-aws-editing-manifests.adoc[leveloffset=+1]
55+
56+
include::modules/installation-launching-installer.adoc[leveloffset=+1]
57+
58+
include::modules/cli-installing-cli.adoc[leveloffset=+1]
59+
60+
include::modules/cli-logging-in-kubeadmin.adoc[leveloffset=+1]
61+
62+
include::modules/logging-in-by-using-the-web-console.adoc[leveloffset=+1]
63+
64+
include::modules/cluster-telemetry.adoc[leveloffset=+1]
65+
66+
[role="_additional-resources"]
67+
.Additional resources
68+
69+
* See xref:../../web_console/web-console.adoc#web-console[Accessing the web console] for more details about accessing and understanding the {product-title} web console.
70+
* See xref:../../support/remote_health_monitoring/about-remote-health-monitoring.adoc#about-remote-health-monitoring[About remote health monitoring] for more information about the Telemetry service.
71+
72+
== Cluster Limitations
73+
74+
[IMPORTANT]
75+
====
76+
Network Load Balancer (NLB) and Classic Load Balancer are not supported on AWS Outposts. After the cluster is created, all the Load Balancers are created in the AWS region. In order to use Load Balancers created inside the Outpost instances, Application Load Balancer should be used. The AWS Load Balancer Operator can be used in order to achieve that goal.
77+
78+
If you want to use a public subnet located in the outpost instance for the ALB, you need to remove the special tag (`kubernetes.io/cluster/.*-outposts: owned`) that was added earlier during the VPC creation. This will prevent you from creating new Services of type LoadBalancer (Network Load Balancer).
79+
80+
See xref:../../networking/aws_load_balancer_operator/understanding-aws-load-balancer-operator.adoc[Understanding the AWS Load Balancer Operator] for more information
81+
====
82+
83+
[IMPORTANT]
84+
====
85+
Persistent storage using AWS Elastic Block Store limitations
86+
87+
* AWS Outposts does not support Amazon Elastic Block Store (EBS) gp3 volumes. After installation, the cluster includes two storage classes - gp3-csi and gp2-csi, with gp3-csi being the default storage class. It is important to always use gp2-csi. You can change the default storage class using the following OpenShift CLI (oc) commands:
88+
+
89+
[source,terminal]
90+
----
91+
$ oc annotate --overwrite storageclass gp3-csi storageclass.kubernetes.io/is-default-class=false
92+
$ oc annotate --overwrite storageclass gp2-csi storageclass.kubernetes.io/is-default-class=true
93+
----
94+
* To create a Volume in the Outpost instance, the CSI driver determines the Outpost ARN based on the topology keys stored on the CSINode objects. To ensure that the CSI driver uses the correct topology values, it is necessary to use the `WaitForConsumer` volume binding mode and avoid setting allowed topologies on any new storage class created.
95+
====
96+
97+
== Next steps
98+
99+
* xref:../../installing/validating-an-installation.adoc#validating-an-installation[Validating an installation].
100+
* xref:../../post_installation_configuration/cluster-tasks.adoc#available_cluster_customizations[Customize your cluster].
101+
* If necessary, you can xref:../../support/remote_health_monitoring/opting-out-of-remote-health-reporting.adoc#opting-out-remote-health-reporting_opting-out-remote-health-reporting[opt out of remote health reporting].
102+
* If necessary, you can xref:../../authentication/managing_cloud_provider_credentials/cco-mode-mint.adoc#manually-removing-cloud-creds_cco-mode-mint[remove cloud provider credentials].

modules/cli-installing-cli.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
// * installing/installing_aws/installing-aws-private.adoc
1414
// * installing/installing_aws/installing-aws-vpc.adoc
1515
// * installing/installing_aws/installing-restricted-networks-aws-installer-provisioned.adoc
16+
// * installing/installing_aws/installing-aws-outposts-remote-workers.adocs
1617
// * installing/installing_azure/installing-azure-customizations.adoc
1718
// * installing/installing_azure/installing-azure-default.adoc
1819
// * installing/installing_azure/installing-azure-government-region.adoc

modules/cli-logging-in-kubeadmin.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// * installing/installing_aws/installing-aws-private.adoc
1313
// * installing/installing_aws/installing-aws-vpc.adoc
1414
// * installing/installing_aws/installing-restricted-networks-aws-installer-provisioned.adoc
15+
// * installing/installing_aws/installing-aws-outposts-remote-workers.adoc
1516
// * installing/installing_azure/installing-azure-customizations.adoc
1617
// * installing/installing_azure/installing-azure-default.adoc
1718
// * installing/installing_azure/installing-azure-government-region.adoc

modules/cluster-entitlements.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
// * installing/installing_aws/installing-aws-government-region.adoc
4646
// * installing/installing_aws/installing-aws-secret-region.adoc
4747
// * installing/installing_aws/installing-aws-china-region.adoc
48+
// * installing/installing_aws/installing-aws-outposts-remote-workers.adoc
4849
// * installing/installing_openstack/installing-openstack-installer-kuryr.adoc
4950
// * installing/installing_openstack/installing-openstack-installer-restricted.adoc
5051
// * installing/installing_openstack/installing-openstack-user.adoc

modules/cluster-telemetry.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
// * installing/installing_aws/installing-aws-vpc.adoc
4141
// * installing/installing_aws/installing-aws-government-region.adoc
4242
// * installing/installing_aws/installing-aws-china.adoc
43+
// * installing/installing_aws/installing-aws-outposts-remote-workers.adoc
4344
// * installing/installing_openstack/installing-openstack-installer-kuryr.adoc
4445
// * installing/installing_openstack/installing-openstack-installer-restricted.adoc
4546
// * installing/installing_openstack/installing-openstack-user.adoc

modules/installation-aws-config-yaml.adoc

Lines changed: 63 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Module included in the following assemblies:
1+
/ Module included in the following assemblies:
22
//
33
// * installing/installing_aws/installing-aws-customizations.adoc
44
// * installing/installing_aws/installing-aws-government-region.adoc
@@ -7,6 +7,7 @@
77
// * installing/installing_aws/installing-aws-private.adoc
88
// * installing/installing_aws/installing-aws-vpc.adoc
99
// * installing/installing_aws/installing-restricted-networks-aws-installer-provisioned.adoc
10+
// * installing/installing_aws/installing-aws-outposts-remote-workers.adoc
1011

1112
ifeval::["{context}" == "installing-aws-network-customizations"]
1213
:with-networking:
@@ -39,6 +40,9 @@ endif::[]
3940
ifeval::["{context}" == "installing-restricted-networks-aws-installer-provisioned"]
4041
:restricted:
4142
endif::[]
43+
ifeval::["{context}" == "installing-aws-outposts-remote-workers"]
44+
:aws-outposts:
45+
endif::[]
4246

4347
:_content-type: REFERENCE
4448
[id="installation-aws-config-yaml_{context}"]
@@ -69,6 +73,7 @@ credentialsMode: Mint <2>
6973
controlPlane: <3> <4>
7074
hyperthreading: Enabled <5>
7175
name: master
76+
ifndef::aws-outposts[]
7277
platform:
7378
aws:
7479
ifndef::openshift-origin[]
@@ -98,12 +103,17 @@ endif::gov,china,secret[]
98103
metadataService:
99104
authentication: Optional <7>
100105
type: m6i.xlarge
106+
endif::aws-outposts[]
107+
ifdef::aws-outposts[]
108+
platform: {}
109+
endif::aws-outposts[]
101110
replicas: 3
102111
compute: <3>
103112
- hyperthreading: Enabled <5>
104113
name: worker
105114
platform:
106115
aws:
116+
ifndef::aws-outposts[]
107117
rootVolume:
108118
iops: 2000
109119
size: 500
@@ -125,6 +135,15 @@ endif::secret[]
125135
ifndef::gov,china,secret[]
126136
- us-west-2c
127137
endif::gov,china,secret[]
138+
endif::aws-outposts[]
139+
ifdef::aws-outposts[]
140+
type: m5.large <6>
141+
zones:
142+
- us-east-1a <7>
143+
rootVolume:
144+
type: gp2 <8>
145+
size: 120
146+
endif::aws-outposts[]
128147
replicas: 3
129148
metadata:
130149
name: test-cluster <1>
@@ -139,7 +158,12 @@ endif::[]
139158
hostPrefix: 23
140159
machineNetwork:
141160
- cidr: 10.0.0.0/16
161+
ifndef::aws-outposts[]
142162
networkType: OVNKubernetes <8>
163+
endif::aws-outposts[]
164+
ifdef::aws-outposts[]
165+
networkType: OVNKubernetes <9>
166+
endif::aws-outposts[]
143167
serviceNetwork:
144168
- 172.30.0.0/16
145169
platform:
@@ -168,6 +192,14 @@ ifdef::vpc,restricted[]
168192
- subnet-1
169193
- subnet-2
170194
- subnet-3
195+
endif::vpc,restricted[]
196+
ifdef::aws-outposts[]
197+
subnets: <10>
198+
- subnet-1
199+
- subnet-2
200+
- subnet-3
201+
endif::aws-outposts[]
202+
ifdef::vpc,restricted[]
171203
ifndef::secret,china[]
172204
amiID: ami-96c6f8f7 <10>
173205
endif::secret,china[]
@@ -184,12 +216,12 @@ ifdef::china[]
184216
endif::china[]
185217
hostedZone: Z3URY6TWQ91KVV <12>
186218
endif::vpc,restricted[]
187-
ifndef::vpc,restricted[]
219+
ifndef::vpc,restricted,aws-outposts[]
188220
amiID: ami-96c6f8f7 <9>
189221
serviceEndpoints: <10>
190222
- name: ec2
191223
url: https://vpce-id.ec2.us-west-2.vpce.amazonaws.com
192-
endif::vpc,restricted[]
224+
endif::vpc,restricted,aws-outposts[]
193225
ifdef::vpc,restricted[]
194226
ifndef::openshift-origin[]
195227
fips: false <13>
@@ -200,13 +232,13 @@ sshKey: ssh-ed25519 AAAA... <13>
200232
endif::openshift-origin[]
201233
endif::vpc,restricted[]
202234
ifndef::vpc,restricted[]
203-
ifndef::openshift-origin[]
235+
ifndef::openshift-origin,aws-outposts[]
204236
fips: false <11>
205237
sshKey: ssh-ed25519 AAAA... <12>
206-
endif::openshift-origin[]
207-
ifdef::openshift-origin[]
238+
endif::openshift-origin,aws-outposts[]
239+
ifdef::openshift-origin,aws-outposts[]
208240
sshKey: ssh-ed25519 AAAA... <11>
209-
endif::openshift-origin[]
241+
endif::openshift-origin,aws-outposts[]
210242
endif::vpc,restricted[]
211243
ifdef::private[]
212244
ifndef::openshift-origin[]
@@ -301,16 +333,24 @@ accounts for the dramatically decreased machine performance. Use larger
301333
instance types, such as `m4.2xlarge` or `m5.2xlarge`, for your machines if you
302334
disable simultaneous multithreading.
303335
====
304-
<6> To configure faster storage for etcd, especially for larger clusters, set the
305-
storage type as `io1` and set `iops` to `2000`.
336+
ifndef::aws-outposts[]
337+
<6> To configure faster storage for etcd, especially for larger clusters, set the storage type as `io1` and set `iops` to `2000`.
306338
<7> Whether to require the link:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html[Amazon EC2 Instance Metadata Service v2] (IMDSv2). To require IMDSv2, set the parameter value to `Required`. To allow the use of both IMDSv1 and IMDSv2, set the parameter value to `Optional`. If no value is specified, both IMDSv1 and IMDSv2 are allowed.
307339
+
308340
[NOTE]
309341
====
310342
The IMDS configuration for control plane machines that is set during cluster installation can only be changed by using the AWS CLI. The IMDS configuration for compute machines can be changed by using compute machine sets.
311343
====
312-
ifdef::vpc,restricted[]
313344
<8> The cluster network plugin to install. The supported values are `OVNKubernetes` and `OpenShiftSDN`. The default value is `OVNKubernetes`.
345+
endif::aws-outposts[]
346+
ifdef::aws-outposts[]
347+
<6> For compute instances running in an AWS Outpost instance, specify a supported instance type in the AWS Outpost instance.
348+
<7> For compute instances running in AWS Outpost instance, specify the Availability Zone where the Outpost instance is located.
349+
<8> For compute instances running in AWS Outpost instance, specify volume type gp2, to avoid using gp3 volume type which is not supported.
350+
<9> The cluster network plugin to install. The supported values are `OVNKubernetes` and `OpenShiftSDN`. The default value is `OVNKubernetes`.
351+
<10> If you provide your own VPC, specify subnets for each availability zone that your cluster uses.
352+
endif::aws-outposts[]
353+
ifdef::vpc,restricted[]
314354
<9> If you provide your own VPC, specify subnets for each availability zone that your cluster uses.
315355
<10> The ID of the AMI used to boot machines for the cluster. If set, the AMI
316356
must belong to the same region as the cluster.
@@ -325,36 +365,32 @@ ifndef::openshift-origin[]
325365
====
326366
The use of FIPS Validated / Modules in Process cryptographic libraries is only supported on {product-title} deployments on the `x86_64` architecture.
327367
====
328-
<14> You can optionally provide the `sshKey` value that you use to access the
329-
machines in your cluster.
368+
<14> You can optionally provide the `sshKey` value that you use to access the machines in your cluster.
330369
endif::openshift-origin[]
331370
ifdef::openshift-origin[]
332-
<13> You can optionally provide the `sshKey` value that you use to access the
333-
machines in your cluster.
371+
<13> You can optionally provide the `sshKey` value that you use to access the machines in your cluster.
334372
endif::openshift-origin[]
335373
endif::vpc,restricted[]
336-
ifndef::vpc,restricted[]
337-
<8> The cluster network plugin to install. The supported values are `OVNKubernetes` and `OpenShiftSDN`. The default value is `OVNKubernetes`.
338-
<9> The ID of the AMI used to boot machines for the cluster. If set, the AMI
339-
must belong to the same region as the cluster.
340-
<10> The AWS service endpoints. Custom endpoints are required when installing to
341-
an unknown AWS region. The endpoint URL must use the `https` protocol and the
342-
host must trust the certificate.
374+
ifndef::vpc,restricted,aws-outposts[]
375+
<9> The ID of the AMI used to boot machines for the cluster. If set, the AMI must belong to the same region as the cluster.
376+
<10> The AWS service endpoints. Custom endpoints are required when installing to an unknown AWS region. The endpoint URL must use the `https` protocol and the host must trust the certificate.
343377
ifndef::openshift-origin[]
344378
<11> Whether to enable or disable FIPS mode. By default, FIPS mode is not enabled. If FIPS mode is enabled, the {op-system-first} machines that {product-title} runs on bypass the default Kubernetes cryptography suite and use the cryptography modules that are provided with {op-system} instead.
345379
+
346380
[IMPORTANT]
347381
====
348382
The use of FIPS Validated / Modules in Process cryptographic libraries is only supported on {product-title} deployments on the `x86_64` architecture.
349383
====
350-
<12> You can optionally provide the `sshKey` value that you use to access the
351-
machines in your cluster.
384+
<12> You can optionally provide the `sshKey` value that you use to access the machines in your cluster.
352385
endif::openshift-origin[]
353386
ifdef::openshift-origin[]
354387
<11> You can optionally provide the `sshKey` value that you use to access the
355388
machines in your cluster.
356389
endif::openshift-origin[]
357-
endif::vpc,restricted[]
390+
endif::vpc,restricted,aws-outposts[]
391+
ifdef::aws-outposts[]
392+
<11> You can optionally provide the `sshKey` value that you use to access the machines in your cluster.
393+
endif::aws-outposts[]
358394
+
359395
[NOTE]
360396
====
@@ -426,3 +462,6 @@ endif::[]
426462
ifeval::["{context}" == "installing-restricted-networks-aws-installer-provisioned"]
427463
:!restricted:
428464
endif::[]
465+
ifeval::["{context}" == "installing-aws-outposts-remote-workers"]
466+
:!aws-outposts:
467+
endif::[]

0 commit comments

Comments
 (0)