IBM Cloud Docs
Red Hat OpenShift 4.7 사용자 제공자 인프라 설치

Red Hat OpenShift 4.7 사용자 제공자 인프라 설치

2025년 7월 17일부터 VMware® 용 Red Hat® OpenShift® 의 신규 자동 설치는 VMware Cloud Foundation for Classic - Automated 인스턴스의 신규 또는 기존 배포에 더 이상 사용할 수 없습니다. 2026년 7월 16일까지 기존 Red Hat OpenShift 자동 설치( VMware )를 계속 사용하거나 삭제할 수 있습니다. 이 서비스는 2026년 7월 17일부터 더 이상 제공되지 않습니다.

Red Hat® OpenShift® 4에서는 다음 개념을 소개했습니다:

  • IPI(Installer Provisioned Infrastructure) - 지원되는 플랫폼을 사용하기 위해 현재 AWS만 사용합니다. 설치 프로그램은 클러스터의 기본 인프라를 프로비저닝하고 클러스터를 구성합니다.
  • UPI(User Provisioned Infrastructure ) - 베어메탈, vSphere 및 IPI를 지원하지 않는 기타 클라우드에서 사용합니다. 사용자는 Red Hat OpenShift 클러스터가 호스팅되는 컴퓨팅, 네트워크, 스토리지 등의 인프라를 프로비저닝해야 합니다. 설치 프로그램은 클러스터만 구성합니다.

이 지침은 UPI 모드에서 Red Hat OpenShift 설치 관리자를 사용합니다. Terraform은 부트스트랩, 제어 플레인 및 컴퓨팅 노드에 대해 7개의 VM을 프로비저닝하는 데 사용됩니다. 다음 프로세스가 완료됩니다.

  1. Red Hat OpenShift 설치 관리자에 의해 처리되는 yaml 파일이 생성됩니다.
  2. 설치 프로그램이 실행되고 Ignition 파일을 포함한 다수의 파일이 작성됩니다. Ignition 파일은 처음 시작 시 부트스트랩, 제어 플레인 및 컴퓨팅 노드를 구성하는 데 사용됩니다.
  3. 처음 시작 시 부트스트랩 노드가 페치할 수 있도록 부트스트랩 노드를 위한 Ignition 파일이 bastion 노드의 NGINX 기본 디렉토리에 복사됩니다.
  4. Ignition Terraform 파일은 DNS 서버에서 업데이트됩니다.
  5. Terraform 설치에 대한 변수를 보유하기 위해 terraform.tfvars 파일이 작성됩니다.
  6. VM을 프로비저닝하는 Terraform이 설치됩니다. VM이 시작되고 구성되며 Red Hat OpenShift 클러스터가 생성됩니다.

Red Hat OpenShift 사용자 공급자 인프라 설치에 대한 자세한 내용은 사용자 프로비저닝된 인프라를 사용하여 vSphere에 클러스터 설치하기을 참조하세요.

Red Hat OpenShift 설치 관리자 yaml 파일 만들기

다음 표를 사용하여 배치에 필요한 매개변수를 문서화하십시오. 이 문서에 설명된 배치와 일치하는 예제가 표시됩니다.

  • cat /root/.ssh/id_rsa.pub명령을 사용하여 SSH 키를 표시한 후 복사할 수 있습니다.
  • Red Hat®에서 수집한 풀 시크릿입니다. 자세한 내용은 Red Hat OpenShift 인프라 공급자를 참조하세요(Red Hat 계정으로 로그인해야 함).
install-config.yaml 파일 매개 변수
매개변수 사용자의 배치
Base domain dallas.ibm.local
Metadata name ocp
vCenter Server IP address 10.208.17.2
사용자 이름 administrator@vsphere.local
비밀번호 s3cretPassw0rd
vCenter Server instance data center datacenter1
vCenter Server instance data store vsanDatastore
Pull Secret
Public SSH Key

그림에 표시된 다음 install-config.yaml 파일을 사용하여 이전 테이블에서 배치 세부사항을 사용하여 이 파일을 업데이트하십시오.

  1. 기본 도메인 이름을 업데이트하십시오.
  2. 메타데이터 이름을 Red Hat OpenShift 클러스터 이름으로 업데이트합니다.
  3. 다음 vCenter 서버 정보를 입력합니다:
    • vCenter IP 주소
    • vCenter 사용자 이름 및 비밀번호
    • 데이터 센터 이름
    • 데이터 저장소 이름
  4. 풀 시크릿을 붙여넣으십시오.
  5. SSH 키를 붙여넣으십시오.
  6. 다음 그림은 install-config.yaml 파일을 보여줍니다. 파일을 클립보드에 복사하십시오.
apiVersion: v1
baseDomain: acmeskb.net
compute:
- hyperthreading: Enabled
  name: worker
  replicas: 0
controlPlane:
  hyperthreading: Enabled
  name: master
  replicas: 3
metadata:
  name: ocp
platform:
  vsphere:
    vcenter: 10.208.17.2
    username: administrator@vsphere.local
    password: 's3cretPassw0rd'
    datacenter: datacenter1
    defaultDatastore: vsanDatastore
pullSecret: 'COPY PULL SECRET HERE'
sshKey: 'COPY PUBLIC SSH KEY HERE'

bastion 노드에 대한 SSH 세션에서 루트 권한으로 다음 명령을 사용하여 install-config.yaml 파일을 작성하십시오.

cd /opt/ocpinstall
vi install-config.yaml

i를 입력하여 삽입 모드로 전환하고 파일 컨텐츠를 붙여넣으십시오. Esc를 누른 후 :wq를 입력하여 파일을 저장하고 vi 편집기를 종료하십시오.

Red Hat OpenShift 설치 관리자는 이 파일을 삭제하므로 복사본을 보관하려면 다음 명령을 사용합니다:

cp install-config.yaml install-config.bak

Red Hat OpenShift 점화 명령 실행하기

이제 install-config.yaml 사이트가 생성되고 채워졌으므로 Red Hat OpenShift 설치 관리자를 실행하여 점화 파일을 생성합니다.

cd /opt/ocpinstall/
openshift-install create ignition-configs --dir=/opt/ocpinstall/

이그니션 파일은 24시간 동안 유효하며 이 시간 내에 Red Hat OpenShift 배포를 완료해야 합니다. 그렇지 않으면, Ignition 파일을 재생성해야 합니다. 자세한 내용은 문제 해결 Red Hat OpenShift 문제 해결 를 참조하세요.

다음 파일은 Red Hat OpenShift 설치 관리자에서 생성합니다:

.
├── auth
│   ├── kubeadmin-password
│   └── kubeconfig
├── bootstrap.ign
├── master.ign
├── metadata.json
└── worker.ign

부트스트랩 Ignition 파일을 웹 서버에 복사

bootstrap.ign 파일은 NGINX의 문서 루트에 복사되어야 합니다. 부트스트랩 ignition 파일은 부트스트랩 노드가 처음 시작 시 도달할 수 있도록 웹 서버에서 호스팅되어야 합니다. Ignition 파일이 너무 커서 vApp 특성에 적합하지 않습니다.

bootstrap.ign 파일을 NGINX의 문서 루트에 복사하십시오.

cp bootstrap.ign /usr/share/nginx/html

Terraform 파일

다음 Terraform 파일을 업데이트해야 합니다.

  • ignition.tf - 이 파일은 DNS 항목이 배치와 일치하도록 업데이트되어야 합니다.
  • terraform.tfvars - 이 파일은 작성되어야 하며 main.tf 파일에서 사용되는 변수를 보유합니다.
  • main.tf - 이 파일은 DNS 섹션을 제거하도록 업데이트되어야 합니다.

ignition.tf - 템플리트에서 DNS 항목 업데이트

DNS IP 세부사항은 Terraform 템플리트 내에서 하드코딩됩니다. vCenter Server 인스턴스 AD DNS 서버가 되도록 이 IP를 변경해야 합니다.

ignition.tf 파일 매개변수
매개변수 사용자의 배치
DNS1 10.187.214.66
  1. 루트 권한이 있는 기본 노드에 대한 SSH 세션에서 다음 명령을 사용하여 파일을 여십시오. vi /opt/ocpinstall/installer/upi/vsphere/machine/ignition.tf
  2. i를 입력하여 삽입 모드로 전환하고 DNS1 항목까지 아래로 스크롤하십시오.
  3. 8.8.8.8에서 IP 주소를 업데이트하여 배치를 일치시키십시오.
  4. Esc를 누른 후 :wq를 입력하여 파일을 저장하고 vi 편집기를 종료하십시오.

파일은 다음 예와 유사합니다.

locals {
  mask = "${element(split("/", var.machine_cidr), 1)}"
  gw   = "${cidrhost(var.machine_cidr,1)}"

  ignition_encoded = "data:text/plain;charset=utf-8;base64,${base64encode(var.ignition)}"
}

data "ignition_file" "hostname" {
  count = "${var.instance_count}"

  filesystem = "root"
  path       = "/etc/hostname"
  mode       = "420"

  content {
    content = "${var.name}-${count.index}"
  }
}

data "ignition_file" "static_ip" {
  count = "${var.instance_count}"

  filesystem = "root"
  path       = "/etc/sysconfig/network-scripts/ifcfg-ens192"
  mode       = "420"

  content {
    content = <<EOF
TYPE=Ethernet
BOOTPROTO=none
NAME=ens192
DEVICE=ens192
ONBOOT=yes
IPADDR=${local.ip_addresses[count.index]}
PREFIX=${local.mask}
GATEWAY=${local.gw}
DOMAIN=${var.cluster_domain}
DNS1=10.187.214.66
EOF
  }
}

data "ignition_systemd_unit" "restart" {
  count = "${var.instance_count}"

  name = "restart.service"

  content = <<EOF
[Unit]
ConditionFirstBoot=yes
[Service]
Type=idle
ExecStart=/sbin/reboot
[Install]
WantedBy=multi-user.target
EOF
}

data "ignition_config" "ign" {
  count = "${var.instance_count}"

  append {
    source = "${var.ignition_url != "" ? var.ignition_url : local.ignition_encoded}"
  }

  systemd = [
    "${data.ignition_systemd_unit.restart.*.id[count.index]}",
  ]

  files = [
    "${data.ignition_file.hostname.*.id[count.index]}",
    "${data.ignition_file.static_ip.*.id[count.index]}",
  ]
}

terraform.tfvars - Terraform 입력 변수 편집

Terraform에서 main.tf 파일은 terraform.tfvars로부터 입력 변수를 사용합니다. 해당 파일에서 설명되지 않은 변수의 경우에는 variable.tf 파일로부터 기본값을 사용합니다.

다음 표를 사용하여 배치에 필요한 매개변수를 문서화하십시오. 여기에는 이 문서에서 설명한 배치와 일치하는 예가 표시됩니다.

다음 명령을 사용하여 ignition 파일을 표시한 후 복사할 수 있습니다.

cat /opt/ocpinstall/master.ign

cat /opt/ocpinstall/worker.ign

ignition.tf 파일 매개변수
매개변수 사용자의 배치
bootstrap_ip 192.168.133.9
control_plane_ips 192.168.133.10
192.168.133.11
192.168.133.12
compute_ips 192.168.133.13
192.168.133.14
192.168.133.15
machine_cidr 192.168.133.0/24
cluster_id ocp
cluster_domain ocp.dallas.ibm.local
base_domain dallas.ibm.local
vsphere_server 10.208.17.2
vsphere_user administrator@vsphere.local
vsphere_password s3cretPassw0rd
vsphere_cluster cluster1
vsphere_datacenter datacenter1
vsphere_datastore vsanDatastore
vm_template rhcos-latest
vm_network vxw-dvs-22-virtualwire-24-sid-6011-OpenShift-LS
bootstrap_ignition_url http://192.168.133.08/bootstrap.ign
control_plane_ignition
compute_ignition

다음 terraform-tvars 예제 파일을 사용한 후 이전 테이블 에서 배치 세부사항을 사용하여 파일을 업데이트하십시오. 파일을 클립보드에 복사하십시오.

bootstrap_ip = "192.168.133.9"
control_plane_ips = ["192.168.133.10","192.168.133.11","192.168.133.12"]
compute_ips = ["192.168.133.13","192.168.133.14","192.168.133.15"]
machine_cidr = "192.168.133.0/24"
cluster_id = "ocp"
cluster_domain = "ocp.dallas.ibm.local"
base_domain = "dallas.ibm.local"
vsphere_server = "10.208.17.2"
vsphere_user = "administrator@vsphere.local"
vsphere_password = "s3cretPassw0rd"
vsphere_cluster = "cluster1"
vsphere_datacenter = "datacenter1"
vsphere_datastore = "vsanDatastore"
vm_template = "rhcos-latest"
vm_network = "vxw-dvs-22-virtualwire-24-sid-6011-OpenShift-LS"

bootstrap_ignition_url = "http://192.168.133.51/bootstrap.ign"

control_plane_ignition = <<END_OF_MASTER_IGNITION
COPY IN CONTENTS OF MASTER.IGN HERE
END_OF_MASTER_IGNITION

compute_ignition = <<END_OF_WORKER_IGNITION
COPY IN CONTENTS OF WORKER.IGN HERE
END_OF_WORKER_IGNITION

terraform.tfvars 파일이 생성됩니다.

  1. 배스천 노드에 대한 SSH 세션에서 루트 권한으로 다음 명령을 사용하여 파일을 여십시오: vi /opt/ocpinstall/installer/upi/vsphere/terraform.tfvars
  2. i를 입력하여 삽입 모드로 전환하고 파일 컨텐츠를 붙여넣으십시오.
  3. Esc를 누른 후 :wq를 입력하여 파일을 저장하고 vi 편집기를 종료하십시오.

main.tf - DNS 섹션 제거

파일에서 DNS용으로 AWS 라우트 53을 사용할 것으로 예상됨에 따라 DNS 모듈을 제거하십시오. main.tf 파일이 업데이트됩니다.

  1. 루트 권한이 있는 기본 노드에 대한 SSH 세션에서 다음 명령을 사용하여 파일을 여십시오. vi /opt/ocpinstall/installer/upi/vsphere/main.tf
  2. i를 입력하여 삽입 모드로 전환하십시오.
  3. DNS 모듈 섹션에 도달할 때까지 파일을 아래로 스크롤하십시오.
  4. 파일 3: 제거할 섹션에 표시된 전체 섹션을 삭제합니다.
  5. Esc를 누른 후 :wq를 입력하여 파일을 저장하고 vi 편집기를 종료하십시오.
module "dns" {
  source = "./route53"

  base_domain         = "${var.base_domain}"
  cluster_domain      = "${var.cluster_domain}"
  bootstrap_count     = "${var.bootstrap_complete ? 0 : 1}"
  bootstrap_ips       = ["${module.bootstrap.ip_addresses}"]
  control_plane_count = "${var.control_plane_count}"
  control_plane_ips   = ["${module.control_plane.ip_addresses}"]
  compute_count       = "${var.compute_count}"
  compute_ips         = ["${module.compute.ip_addresses}"]
}

Terraform 실행

Terraform은 부트스트랩, 제어 플레인 및 컴퓨팅 노드에 대한 VM을 배치하는 데 사용됩니다. Terraform은 다음과 같은 방식으로 작동합니다.

  • terraform init - Terraform 플러그인 및 모듈을 초기화합니다.
  • terraform plan - 템플리트에서 시험 실행을 완료하여 vCenter에 연결될 수 있는지 확인합니다.
  • terraform apply - 템플리트를 실행합니다. 각 배치의 확인이 필요하지 않도록 자동 승인 스위치가 추가될 수 있습니다.

Terraform이 VM을 프로비저닝하면 Red Hat OpenShift 클러스터가 자체적으로 부트스트랩됩니다.

  1. 부트스트랩 노드가 시작되고 제어 플레인이 시작하는 데 필요한 원격 리소스를 호스팅하기 시작합니다.
  2. 제어 플레인 노드가 부트스트랩 노드에서 원격 리소스를 페치하고 시작을 완료합니다.
  3. 제어 플레인 노드가 부트스트랩 노드를 사용하여 etcd 클러스터를 형성합니다.
  4. 부트스트랩 노드는 새 etcd 클러스터를 사용하여 임시 Kubernetes 제어 플레인을 시작합니다.
  5. 임시 제어 플레인이 제어 플레인 노드에 프로덕션 제어 플레인을 스케줄합니다.
  6. 임시 제어 플레인은 종료되고 제어를 프로덕션 제어 플레인에 전달합니다.
  7. 부트스트랩 노드는 Red Hat OpenShift 컨테이너 플랫폼 구성 요소를 프로덕션 제어 영역에 주입합니다.
  8. 제어 플레인은 컴퓨팅 노드를 설정합니다.
  9. 제어 플레인은 연산자의 양식으로 된 더 많은 서비스를 설치합니다.
  10. 이 부트스트랩 프로세스의 결과는 완전히 실행되는 Red Hat OpenShift 클러스터입니다. 그런 다음 클러스터는 일일 오퍼레이션에 필요한 나머지 컴포넌트를 다운로드여 구성합니다.

bastion 노드에 대한 SSH 세션에서 루트 권한으로 다음 명령을 실행하여 각 명령이 다음 명령을 입력하기 전에 오류 없이 완료되는지 확인하십시오.

cd /opt/ocpinstall/installer/upi/vsphere/
terraform init
terraform plan
terraform apply -auto-approve

사후 배치

  1. 가상 머신이 시작된 후 다음 명령을 실행하여 설치를 모니터하십시오.

    cd /opt/ocpinstall
    openshift-install --dir=. wait-for bootstrap-complete --log-level debug
    
  2. 다음 정보가 표시될 때까지 기다리십시오.

    INFO It is now safe to remove the bootstrap resources
    
  3. 클러스터 이미지 레지스트리는 UPI 모드에서 스토리지 백엔드를 선택하지 않습니다. 따라서 클러스터 운영자는 관리자가 스토리지 백엔드를 구성할 때까지 계속해서 기다립니다. 임시 해결책은 다음 명령을 실행하여 설치를 완료할 수 있도록 image-registry를 비어 있는 디렉토리로 지정하는 것입니다.

    mkdir /root/.kube/
    cp /opt/ocpinstall/auth/kubeconfig ~/.kube/config
    oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"storage":{"emptyDir":{}}}}'
    

    설치가 완료되면 image-registry를 적합한 위치로 변경하십시오.

  4. 다음 명령을 실행하여 설치를 모니터하십시오.

    openshift-install --dir=. wait-for install-complete
    
  5. 다음 메시지가 표시될 때까지 기다리십시오. 설치가 완료되면 Red Hat OpenShift 콘솔에 로그인할 수 있는 URL 및 자격 증명이 제공됩니다. 사용자의 URL과 비밀번호는 다릅니다.

    INFO Install complete!
    INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/root/go/src/github.com/openshift/installer/bin/auth/kubeconfig'
    INFO Access the OpenShift web-console here: https://console-openshift-console.opc.dallas.ibm.local
    INFO Login to the console with user: kubeadmin, password: my-kube-password
    

    설치 중에 작성된 사용자의 비밀번호는 설치 디렉토리의 auth 서브디렉토리에서도 찾을 수 있습니다. 로그인을 통해 로그인하여 웹 콘솔에 액세스할 수 있습니다. 콘솔의 URL은 https://console-openshift-console.<cluster>.<base_domain>입니다.

  6. /opt/ocpinstall 디렉토리에서 다음 명령을 실행하십시오.

    watch -n5 oc get clusteroperators
    
  7. 클러스터 완료를 모니터하십시오. 다음 예제에서는 출력이 제공됩니다. 4.x.5 을 현재 Red Hat OpenShift 버전(예: 4.7.5 )으로 바꿉니다.

    Every 5.0s: oc get clusteroperators
    
    NAME                                 VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE
    authentication                       4.x.5    True        False         False      20m
    cloud-credential                     4.x.5    True        False         False      38m
    cluster-autoscaler                   4.x.5    True        False         False      38m
    console                              4.x.5    True        False         False      27m
    dns                                  4.x.5    True        False         False      35m
    image-registry                       4.x.5    True        False         False      14m
    ingress                              4.x.5    True        False         False      30m
    kube-apiserver                       4.x.5    True        False         False      33m
    kube-controller-manager              4.x.5    True        False         False      33m
    kube-scheduler                       4.x.5    True        False         False      32m
    machine-api                          4.x.5    True        False         False      38m
    machine-config                       4.x.5    True        False         False      33m
    marketplace                          4.x.5    True        False         False      30m
    monitoring                           4.x.5    True        False         False      28m
    network                              4.x.5    True        False         False      37m
    node-tuning                          4.x.5    True        False         False      32m
    openshift-apiserver                  4.x.5    True        False         False      31m
    openshift-controller-manager         4.x.5    True        False         False      33m
    openshift-samples                    4.x.5    True        False         False      24m
    operator-lifecycle-manager           4.x.5    True        False         False      35m
    operator-lifecycle-manager-catalog   4.x.5    True        False         False      35m
    service-ca                           4.x.5    True        False         False      38m
    service-catalog-apiserver            4.x.5    True        False         False      32m
    service-catalog-controller-manager   4.x.5    True        False         False      32m
    storage                              4.x.5    True        False         False      30m