클러스터 구성 파일을 생성하려면 이전 배포에 대한 기존 구성 파일을 vSphere에 복사하여 업데이트할 수 있습니다. 또는 빈 템플릿을 사용하여 파일을 처음부터 생성할 수 있습니다.
아래 템플릿에는 vSphere에서 관리 클러스터를 배포하는 것과 관련된 모든 옵션이 포함되어 있습니다. 이 템플릿을 복사하여 관리 클러스터를 vSphere에 배포하도록 사용할 수 있습니다.
필수 옵션의 주석 처리를 제거했습니다. 선택 사항 설정을 주석 처리했습니다. 기본값은 해당되는 경우 포함됩니다.
#! ---------------------------------------------------------------------
#! Basic cluster creation configuration
#! ---------------------------------------------------------------------
CLUSTER_NAME:
CLUSTER_PLAN: dev
INFRASTRUCTURE_PROVIDER: vsphere
# CLUSTER_API_SERVER_PORT: # For deployments without NSX Advanced Load Balancer
ENABLE_CEIP_PARTICIPATION: true
ENABLE_AUDIT_LOGGING: true
CLUSTER_CIDR: 100.96.0.0/11
SERVICE_CIDR: 100.64.0.0/13
# CAPBK_BOOTSTRAP_TOKEN_TTL: 30m
#! ---------------------------------------------------------------------
#! vSphere configuration
#! ---------------------------------------------------------------------
VSPHERE_SERVER:
VSPHERE_USERNAME:
VSPHERE_PASSWORD:
VSPHERE_DATACENTER:
VSPHERE_RESOURCE_POOL:
VSPHERE_DATASTORE:
VSPHERE_FOLDER:
VSPHERE_NETWORK: VM Network
# VSPHERE_CONTROL_PLANE_ENDPOINT: # Required for Kube-Vip
# VSPHERE_CONTROL_PLANE_ENDPOINT_PORT: 6443
VIP_NETWORK_INTERFACE: "eth0"
# VSPHERE_TEMPLATE:
VSPHERE_SSH_AUTHORIZED_KEY:
# VSPHERE_STORAGE_POLICY_ID: ""
VSPHERE_TLS_THUMBPRINT:
VSPHERE_INSECURE: false
DEPLOY_TKG_ON_VSPHERE7: false
ENABLE_TKGS_ON_VSPHERE7: false
#! ---------------------------------------------------------------------
#! Node configuration
#! ---------------------------------------------------------------------
# SIZE:
# CONTROLPLANE_SIZE:
# WORKER_SIZE:
# OS_NAME: ""
# OS_VERSION: ""
# OS_ARCH: ""
# VSPHERE_NUM_CPUS: 2
# VSPHERE_DISK_GIB: 40
# VSPHERE_MEM_MIB: 4096
# VSPHERE_CONTROL_PLANE_NUM_CPUS: 2
# VSPHERE_CONTROL_PLANE_DISK_GIB: 40
# VSPHERE_CONTROL_PLANE_MEM_MIB: 8192
# VSPHERE_WORKER_NUM_CPUS: 2
# VSPHERE_WORKER_DISK_GIB: 40
# VSPHERE_WORKER_MEM_MIB: 4096
#! ---------------------------------------------------------------------
#! VMware NSX specific configuration for enabling NSX routable pods
#! ---------------------------------------------------------------------
# NSXT_POD_ROUTING_ENABLED: false
# NSXT_ROUTER_PATH: ""
# NSXT_USERNAME: ""
# NSXT_PASSWORD: ""
# NSXT_MANAGER_HOST: ""
# NSXT_ALLOW_UNVERIFIED_SSL: false
# NSXT_REMOTE_AUTH: false
# NSXT_VMC_ACCESS_TOKEN: ""
# NSXT_VMC_AUTH_HOST: ""
# NSXT_CLIENT_CERT_KEY_DATA: ""
# NSXT_CLIENT_CERT_DATA: ""
# NSXT_ROOT_CA_DATA: ""
# NSXT_SECRET_NAME: "cloud-provider-vsphere-nsxt-credentials"
# NSXT_SECRET_NAMESPACE: "kube-system"
#! ---------------------------------------------------------------------
#! NSX Advanced Load Balancer configuration
#! ---------------------------------------------------------------------
AVI_ENABLE: false
AVI_CONTROL_PLANE_HA_PROVIDER: false
# AVI_NAMESPACE: "tkg-system-networking"
# AVI_DISABLE_INGRESS_CLASS: true
# AVI_AKO_IMAGE_PULL_POLICY: IfNotPresent
# AVI_ADMIN_CREDENTIAL_NAME: avi-controller-credentials
# AVI_CA_NAME: avi-controller-ca
# AVI_CONTROLLER:
# AVI_USERNAME: ""
# AVI_PASSWORD: ""
# AVI_CLOUD_NAME:
# AVI_SERVICE_ENGINE_GROUP:
# AVI_NSXT_T1LR: # Required for NSX ALB deployments on NSX Cloud.
# AVI_MANAGEMENT_CLUSTER_SERVICE_ENGINE_GROUP:
# AVI_DATA_NETWORK:
# AVI_DATA_NETWORK_CIDR:
# AVI_MANAGEMENT_CLUSTER_VIP_NETWORK_NAME:
# AVI_MANAGEMENT_CLUSTER_VIP_NETWORK_CIDR:
# AVI_CA_DATA_B64: ""
# AVI_LABELS: ""
# AVI_DISABLE_STATIC_ROUTE_SYNC: true
# AVI_INGRESS_DEFAULT_INGRESS_CONTROLLER: false
# AVI_INGRESS_SHARD_VS_SIZE: ""
# AVI_INGRESS_SERVICE_TYPE: ""
# AVI_INGRESS_NODE_NETWORK_LIST: ""
#! ---------------------------------------------------------------------
#! Image repository configuration
#! ---------------------------------------------------------------------
# TKG_CUSTOM_IMAGE_REPOSITORY: ""
# TKG_CUSTOM_IMAGE_REPOSITORY_CA_CERTIFICATE: ""
#! ---------------------------------------------------------------------
#! Proxy configuration
#! ---------------------------------------------------------------------
# TKG_HTTP_PROXY: ""
# TKG_HTTPS_PROXY: ""
# TKG_NO_PROXY: ""
#! ---------------------------------------------------------------------
#! Machine Health Check configuration
#! ---------------------------------------------------------------------
ENABLE_MHC:
ENABLE_MHC_CONTROL_PLANE: true
ENABLE_MHC_WORKER_NODE: true
MHC_UNKNOWN_STATUS_TIMEOUT: 5m
MHC_FALSE_STATUS_TIMEOUT: 12m
#! ---------------------------------------------------------------------
#! Identity management configuration
#! ---------------------------------------------------------------------
IDENTITY_MANAGEMENT_TYPE: "none"
#! Settings for IDENTITY_MANAGEMENT_TYPE: "oidc"
# CERT_DURATION: 2160h
# CERT_RENEW_BEFORE: 360h
# OIDC_IDENTITY_PROVIDER_CLIENT_ID:
# OIDC_IDENTITY_PROVIDER_CLIENT_SECRET:
# OIDC_IDENTITY_PROVIDER_GROUPS_CLAIM: groups
# OIDC_IDENTITY_PROVIDER_ISSUER_URL:
# OIDC_IDENTITY_PROVIDER_SCOPES: "email,profile,groups"
# OIDC_IDENTITY_PROVIDER_USERNAME_CLAIM: email
#! The following two variables are used to configure Pinniped JWTAuthenticator for workload clusters
# SUPERVISOR_ISSUER_URL:
# SUPERVISOR_ISSUER_CA_BUNDLE_DATA:
#! Settings for IDENTITY_MANAGEMENT_TYPE: "ldap"
# LDAP_BIND_DN:
# LDAP_BIND_PASSWORD:
# LDAP_HOST:
# LDAP_USER_SEARCH_BASE_DN:
# LDAP_USER_SEARCH_FILTER:
# LDAP_USER_SEARCH_USERNAME: userPrincipalName
# LDAP_USER_SEARCH_ID_ATTRIBUTE: DN
# LDAP_USER_SEARCH_EMAIL_ATTRIBUTE: DN
# LDAP_USER_SEARCH_NAME_ATTRIBUTE:
# LDAP_GROUP_SEARCH_BASE_DN:
# LDAP_GROUP_SEARCH_FILTER:
# LDAP_GROUP_SEARCH_USER_ATTRIBUTE: DN
# LDAP_GROUP_SEARCH_GROUP_ATTRIBUTE:
# LDAP_GROUP_SEARCH_NAME_ATTRIBUTE: cn
# LDAP_ROOT_CA_DATA_B64:
#! ---------------------------------------------------------------------
#! Antrea CNI configuration
#! ---------------------------------------------------------------------
# ANTREA_NO_SNAT: true
# ANTREA_NODEPORTLOCAL: true
# ANTREA_NODEPORTLOCAL_ENABLED: true
# ANTREA_NODEPORTLOCAL_PORTRANGE: 61000-62000
# ANTREA_TRAFFIC_ENCAP_MODE: "encap"
# ANTREA_PROXY: true
# ANTREA_PROXY_ALL: true
# ANTREA_PROXY_LOAD_BALANCER_IPS: false
# ANTREA_PROXY_NODEPORT_ADDRS:
# ANTREA_PROXY_SKIP_SERVICES: ""
# ANTREA_POLICY: true
# ANTREA_TRACEFLOW: true
# ANTREA_DISABLE_UDP_TUNNEL_OFFLOAD: false
# ANTREA_ENABLE_USAGE_REPORTING: false
# ANTREA_EGRESS: true
# ANTREA_EGRESS_EXCEPT_CIDRS: ""
# ANTREA_FLOWEXPORTER: false
# ANTREA_FLOWEXPORTER_COLLECTOR_ADDRESS: "flow-aggregator.flow-aggregator.svc:4739:tls"
# ANTREA_FLOWEXPORTER_POLL_INTERVAL: "5s"
# ANTREA_FLOWEXPORTER_ACTIVE_TIMEOUT: "5s"
# ANTREA_FLOWEXPORTER_IDLE_TIMEOUT: "15s"
# ANTREA_IPAM: false
# ANTREA_KUBE_APISERVER_OVERRIDE: ""
# ANTREA_MULTICAST: false
# ANTREA_MULTICAST_INTERFACES: ""
# ANTREA_NETWORKPOLICY_STATS: true
# ANTREA_SERVICE_EXTERNALIP: true
# ANTREA_TRANSPORT_INTERFACE: ""
# ANTREA_TRANSPORT_INTERFACE_CIDRS: ""
Tanzu Kubernetes Grid가 vSphere에 로그인하고 Tanzu Kubernetes Grid가 사용할 수 있는 리소스를 지정하도록 허용하려면 정보를 입력합니다.
VSPHERE_SERVER
, VSPHERE_USERNAME
, VSPHERE_PASSWORD
설정을 vCenter Server 인스턴스의 IP 주소 또는 FQDN과 로그인에 사용할 자격 증명으로 업데이트합니다.관리 클러스터를 배포할 vSphere 데이터 센터, 리소스 풀, 데이터스토어, 폴더의 전체 경로를 입력합니다.
VSPHERE_DATACENTER
: /<MY-DATACENTER>
VSPHERE_RESOURCE_POOL
: /<MY-DATACENTER>/host/<CLUSTER>/Resources
VSPHERE_DATASTORE
: /<MY-DATACENTER>/datastore/<MY-DATASTORE>
VSPHERE_FOLDER
: /<MY-DATACENTER>/vm/<FOLDER>.
VSPHERE_CONTROL_PLANE_ENDPOINT
를 설정하거나 비워 둡니다.
VSPHERE_NETWORK
및 VIP_NETWORK_INTERFACE
에 네트워크와 네트워크 인터페이스를 지정합니다.VSPHERE_TEMPLATE
의 주석 처리를 제거하고 업데이트하여 OVA 파일의 경로를 지정합니다. /MY-DC/vm/MY-FOLDER-PATH/MY-IMAGE
형식을 사용합니다. 자세한 내용은 Tanzu CLI를 사용하여 TKG 2.2 워크로드 클러스터 생성 및 관리의 사용자 지정 OVA 이미지를 사용하여 클러스터 배포를 참조하십시오.VSPHERE_SSH_AUTHORIZED_KEY
옵션에 SSH 키를 입력합니다. SSH 키를 가져오는 방법에 대한 자세한 내용은 vSphere에 관리 클러스터 배포 준비를 참조하십시오.VSPHERE_TLS_THUMBPRINT
변수에 TLS 지문을 입력하거나 지문 확인을 건너뛰려면 VSPHERE_INSECURE: true
를 설정합니다.VSPHERE_STORAGE_POLICY_ID
의 주석 처리를 제거하고 관리 클러스터에 사용할 VM에 대해 vCenter Server에서 구성한 VM의 스토리지 정책 이름을 지정합니다.예:
#! ---------------------------------------------------------------------
#! vSphere configuration
#! ---------------------------------------------------------------------
VSPHERE_SERVER: 10.185.12.154
VSPHERE_USERNAME: [email protected]
VSPHERE_PASSWORD: <encoded:QWRtaW4hMjM=>
VSPHERE_DATACENTER: /dc0
VSPHERE_RESOURCE_POOL: /dc0/host/cluster0/Resources/tanzu
VSPHERE_DATASTORE: /dc0/datastore/sharedVmfs-1
VSPHERE_FOLDER: /dc0/vm/tanzu
VSPHERE_NETWORK: "VM Network"
VSPHERE_CONTROL_PLANE_ENDPOINT: 10.185.11.134
VIP_NETWORK_INTERFACE: "eth0"
VSPHERE_TEMPLATE: /dc0/vm/tanzu/my-image.ova
VSPHERE_SSH_AUTHORIZED_KEY: ssh-rsa AAAAB3[...]tyaw== [email protected]
VSPHERE_TLS_THUMBPRINT: 47:F5:83:8E:5D:36:[...]:72:5A:89:7D:29:E5:DA
VSPHERE_INSECURE: false
VSPHERE_STORAGE_POLICY_ID: "My storage policy"
Tanzu CLI는 구성 파일에 입력하는 설정에 따라 관리 클러스터 및 워크로드 클러스터의 개별 노드를 생성합니다. vSphere에서 모든 노드 VM이 미리 정의된 동일한 구성을 가지도록 구성하고 제어부와 Worker 노드에 미리 정의된 다른 구성을 설정하거나 노드의 구성을 사용자에 맞게 수정할 수 있습니다. 이러한 설정을 사용하여 관리 클러스터 노드에 구성이 서로 다른 노드가 있는 클러스터를 생성할 수 있습니다. 제어부 노드와 Worker 노드의 구성이 다른 클러스터를 생성할 수도 있습니다.
Tanzu CLI는 클러스터 노드에 대해 다음과 같은 미리 정의된 구성을 제공합니다.
small
: CPU 2개, 4GB 메모리, 20GB 디스크medium
: CPU 2개, 8 GB 메모리, 40 GB 디스크large
: CPU 4개, 16 GB 메모리, 40 GB 디스크extra-large
: CPU 8개, 32 GB 메모리, 80 GB 디스크모든 제어부 및 Worker 노드 VM의 크기가 동일한 클러스터를 생성하려면 SIZE
변수를 지정합니다. SIZE
변수를 설정하면 모든 노드가 사용자가 설정한 구성으로 생성됩니다.
SIZE: "large"
제어부 및 Worker 노드 VM의 크기가 다른 클러스터를 생성하려면 CONTROLPLANE_SIZE
및 WORKER_SIZE
옵션을 지정합니다.
CONTROLPLANE_SIZE: "medium"
WORKER_SIZE: "extra-large"
CONTROLPLANE_SIZE
및 WORKER_SIZE
옵션을 SIZE
옵션과 결합할 수 있습니다. 예를 들어 SIZE: "large"
를 WORKER_SIZE: "extra-large"
와 함께 지정하면 제어부 노드는 large
로 설정되고 Worker 노드는 extra-large
로 설정됩니다.
SIZE: "large"
WORKER_SIZE: "extra-large"
미리 정의된 구성을 사용하는 대신 노드의 구성을 사용자 지정할 수 있습니다.
모든 노드에 동일한 사용자 지정 구성을 사용하려면 VSPHERE_NUM_CPUS
, VSPHERE_DISK_GIB
, VSPHERE_MEM_MIB
옵션을 지정합니다.
VSPHERE_NUM_CPUS: 2
VSPHERE_DISK_GIB: 40
VSPHERE_MEM_MIB: 4096
제어부 노드와 Worker 노드에 서로 다른 사용자 지정 구성을 정의하려면 VSPHERE_CONTROL_PLANE_*
과 VSPHERE_WORKER_*
옵션을 지정합니다.
VSPHERE_CONTROL_PLANE_NUM_CPUS: 2
VSPHERE_CONTROL_PLANE_DISK_GIB: 20
VSPHERE_CONTROL_PLANE_MEM_MIB: 8192
VSPHERE_WORKER_NUM_CPUS: 4
VSPHERE_WORKER_DISK_GIB: 40
VSPHERE_WORKER_MEM_MIB: 4096
SIZE
, CONTROLPLANE_SIZE
, WORKER_SIZE
옵션을 사용하여 이러한 설정을 재정의할 수 있습니다.
NSX Advanced Load Balancer를 사용하려면 먼저 vSphere 환경에 배포해야 합니다. NSX Advanced Load Balancer 설치를 참조하십시오. NSX Advanced Load Balancer를 배포한 후 로드 밸런서를 사용하도록 vSphere 관리 클러스터를 구성합니다.
예:
AVI_ENABLE: true
AVI_CONTROL_PLANE_HA_PROVIDER: true
AVI_NAMESPACE: "tkg-system-networking"
AVI_DISABLE_INGRESS_CLASS: true
AVI_AKO_IMAGE_PULL_POLICY: IfNotPresent
AVI_ADMIN_CREDENTIAL_NAME: avi-controller-credentials
AVI_CA_NAME: avi-controller-ca
AVI_CONTROLLER: 10.185.10.217
AVI_USERNAME: "admin"
AVI_PASSWORD: "<password>"
AVI_CLOUD_NAME: "Default-Cloud"
AVI_SERVICE_ENGINE_GROUP: "Default-Group"
AVI_NSXT_T1LR:""
AVI_DATA_NETWORK: nsx-alb-dvswitch
AVI_DATA_NETWORK_CIDR: 10.185.0.0/20
AVI_MANAGEMENT_CLUSTER_VIP_NETWORK_NAME: ""
AVI_MANAGEMENT_CLUSTER_VIP_NETWORK_CIDR: ""
AVI_CA_DATA_B64: LS0tLS1CRU[...]UtLS0tLQo=
AVI_LABELS: ""
AVI_DISABLE_STATIC_ROUTE_SYNC: true
AVI_INGRESS_DEFAULT_INGRESS_CONTROLLER: false
AVI_INGRESS_SHARD_VS_SIZE: ""
AVI_INGRESS_SERVICE_TYPE: ""
AVI_INGRESS_NODE_NETWORK_LIST: ""
기본적으로 관리 클러스터와 관리 클러스터가 관리하는 모든 워크로드 클러스터는 로드 밸런서를 사용합니다. NSX Advanced Load Balancer 변수를 구성하는 방법에 대한 자세한 내용은 구성 파일 변수 참조의 NSX Advanced Load Balancer를 참조하십시오.
NSX ALB를 Tanzu Kubernetes Grid 제어부 끝점 제공자로 사용할 수 있습니다. 다음 표에서는 Tanzu Kubernetes Grid에서 기본 제어부 끝점 제공자인 NSX ALB와 Kube-Vip의 차이점에 대해 설명합니다.
Kube-Vip | NSX ALB | |
---|---|---|
다음으로 트래픽 전송 | 단일 제어부 노드 |
여러 제어부 노드 |
끝점 VIP를 구성해야 함 | 예 |
아니요 NSX ALB 고정 IP 풀에서 VIP 할당 |
vSphere 환경에서 NSX를 사용하는 경우 라우팅 가능한 포드 또는 NO_NAT
포드로 구현하도록 구성할 수 있습니다.
참고NSX 라우팅 가능 포드는 이 릴리스의 실험적인 기능입니다. NSX 라우팅 가능 포드를 구현하는 방법에 대한 정보가 이 설명서에 곧 추가될 예정입니다.
#! ---------------------------------------------------------------------
#! NSX specific configuration for enabling NSX routable pods
#! ---------------------------------------------------------------------
# NSXT_POD_ROUTING_ENABLED: false
# NSXT_ROUTER_PATH: ""
# NSXT_USERNAME: ""
# NSXT_PASSWORD: ""
# NSXT_MANAGER_HOST: ""
# NSXT_ALLOW_UNVERIFIED_SSL: false
# NSXT_REMOTE_AUTH: false
# NSXT_VMC_ACCESS_TOKEN: ""
# NSXT_VMC_AUTH_HOST: ""
# NSXT_CLIENT_CERT_KEY_DATA: ""
# NSXT_CLIENT_CERT_DATA: ""
# NSXT_ROOT_CA_DATA: ""
# NSXT_SECRET_NAME: "cloud-provider-vsphere-nsxt-credentials"
# NSXT_SECRET_NAMESPACE: "kube-system"
IPv6 네트워킹 환경에 IPv6을 지원하는 관리 클러스터를 배포하려면 다음을 수행합니다.
(선택 사항) IPv6용 변수 및 규칙 설정에 설명된 대로 환경을 준비합니다.
관리 클러스터에 다음의 구성 파일의 변수를 설정합니다.
TKG_IP_FAMILY
을 ipv6
로 설정합니다.VSPHERE_CONTROL_PLANE_ENDPOINT
를 고정 IPv6 주소로 설정합니다.CLUSTER_CIDR and SERVICE_CIDR
을 설정합니다. 기본값은 각각 fd00:100:64::/48
및 fd00:100:96::/108
입니다.vSphere 7 및 vSphere 9에서 vSphere with Tanzu는 관리 클러스터로 작동하고 독립형 관리 클러스터보다 더 뛰어난 환경을 제공하는 기본 제공 Supervisor를 제공합니다. Supervisor가 없는 경우 Tanzu Kubernetes Grid 관리 클러스터를 vSphere 7 또는 vSphere 8로 배포하는 것은 지원되지만 기본 옵션은 vSphere with Tanzu를 사용하도록 설정하고 가능하면 Supervisor를 사용하는 것입니다. VMware Solution은 Supervisor 클러스터를 지원하지 않기 때문에 관리 클러스터를 배포해야 합니다. 자세한 내용은 vSphere with Tanzu Supervisor는 관리 클러스터입니다를 참조하십시오.
중요TKG 2.x 및 vSphere 8의 vSphere with Tanzu Supervisor와 호환되는 Tanzu CLI 버전은 vSphere 7의 Supervisor 클러스터와 호환되지 않습니다. vSphere 7의 vSphere with Tanzu Supervisor 클러스터에서 Tanzu CLI를 사용하려면 TKG v1.6의 Tanzu CLI 버전을 사용합니다. Supervisor와 TKG 2.x와 호환되는 Tanzu CLI 버전을 사용하려면 vSphere 8로 업그레이드합니다. vSphere with Tanzu Supervisor 클러스터가 없는 경우 독립형 TKG 2.x 관리 클러스터를 vSphere 7에 배포할 수 있습니다. Tanzu CLI와 VMware 제품 간의 호환성에 대한 자세한 내용은 Tanzu CLI 설명서를 참조하십시오.
vSphere with Tanzu Supervisor를 관리 클러스터로 사용하는 권장 사항을 반영하기 위해 Tanzu CLI는 다음과 같이 작동하며 DEPLOY_TKG_ON_VSPHERE7
과 ENABLE_TKGS_ON_VSPHERE7
구성 매개 변수로 제어됩니다.
ENABLE_TKGS_ON_VSPHERE7: false
는 관리 클러스터를 배포할 수 없음을 알려주고 종료됩니다.ENABLE_TKGS_ON_VSPHERE7: true
는 config.yml
또는 로컬 환경의 VSPHERE_SERVER
에 의해 설정된 주소에서 vSphere Client를 열기 때문에 vSphere 설명서의 vSphere 네트워킹으로 One-Zone Supervisor 활성화에 설명된 대로 Supervisor 클러스터를 구성할 수 있습니다.DEPLOY_TKG_ON_VSPHERE7: false
는 Tanzu Kubernetes Grid 관리 클러스터 배포는 가능하지만 권장되지 않는다는 것을 알려주고, 설치를 종료하거나 관리 클러스터를 계속 배포하라는 메시지를 표시합니다.DEPLOY_TKG_ON_VSPHERE7: true
는 vSphere 8의 권장 사항에 따라 vSphere 8에 TKG 관리 클러스터를 배포하지만, Azure VMware Solution에 필요합니다.관리 클러스터 구성 파일 업데이트를 완료한 후 구성 파일에서 관리 클러스터 배포 지침에 따라 관리 클러스터를 생성합니다.