# **QKS Kubernetes 컴포넌트** ## QKS GPU Accelerator QKS 서비스에서 GPU 가속을 사용하기 위한 설정입니다. 현재는 NVIDIA 하드웨어(GTX / Tesla) 만을 지원합니다. 인벤토리 설정파일의 `[qks-nvidia]` 섹션에 나열한 호스트들이 GPU 노드로 구성됩니다. ```yaml # QKS GPU Accelerator qks_accelerator_enabled: true qks_accelerator_namespace: "{{ qks_system_namespace }}" qks_accelerator_node_taint: false qks_accelerator_nvidia_type: tesla qks_accelerator_driver_version: 450.51.06 qks_accelerator_kernel_version: - "{{ ansible_kernel }}" - "3.10.0-1160.42.2.el7.x86_64" qks_accelerator_device_plugin_version: v0.9.0 qks_accelerator_device_metric_version: 2.1.4-2.3.1-ubuntu18.04 ``` ### QKS GPU Acclerator 설정 **`qks_accelerator_enabled`** (**true** / false) QKS GPU Accelerator 구성여부를 설정합니다. **`qks_acclerator_namespace`** QKS GPU Accelerator 가 배포될 네임스페이스를 지정합니다. 기본값은 "`qks-system`" 입니다. **`qks_accelerator_node_taint`** (true / **false**) GPU 하드웨어가 장착된 노드가 GPU 워크로드만을 수용할지 여부를 설정합니다. 기본값은 "`true`" 이며, 이 경우 GPU 워크로드만을 위한 전용 노드로 설정됩니다. > GPU 하드웨어가 장작된 노드에 Kubernetes Taint 설정을 합니다. 일반 비지니스 워크로드로 인한 CPU / Memory 점유로 GPU 워크로드가 스케쥴링 되지 못하는 것을 방지합니다. CPU / Memory 가 충분하다면, 효율적인 리소스 사용을 위해 "`false`"로 설정 가능합니다. **`qks_accelerator_nvidia_type`** (gtx / **tesla**) NVIDIA 하드웨어 플랫폼 타입을 지정합니다. **`qks_accelerator_driver_version`** 사용할 NVIDIA 드라이버 버전을 지정합니다. 사용하는 CUDA 버전에 맞는 드라이버 버전을 지정합니다. | CUDA Toolkit | Linux x86_64 Driver Version | | --------------------- | --------------------------- | | CUDA 11.1 (11.1.0) | >= 455.23.04 | | CUDA 11.0 (11.0.171) | >= 450.36.06 | | CUDA 10.2 (10.2.89) | >= 440.33 | | CUDA 10.1 (10.1.105) | >= 418.39 | | CUDA 10.0 (10.0.130) | >= 410.48 | | CUDA 9.2 (9.2.88) | >= 396.26 | | CUDA 9.1 (9.1.85) | >= 390.46 | | CUDA 9.0 (9.0.76) | >= 384.81 | | CUDA 8.0 (8.0.61 GA2) | >= 375.26 | | CUDA 8.0 (8.0.44) | >= 367.48 | | CUDA 7.5 (7.5.16) | >= 352.31 | | CUDA 7.0 (7.0.28) | >= 346.46 | > 참고: [CUDA Compatibility](https://docs.nvidia.com/deploy/cuda-compatibility/index.html) **`qks_accelerator_kernel_version`** `[qks-nvidia]` 섹션에 지정된 호스트의 커널 버전을 지정합니다. 커널버전이 다양한 경우, 각각의 버전들을 리스트 형태로 나열합니다. > NVIDIA 드라이버 설치 시 필요한 kernel headers 및 kernel development 패키지등이 각각 호스트들의 커널버전에 맞게 수집/설치 됩니다. `RedHat 7.x (rhel / centos) 계열에서 Ceph 를 사용할 경우, 커널버전은 반드시 3.10.0-1127.el7.x86_64 이상`이어야 합니다. **`qks_accelerator_device_plugin_version`** GPU 가속 지원을 위한 디바이스 플러그인 이미지 버전을 지정합니다. > 참고: [Kubernetes GPU Support](https://kubernetes.io/docs/tasks/manage-gpus/scheduling-gpus/#deploying-nvidia-gpu-device-plugin) > 참고: [NVIDIA device plugin](https://github.com/NVIDIA/k8s-device-plugin) **`qks_accelerator_device_metric_version`** GPU 리소스 모니터링을 위한 DCGM Exporter 이미지 버전을 지정합니다. > 참고: [NVIDIA DCGM exporter](https://github.com/NVIDIA/gpu-monitoring-tools) ## QKS Ingress Controller Ingress Controller는 Kubernetes 네트웍 외부에서의 요청을 내부 서비스로 라우팅해주는 Layer 7 Switch 역할을 수행합니다. Nginx 기반의 Reverse Proxy 로 Ingress 리소스의 정의대로 내부 서비스로 라우팅해줍니다. 라우팅 경로는 `로드밸런서 > K8S NODEPORT > K8S SERVICE > K8S POD` 입니다. 다음과 같은 설치옵션을 제공합니다. ```yaml # QKS Ingress Controller qks_ingress_controller_enabled: true qks_ingress_controller_release: qks-ingress qks_ingress_controller_version: 3.29.0 qks_ingress_controller_namespace: "{{ qks_system_namespace }}" qks_ingress_controller_replicas: 2 qks_ingress_controller_tlssecret: tls.qks.io qks_ingress_controller_nodeport_insecure: 30080 qks_ingress_controller_nodeport_secure: 30443 qks_ingress_backend_enabled: true qks_ingress_backend_replicas: 1 ``` ### QKS Ingress Controller 설정 **`qks_ingress_controller_enabled`** (**true** / false) Ingress Controller를 구성여부를 설정합니다. **`qks_ingress_controller_release`** Helm 을 통해 표시될 릴리즈 이름을 설정합니다. **`qks_ingress_controller_version`** Helm 차트 버전을 설정합니다. **`qks_ingress_controller_namespace`** Ingress Controller 가 배포될 네임스페이스를 지정합니다. 기본적으로 QKS 컨트롤러는 "`qks-system`" 네임스페이스에 배포됩니다. **`qks_ingress_controller_replicas`** Ingress Controller의 복제본 개수를 지정합니다. 고가용 보장을 위해 최소 `2개 이상`이 권장됩니다. **`qks_ingress_controller_tlssecret`** Ingress Controller가 사용할 인증서가 저장될 Secret 이름을 지정합니다. 기본값은 "`tls.qks.io`" 입니다. > 참고: 기본 인증서는 qks-certificate 롤에서 생성됩니다. **`acc_ingress_controller_nodeport_insecure`** Ingress Controller가 사용할 HTTP 서비스의 NodePort를 지정합니다. 30000 부터 32767 범위헤서 사용하지 않는 포트를 지정합니다. 기본값은 "`30080`" 입니다. **`qks_ingress_controller_nodeport_secure`** Ingress Controller가 사용할 HTTPS 서비스의 NodePort를 지정합니다. 3000 부터 32767 범위에서 사용하지 않는 포트를 지정합니다. 기본값은 "`30443`" 입니다. **`qks_ingress_backend_enabled`** (**true** / false) HTTP 404 발생 시 요청을 처리할 백엔드 사용 여부를 설정합니다. **`qks_ingress_backend_replicas`** Ingress Backend의 복제본 개수를 지정합니다. 기본값은 "`1`" 입니다. ## QKS Load Balancer 별도의 로드밸런서가 없을 경우 사용할 수 있는 소프트웨어 로드밸런서 입니다. HA로 구성된 Kubernetes API Server 및 Ingress Controller 의 트래픽을 가용한 서버로 분배합니다. 오픈소스 소프트웨어인 HAProxy 가 부하분산을 담당하며, Keepalived 로 VIP를 사용한 HAProxy 자체의 가용성을 보장합니다. 보다 나은 퍼포먼스를 위해서 하드웨어 로드밸런서 사용을 권장합니다. 인벤토리 설정파일의 `[kube-master]` 섹션에 나열한 호스트들이 로드밸런서 서버로 구성됩니다. ```yaml # QKS Load Balancer qks_vip_manager_enabled: false qks_vip_manager_version: 2.0.20 qks_vip_manager_nic: eth0 qks_load_balancer_enabled: true qks_load_balancer_version: 2.2.5 qks_load_balancer_namespace: "{{ qks_system_namespace }}" qks_load_balancer_stats: true qks_load_balancer_stats_port: 8888 qks_load_balancer_stats_user: admin qks_load_balancer_stats_pass: QKSk8s qks_load_balancer_vip: xxx.xxx.xxx.xxx qks_load_balancer_fqdn: k8s.qks.io qks_load_balancer_addr: "{% if qks_vip_manager_enabled | bool %}{{ qks_load_balancer_vip }}{% else %}{{ hostvars[groups['kube-master'][0]]['private_ip'] }}{% endif %}" qks_load_balancer_config_location: "/etc/qks" ``` ### QKS Load Balancer 설정 **`qks_vip_manager_enabled`** (true / **false**) Load Balancer 자체의 가용성 보장을 위한 VIP Manager 구성여부를 설정합니다. > VIP Manager 사용을 위해서는 네트워크 관리자가 `반드시 VIP가 제공`해야하며, 모든 로드밸러서와 VIP는 동일할 서브 네트워크에서 운영되어야 합니다. **`qks_vip_manager_version`** VIP Manager (keepalive) 이미지의 버전을 지정합니다. > 참고: [Docker Hub - keepalived](https://hub.docker.com/r/osixia/keepalived/tags) **`qks_vip_manager_nic`** VIP Manager가 사용할 네트워크 인터페이스를 지정합니다. > 다수의 네트워크 인터페이스가 있을 경우, 외부로 부터 유입이 가능한 인터페이스를 지정합니다. **`qks_load_balancer_enabled`** (true / **false**) Load Balancer 구성여부를 설정합니다. **`qks_load_balancer_version`** Load Balancer (haproxy) 이미지의 버전을 지정합니다. > 참고: [Docker Hub - haproxy](https://hub.docker.com/_/haproxy) **`qks_load_balancer_namespace`** VIP Manager와 Load Balancer 가 배포될 네임스페이스를 지정합니다. 기본적으로 QKS 컨트롤러는 "`qks-system`" 네임스페이스에 배포됩니다. **`qks_load_balancer_stats`** Load Balancer 상태를 보여주는 stats 페이지 사용여부를 설정합니다. > http://`[VIP or Master Node IP]:[Port]/stats` 로 접근 가능합니다. **`qks_load_balancer_stats_port`** Load Balancer 상태를 보여주는 stats 페이지 접근을 위한 포트를 지정합니다. **`qks_load_balancer_stats_user`** Load Balancer 상태를 보여주는 stats 페이지 접근을 위한 사용자 이름을 지정합니다. **`qks_load_balancer_stats_pass`** Load Balancer 상태를 보여주는 stats 페이지 접근을 위한 사용자 패스워드를 지정합니다. **`qks_load_balancer_vip`** Load Balancer 가 사용할 `VIP`를 지정합니다. 이 값은 Kubernetes 배포시 자동생성되는 인증서의 SAN (Subject Alternative Name) 목록에 포합니다. **`qks_load_balancer_fqdn`** Kubernetes API Server의 도메인을 지정합니다. 이 값은 Kubernetes 배포시 자동생성되는 인증서의 SAN (Subject Alternative Name) 목록에 포합니다. **`qks_load_balancer_addr`** (수정금지) VIP를 설정하면 VIP로, VIP를 설정하지 않으면 Kubernetes Master 1번의 IP로 지정됩니다. **`qks_load_balancer_config_location`** VIP Manager 설정파일 (`qks-vip-manager.conf`)과 Load Balancer 설정파일 (`qks-load-balancer.conf`)이 위치할 경로를 지정합니다. 기본값은 "`/etc/qks`" 입니다. ## QKS Metrics Server Kubernetes HPA (Horizontal Pod Autoscaling)를 위해 노드 및 컨테이너의 리소스 사용률 정보를 제공하는 메트릭스 서버를 설정합니다. ```yaml # QKS Metrics Server qks_metrics_server_enabled: true qks_metrics_server_release: qks-metrics-server qks_metrics_server_version: 2.11.4 qks_metrics_server_namespace: "{{ qks_system_namespace }}" qks_metrics_server_replicas: 2 ``` ### QKS Metrics Server 설정 **`qks_metrics_server_enabled`** (**true** / false) Metrics Server 구성여부를 설정합니다 **`qks_metrics_server_release`** Helm 을 통해 표시될 릴리즈 이름을 설정합니다. **`qks_metrics_server_version`** Helm 차트 버전을 설정합니다. 오프라인 모드에서는 "`2.11.1`"만 선택 가능합니다. **`qks_metrics_server_namespace`** Metrics Server 서비스가 배포될 네임스페이스를 지정합니다. 기본값은 "`qks-system`" 입니다. **`qks_metrics_server_replicas`** Metrics Server의 복제본 개수를 지정합니다. 고가용 보장을 위해 최소 `2개 이상`이 권장됩니다. ### QKS Metrics Server 사용 아래의 명령으로 노드 및 컨테이너의 상태를 확인할 수 있습니다. ```bash kubectl top nodes kubectl top pods ``` ## QKS Storage NFS 별도의 스토리지가 없을 경우 사용할 수 있는 NFS 서버를 제공합니다. NFS 특성상 HA 구성이 불가하여 가용성 부족합니다. 하드웨어 스토리지가 없을 경우만 사용하고, 최적을 성능을 위해서는 하드웨어 스토리지 사용을 권장합니다. 인벤토리 설정파일의 `[qks-nfs-server]` 섹션에 나열한 호스트들이 NFS 서버로 구성됩니다. > NFS 특성상 HA 구성이 불가하며, 반드시 하나의 호스트만 지정해야 합니다. ```yaml # QKS NFS Server qks_nfs_server_enabled: true qks_nfs_server_export_path: /nfs qks_nfs_server_export_opts: "*(rw,sync,no_root_squash,fsid=0,no_subtree_check)" ``` ### QKS Storage NFS 설정 **`qks_nfs_server_enabled`** (**true** / false) NFS 서버 구성여부를 설정합니다 **`qks_nfs_server_export_path`** NFS 서버의 Export 경로를 설정합니다. **`qks_nfs_server_export_opts`** NFS 서버의 Export 옵션을 설정합니다. ## QKS Storage Ceph Ceph 고가용성과 확장성을 제공하는 오픈소스 분산 네트워크 스토리지입니다. Kubernetes CSI (Container Storage Interface) 표준을 통한 동적 볼륨할당 (Dynaic Provisioning) 및 관리가 가능합니다. 동적으로 구성가능한 컨트롤러가 포함된 Rook-Ceph Operator 버전을 사용합니다. 인벤토리 설정파일의 `[qks-ceph]` 섹션에 나열한 호스트들이 Ceph 스토리지 서버로 구성됩니다. > 정족수 충족을 위해 스토리지 노드는 3개 이상으로 홀수로 지정합니다. 다음과 같은 3가지 타입의 스토리지를 지원합니다. - RBD - 블럭 디바이스 형식의 스토리지 - RWO (Read Write Once) 방식으로 하나의 POD에서만 독점적으로 사용 - CEPHFS - 공유 파일시스템 형식의 스토리지 - RWX (Read Write Many) 방식으로 다수의 POD에서 공유하여 사용 - OBJECT STORAGE - 아마존 S3 형식의 스토리지 - RWX (Read Write Many) 방식으로 POD에서 마운트하지 않고 API로 사용 ```yaml # QKS Rook Ceph qks_rook_ceph_enabled: true qks_rook_ceph_release: qks-rook-ceph qks_rook_ceph_version: 1.5.9 qks_rook_ceph_namespace: rook-ceph qks_rook_ceph_hostnetwork: false qks_rook_ceph_node_taint: false qks_rook_ceph_admin_fqdn: ceph.qks.io qks_rook_ceph_admin_pass: QKSk8s qks_rook_ceph_image_version: 15.2.9 qks_rook_ceph_monitor_count: 3 # Must be an odd number (1,3,5,...) # NOTE: THIS PARAMETERS SHOULD BE CONFIGURED ACCORDING TO CUSTOMER SYSTEM ENVIRONMENT !!! qks_rook_ceph_storage_devices: # The following values work only with VMs created by terraform on AWS and 3 Ceph nodes. - { host: "{{ groups['qks-ceph'][0] }}", device: nvme1n1, class: hdd } - { host: "{{ groups['qks-ceph'][1] }}", device: nvme1n1, class: hdd } - { host: "{{ groups['qks-ceph'][2] }}", device: nvme1n1, class: hdd } # for example # - { host: k8s-tanggle-redhat-w01, device: nvme1n1, class: ssd } # - { host: k8s-tanggle-redhat-w01, device: nvme2n1, class: hdd } # - { host: k8s-tanggle-redhat-w02, device: nvme1n1, class: ssd } # - { host: k8s-tanggle-redhat-w02, device: nvme2n1, class: hdd } # - { host: k8s-tanggle-redhat-w03, device: nvme1n1, class: ssd } # - { host: k8s-tanggle-redhat-w03, device: nvme2n1, class: hdd } # QKS Ceph Block Storage (rbd) qks_rook_ceph_block_storage_enabled: true qks_rook_ceph_block_storage_failuredomain: host # host / osd qks_rook_ceph_block_pool_name: qks-block qks_rook_ceph_block_pool_type: r # 'e' for Erasure Coding, 'r' for Replication qks_rook_ceph_block_pool_meta_deviceclass: hdd qks_rook_ceph_block_pool_data_deviceclass: hdd qks_rook_ceph_block_pool_replication_size: 3 qks_rook_ceph_block_storage_class_name: qks-ceph-block qks_rook_ceph_block_storage_class_reclaimpolicy: Retain # Retain / Delete qks_rook_ceph_block_stroage_class_fstype: ext4 # QKS Ceph Filesystem Storage (cephfs) qks_rook_ceph_filesystem_storage_enabled: true qks_rook_ceph_filesystem_storage_failuredomain: host # host / osd qks_rook_ceph_filesystem_pool_name: qks-cephfs qks_rook_ceph_filesystem_pool_type: r # 'e' for Erasure Coding, 'r' for Replication qks_rook_ceph_filesystem_pool_meta_deviceclass: hdd qks_rook_ceph_filesystem_pool_data_deviceclass: hdd qks_rook_ceph_filesystem_pool_replication_size: 3 qks_rook_ceph_filesystem_storage_class_name: qks-ceph-cephfs qks_rook_ceph_filesystem_storage_class_reclaimpolicy: Retain # Retain / Delete qks_rook_ceph_filesystem_mount_on_masters: false # QKS Ceph Object Storage (s3) qks_rook_ceph_object_storage_enabled: true qks_rook_ceph_object_storage_failuredomain: host # host / osd qks_rook_ceph_object_storage_instances: 3 qks_rook_ceph_object_storage_fqdn: s3.qks.io qks_rook_ceph_object_storage_port: 8080 qks_rook_ceph_object_pool_name: qks-object qks_rook_ceph_object_pool_type: r # 'e' for Erasure Coding, 'r' for Replication qks_rook_ceph_object_pool_meta_deviceclass: hdd qks_rook_ceph_object_pool_data_deviceclass: hdd qks_rook_ceph_object_pool_replication_size: 3 # QKS Ceph NFS Ganesha qks_rook_ceph_ganesha_enabled: false qks_rook_ceph_ganesha_failuredomain: host # host / osd qks_rook_ceph_ganesha_instances: 1 qks_rook_ceph_ganesha_pool_name: qks-ganesha qks_rook_ceph_ganesha_pool_replication_size: 3 qks_rook_ceph_ganesha_pool_namespace: conf-ganesha qks_rook_ceph_ganesha_export_path: ganesha ``` ### QKS Storage Ceph 설정 **`qks_rook_ceph_enabled`** (**true** / false) Ceph 구성여부를 설정합니다. **`qks_rook_ceph_release`** Helm 을 통해 표시될 릴리즈 이름을 설정합니다. **`qks_rook_ceph_version`** Helm 차트 버전을 설정합니다. 오프라인 모드에서는 "`1.4.2`"만 선택 가능합니다. **`qks_rook_ceph_namespace`** Ceph 서비스가 배포될 네임스페이스를 지정합니다. 기본값은 "`rook-ceph`" 입니다. > rook-ceph operator 구조상 기본값 사용이 권장됩니다. **`qks_rook_ceph_hostnetwork`** (true / **false**) HostNetwork 사용여부를 설정합니다. "`true`"로 설정할 경우, CNI 네트워크 대시 노드의 네트워크를 사용합니다. 명확한 의도가 아니라면 기본값 "`false`"로 설정을 권장합니다. **`qks_rook_ceph_node_taint`** (true / **false**) Ceph 스토리지 노드가 일반 비지니스 워크로드를 수용할지 여부를 설정합니다. "`true`"로 설정할 경우, Ceph 스토리지만을 위한 전용 노드로 설정됩니다. > 최적의 성능을 위해서는 "`true`"로 설정하여 전용 노드로 사용하길 권장합니다. **`qks_rook_ceph_admin_fqdn`** Ceph 스토리지 모니터링 및 관리를 위한 콘솔 도메인 이름을 지정합니다. **`qks_rook_ceph_admin_pass`** Ceph 스토리리 관리페이지 접근을 위한 패스워드를 지정합니다. 기본 사용자명은 "`admin`" 입니다. **`qks_rook_ceph_storage_devices`** Ceph 스토리지로 구성할 호스트, 호스트별 디스크, 디스크 종류를 나열합니다. ``` - { host: "{{ groups['qks-ceph'][0] }}", device: nvme1n1, class: ssd } - { host: "{{ groups['qks-ceph'][0] }}", device: sda, class: hdd } - { host: "{{ groups['qks-ceph'][1] }}", device: nvme1n1, class: ssd } - { host: "{{ groups['qks-ceph'][1] }}", device: sda, class: hdd } - { host: "{{ groups['qks-ceph'][2] }}", device: nvme1n1, class: ssd } - { host: "{{ groups['qks-ceph'][2] }}", device: sda, class: hdd } ``` > `주의`: 지정된 디바이스는 저수준 포맷이 되고, **`존재하는 모든 데이터는 삭제됩니다 !!!`** #### QKS Storage Ceph 설정 (Block Storage) **`qks_rook_ceph_block_storage_enabled`** RBD (블럭 디바이스) 구성 여부를 설정합니다. **`qks_rook_ceph_block_storage_failuredomain`** (**host** / osd) 데이터 복제본이 host를 기준으로 분산 저장될지, osd를 기준으로 분산 저장될지를 설정합니다. 안정성을 위해 "`host`"가 권장됩니다. **`qks_rook_ceph_block_pool_name`** RBD (블럭 디바이스) 데이터가 저장될 POOL 이름을 지정합니다. **`qks_rook_ceph_block_pool_type`** (**r** / e) RBD (블럭 디바이스) 데이터가 저장될 POOL이 구성될 방식을 지정합니다. `r`은 Replication (RAID 1)으로 구성되며 데이터 안정성이 우선이며, `e`는 Erasure Coding (RAID 5)으로 디스크 가용용량 우선입니다. **`qks_rook_ceph_block_pool_meta_deviceclass`** RBD (블럭 디바이스) 메타정보가 저장될 class 이름을 지정합니다. 메타정보는 퍼포먼스 향상을 위해 `ssd`에 저장이 권장됩니다. > `qks_rook_ceph_storage_devices` 설정을 참고합니다. **`qks_rook_ceph_block_pool_data_deviceclass`** RBD (블럭 디바이스) 데이터가 저장될 class 이름을 지정합니다. > `qks_rook_ceph_storage_devices` 설정을 참고합니다. **`qks_rook_ceph_block_pool_replication_size`** RBD (블럭 디바이스) 데이터 복제본 개수를 지정합니다. 운영 데이터의 안정성을 위해 `최소 2` 또는 `권장 3` 입니다. **`qks_rook_ceph_block_storage_class_name`** Kubernetes CSI (Container Storage Interfac)로 제공될 StorageClass 이름을 설정합니다. 기본값은 "`qks-ceph-block`" 입니다. **`qks_rook_ceph_block_storage_class_reclaimpolicy`** (**Retain** / Delete) Kubernetes CSI (Container Storage Interfac)로 제공될 StorageClass의 Reclaim Policy를 설정합니다. 기본값은 "`Retain`" 입니다. > 참고: [Kubernetes Persistent Volume - Reclaiming](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#reclaiming) **`qks_rook_ceph_block_stroage_class_fstype`** (**ext4** / xfs) RBD (블럭 디바이스) 파일시스템을 지정합니다. #### QKS Storage Ceph 설정 (Filesystem Storage) **`qks_rook_ceph_filesystem_storage_enabled`** CEPHFS (공유 파일시스템) 구성 여부를 설정합니다. **`qks_rook_ceph_filesystem_storage_failuredomain`** (**host** / osd) 데이터 복제본이 host를 기준으로 분산 저장될지, osd를 기준으로 분산 저장될지를 설정합니다. 안정성을 위해 "`host`"가 권장됩니다. **`qks_rook_ceph_filesystem_pool_name`** CEPHFS (공유 파일시스템) 데이터가 저장될 POOL 이름을 지정합니다. **`qks_rook_ceph_filesystem_pool_type`** (**r** / e) CEPHFS (공유 파일시스템) 데이터가 저장될 POOL이 구성될 방식을 지정합니다. `r`은 Replication (RAID 1)으로 구성되며 데이터 안정성이 우선이며, `e`는 Erasure Coding (RAID 5)으로 디스크 가용용량 우선입니다. **`qks_rook_ceph_filesystem_pool_meta_deviceclass`** CEPHFS (공유 파일시스템) 메타정보가 저장될 class 이름을 지정합니다. 메타정보는 퍼포먼스 향상을 위해 `ssd`에 저장이 권장됩니다. > `qks_rook_ceph_storage_devices` 설정을 참고합니다. **`qks_rook_ceph_filesystem_pool_data_deviceclass`** CEPHFS (공유 파일시스템) 데이터가 저장될 class 이름을 지정합니다. > `qks_rook_ceph_storage_devices` 설정을 참고합니다. **`qks_rook_ceph_filesystem_pool_replication_size`** CEPHFS (공유 파일시스템) 데이터 복제본 개수를 지정합니다. 운영 데이터의 안정성을 위해 `최소 2` 또는 `권장 3` 입니다. **`qks_rook_ceph_filesystem_storage_class_name`** Kubernetes CSI (Container Storage Interfac)로 제공될 StorageClass 이름을 설정합니다. 기본값은 "`qks-ceph-cephfs`" 입니다. **`qks_rook_ceph_filesystem_storage_class_reclaimpolicy`** (**Retain** / Delete) Kubernetes CSI (Container Storage Interfac)로 제공될 StorageClass의 Reclaim Policy를 설정합니다. 기본값은 "`Retain`" 입니다. > 참고: [Kubernetes Persistent Volume - Reclaiming](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#reclaiming) **`qks_rook_ceph_filesystem_mount_on_masters`** (true / **false**) CEPHFS (공유 파일시스템)을 Kubernetes Master 노드에 자동 마운트 여부를 설정합니다. 기본값은 "`false`" 이고 기본값 사용을 권장합니다. > `주의`: `qks_rook_ceph_hostnetwork` 설정이 `false`일 경우 Ceph Monitor는 Kubernetes CNI 네트워크를 사용하여 Kubernetes 가 초기화 되기전엔 접근이 불가합니다. 이 경우 노드의 리부팅시 부팅이 실패합니다. #### QKS Storage Ceph 설정 (Object Storage) **`qks_rook_ceph_object_storage_enabled`** S3 (오브젝트 스토리지) 구성 여부를 설정합니다. **`qks_rook_ceph_object_storage_failuredomain`** (**host** / osd) 데이터 복제본이 host를 기준으로 분산 저장될지, osd를 기준으로 분산 저장될지를 설정합니다. 안정성을 위해 "`host`"가 권장됩니다. **`qks_rook_ceph_object_storage_instances`** S3 (오브젝트 스토리지) 접근을 위한 HTTP 프론트엔드 RGW (Rados Gateway)의 인스턴스 개수를 지정합니다. 가용성 보장을 위해 `최소 2 이상`을 권장합니다. **`qks_rook_ceph_object_storage_fqdn`** S3 (오브젝트 스토리지) 접근을 위한 도메인을 설정합니다. 설정된 도메인은 Kubernetes Ingress로 설정됩니다. 기본값은 내부도메인 "`s3.qks.io`" 입니다. **`qks_rook_ceph_object_storage_port`** S3 (오브젝트 스토리지) 접근을 위한 HTTP 프론트엔드 RGW (Rados Gateway)의 컨테이너 포트를 지정합니다. 기본값은 "`8080`"이며, Kubernetes Ingress를 통해 라우팅됩니다. **`qks_rook_ceph_object_pool_name`** S3 (오브젝트 스토리지) 데이터가 저장될 POOL 이름을 지정합니다. **`qks_rook_ceph_object_pool_type`** (**r** / e) S3 (오브젝트 스토리지) 데이터가 저장될 POOL이 구성될 방식을 지정합니다. `r`은 Replication (RAID 1)으로 구성되며 데이터 안정성이 우선이며, `e`는 Erasure Coding (RAID 5)으로 디스크 가용용량 우선입니다. **`qks_rook_ceph_object_pool_meta_deviceclass`** S3 (오브젝트 스토리지) 메타정보가 저장될 class 이름을 지정합니다. 메타정보는 퍼포먼스 향상을 위해 `ssd`에 저장이 권장됩니다. > `qks_rook_ceph_storage_devices` 설정을 참고합니다. **`qks_rook_ceph_object_pool_data_deviceclass`** S3 (오브젝트 스토리지) 데이터가 저장될 class 이름을 지정합니다. > `qks_rook_ceph_storage_devices` 설정을 참고합니다. **`qks_rook_ceph_object_pool_replication_size`** S3 (오브젝트 스토리지) 데이터 복제본 개수를 지정합니다. 운영 데이터의 안정성을 위해 `최소 2` 또는 `권장 3` 입니다. #### QKS Storage Ceph 설정 (NFS Ganesha) NFS Ganesha는 NFS 데이터를 Ceph RADOS 오브젝트로 저장하는 유저스페이스 NFS 서버입니다. 공유 파일스스템 목적이라면 CEPHFS (공유 파일스스템) 사용을 권장합니다. **`qks_rook_ceph_ganesha_enabled`** (true / **false**)) NFS Ganesha 구성여부를 설정합니다. **`qks_rook_ceph_ganesha_failuredomain`**: host # host / osd (**host** / osd) 데이터 복제본이 host를 기준으로 분산 저장될지, osd를 기준으로 분산 저장될지를 설정합니다. 안정성을 위해 "`host`"가 권장됩니다. **`qks_rook_ceph_ganesha_instances`** NFS Ganesha 서버의 인스턴스 개수를 지정합니다. **`qks_rook_ceph_ganesha_pool_name`** NFS Ganesha 데이터가 저장될 POOL 이름을 지정합니다. **`qks_rook_ceph_ganesha_pool_replication_size`** NFS Ganesha 데이터 복제본 개수를 지정합니다. 운영 데이터의 안정성을 위해 `최소 2` 또는 `권장 3` 입니다. **`qks_rook_ceph_ganesha_pool_namespace`** NFS Ganesha 설정이 저장될 RADOS 네임스페이스를 지정합니다. 기본값은 "`conf-ganesha`" 입니다. **`qks_rook_ceph_ganesha_export_path`** NFS Ganesha가 NFS 클라이언트에 제공할 export 경로를 설정합니다. ### QKS Storage Ceph 스토리지 클래스 설정에 따라 다음과 같은 Kubernetes Storage Class 가 생성됩니다. 용도에 맞게 PVC 생성시 선택합니다. - qks-ceph-block - 블럭 디바이스를 위한 스토리지 클래스 - qks-ceph-cephfs - 공유 파일시스템을 위한 스토리지 클래스 ### QKS Storage Ceph 사용 모니터링을 위한 웹 인터페이스는 Ingress Controller 를 통해 도메인으로 접근합니다. 지정한 도메인이 DNS서버를 통해 Lookup 되지 않는 가상 도메인 (Unqualified Domain) 일 경우, 사용하는 운영체제의 추가 설정이 필요합니다. | 운영체제 | 파일위치 | | -------- | ------------------------------------- | | Linux | /etc/hosts | | MacOS | /private/etc/hosts | | Windows | C:\Windows\System32\drivers\etc\hosts | 아래의 형식으로 가상 도메인을 설정합니다. ``` # IP Address Domain Name xxx.xxx.xxx.xxx ceph.qks.io ``` > `IP Address` 는 Load Balancer 의 IP 또는 VIP를 설정하고, Domain Name 은 `qks_rook_ceph_admin_fqdn` 에 지정한 가상 도메인을 설정합니다. ## QKS NFS Provisioner Kubernetes CSI (Container Storage Interface) 표준으로 NFS 서버에 대한 동적 볼륨할당 (Dynaic Provisioning) 및 관리가 가능한 프로비저너를 설정합니다. ```yaml # QKS NFS Provisioner qks_nfs_provisioner_enabled: true qks_nfs_provisioner_release: qks-nfs-provisioner qks_nfs_provisioner_version: 4.0.14 qks_nfs_provisioner_namespace: "{{ qks_system_namespace }}" qks_nfs_provisioner_server: "{{ hostvars[groups['qks-nfs-server'][0]]['private_ip'] }}" qks_nfs_provisioner_path: /nfs/k8s qks_nfs_provisioner_replicas: 2 qks_nfs_provisioner_storageclass_name: qks-nfs qks_nfs_provisioner_storageclass_reclaimpolicy: Retain qks_nfs_provisioner_mount_on_masters: false ``` ### QKS NFS Provisioner 설정 **`qks_nfs_provisioner_enabled`** NFS Provisioner 구성여부를 설정합니다 **`qks_nfs_provisioner_release`** Helm 을 통해 표시될 릴리즈 이름을 설정합니다. **`qks_nfs_provisioner_version`** Helm 차트 버전을 설정합니다. **`qks_nfs_provisioner_namespace`** NFS Provisioner 서비스가 배포될 네임스페이스를 지정합니다. 기본값은 "`qks-system`" 입니다 **`qks_nfs_provisioner_server`** NFS 서버의 도메인 또는 주소를 지정합니다. **`qks_nfs_provisioner_path`** NFS 서버에서 Export 설정된 경로를 지정합니다. > "`/export_path_of_nfs_server/subdir`" 포맷으로 subdir 을 지정하려면, NFS 서버상에 `반드시 해당 디렉토리가 존재`해야 합니다. > `showmount -e 서버주소` 명령으로 서버에 설정된 Export 경로를 확인할 수 있습니다. **`qks_nfs_provisioner_replicas`** NFS Provisioner의 복제본 개수를 설정합니다. 고가용성을 위해서는 `최소 2 이상`을 권장합니다. **`qks_nfs_provisioner_storageclass_name`** Kubernetes CSI (Container Storage Interfac)로 제공될 StorageClass 이름을 설정합니다. 기본값은 "`qks-nfs`" 입니다. **`qks_nfs_provisioner_storageclass_reclaimpolicy`** (**Retain** / Delete) Kubernetes CSI (Container Storage Interfac)로 제공될 StorageClass의 Reclaim Policy를 설정합니다. 기본값은 "`Retain`" 입니다. > 참고: [Kubernetes Persistent Volume - Reclaiming](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#reclaiming) **`qks_nfs_provisioner_mount_on_masters`** (true / **false**) NFS 서버의 export 경로를 Kubernetes Master 노드에 자동 마운트 여부를 설정합니다. 기본값은 "`false`" 이고 기본값 사용을 권장합니다. ## QKS Monitoring Kubernetes 리소스 사용 모니터링을 제공합니다. Kubernetes 모니터링의 표준인 오픈소스 Prometheus 입니다. 동적으로 구성가능한 컨트롤러가 포함된 Prometheus Operator 버전을 사용합니다. ```yaml # QKS Prometheus qks_monitoring_enabled: true qks_monitoring_release: qks-monitor qks_monitoring_version: 18.0.1 qks_monitoring_namespace: qks-monitor qks_monitoring_prometheus_fqdn: pc.qks.io qks_monitoring_prometheus_retention: 4w qks_monitoring_prometheus_storage_class: qks-ceph-cephfs qks_monitoring_prometheus_storage_mode: ReadWriteMany # ReadWriteMany / ReadWriteOnce qks_monitoring_prometheus_storage_size: 50Gi qks_monitoring_alertmanager_fqdn: pa.qks.io qks_monitoring_alertmanager_retention: 120h qks_monitoring_alertmanager_storage_class: qks-ceph-cephfs qks_monitoring_alertmanager_storage_mode: ReadWriteMany # ReadWriteMany / ReadWriteOnce qks_monitoring_alertmanager_storage_size: 50Gi qks_monitoring_grafana_fqdn: pm.qks.io qks_monitoring_grafana_pass: QKSk8s qks_monitoring_grafana_storage_class: qks-ceph-cephfs qks_monitoring_grafana_storage_mode: ReadWriteMany # ReadWriteMany / ReadWriteOnce qks_monitoring_grafana_storage_size: 1Gi ``` ### QKS Monitoring 설정 **`qks_monitoring_enabled`** (**true** / false) Prometheus Operator 구성여부를 설정합니다. **`qks_monitoring_release`** Helm 을 통해 표시될 릴리즈 이름을 설정합니다. **`qks_monitoring_version`** Helm 차트 버전을 설정합니다. **`qks_monitoring_namespace`** 모니터링 서비스가 배포될 네임스페이스를 지정합니다. 기본값은 "`qks-monitor`" 입니다. **`qks_monitoring_prometheus_fqdn`** Prometheus 의 메트릭스 데이터를 조회하고, PromQL 을 테스트할 수 있는 콘솔의 도메인을 지정합니다. **`qks_monitoring_prometheus_retention`** Prometheus에 저장되는 메트릭스 데이터의 보존기간을 설정합니다. 예) 120h, 7d, 4w, 1m, 1y **`qks_monitoring_prometheus_storage_class`** Prometheus가 사용할 StorageClass를 지정합니다. **`qks_monitoring_prometheus_storage_mode`** Prometheus가 사용할 스토리지의 모드를 설정합니다. > 공유 파일시스템 (qks-nfs, qks-ceph-ceph)은 ReadWriteMany, 블럭 디바이스 (qks-ceph-block)은 ReadWriteOnce를 지원합니다. **`qks_monitoring_prometheus_storage_size`** Prometheus가 사용할 스토리지의 사이즈를 설정합니다. **`qks_monitoring_alertmanager_fqdn`**: pa.qks.io AlertManager 접근을 위한 도메인을 설정합니다. > 지정한 도메인으로 Kubernetes Ingress가 설정됩니다. **`qks_monitoring_alertmanager_retention`** AlertManager에 저장되는 알람 데이터의 보존기간을 설정합니다. 예) 120h, 7d, 4w, 1m, 1y **`qks_monitoring_alertmanager_storage_class`** AlertManager가 사용할 StorageClass를 지정합니다. **`qks_monitoring_alertmanager_storage_mode`** AlertManager가 사용할 스토리지의 모드를 설정합니다. > 공유 파일시스템 (qks-nfs, qks-ceph-ceph)은 ReadWriteMany, 블럭 디바이스 (qks-ceph-block)은 ReadWriteOnce를 지원합니다. **`qks_monitoring_alertmanager_storage_size`** AlertManager가 사용할 스토리지의 사이즈를 설정합니다. **`qks_monitoring_grafana_fqdn`** Grafana 접근을 위한 도메인을 설정합니다. **`qks_monitoring_grafana_pass`** > 지정한 도메인으로 Kubernetes Ingress가 설정됩니다. Grafana 접근을 위한 패스워드를 지정합니다. 기본 사용자명은 "`admin`" 입니다. **`qks_monitoring_grafana_storage_class`** Grafana가 사용할 StorageClass를 지정합니다. **`qks_monitoring_grafana_storage_mode`** Grafana가 사용할 스토리지의 모드를 설정합니다. > 공유 파일시스템 (qks-nfs, qks-ceph-ceph)은 ReadWriteMany, 블럭 디바이스 (qks-ceph-block)은 ReadWriteOnce를 지원합니다. **`qks_monitoring_grafana_storage_size`** Grafana가 사용할 스토리지의 사이즈를 설정합니다. ### QKS Monitoring 사용 모니터링을 위한 웹 인터페이스는 Ingress Controller 를 통해 도메인으로 접근합니다. 지정한 도메인이 DNS서버를 통해 Lookup 되지 않는 가상 도메인 (Unqualified Domain) 일 경우, 사용하는 운영체제의 추가 설정이 필요합니다. | 운영체제 | 파일위치 | | -------- | ------------------------------------- | | Linux | /etc/hosts | | MacOS | /private/etc/hosts | | Windows | C:\Windows\System32\drivers\etc\hosts | 아래의 형식으로 가상 도메인을 설정합니다. ``` # IP Address Domain Name xxx.xxx.xxx.xxx pc.qks.io xxx.xxx.xxx.xxx pm.qks.io xxx.xxx.xxx.xxx pa.qks.io ``` > `IP Address` 는 Load Balancer 의 IP 또는 Virtual IP를 설정하고, Domain Name 은 `qks_monitoring_prometheus_fqdn`, `qks_monitoring_alertmanager_fqdn`, 그리고 `qks_monitoring_grafana_fqdn` 에 지정한 가상 도메인을 설정합니다. ## QKS Container Registry 컨테이너 이미지를 저장할 로컬 레지스트리 서버를 구성합니다. Air-gapped 환경에서 docker.io / gcr.io / quay.io 을 에뮬레이션하는 미러링 레지스트리입니다. QKS Kubernetes 운영을 위한 이미지들만 미러링하며, 사용자 이미지는 `qks-harbor`를 사용합니다. ```yaml # QKS Docker Registry qks_registry_enabled: true qks_registry_release: qks-registry qks_registry_version: 1.9.6 qks_registry_namespace: "{{ qks_system_namespace }}" qks_registry_replicas: 2 qks_registry_storage_class: qks-ceph-cephfs qks_registry_storage_mode: ReadWriteMany qks_registry_storage_size: 50Gi qks_registry_fqdn: images.qks.io ``` ### QKS Container Registry 설정 **`qks_registry_enabled`** (**true** / false) Container Registry 구성여부를 설정합니다. **`qks_registry_release`** Helm 을 통해 표시될 릴리즈 이름을 설정합니다. **`qks_registry_version`** Helm 차트 버전을 설정합니다. **`qks_registry_namespace`** Container Registry 서비스가 배포될 네임스페이스를 지정합니다. 기본값은 "`qks-system`" 입니다. **`qks_registry_replicas`** Container Registry 서비스의 복제본 개수를 지정합니다. 고갸용성을 위해 "`최소 2 이상`"을 권장합니다. **`qks_registry_storage_class`** Container Registry 서비스가 사용할 StorageClass를 지정합니다. **`qks_registry_storage_mode`** Container Registry 서비스가 사용할 스토리지의 모드를 설정합니다. > 공유 파일시스템 (qks-nfs, qks-ceph-ceph)은 ReadWriteMany, 블럭 디바이스 (qks-ceph-block)은 ReadWriteOnce를 지원합니다. **`qks_registry_storage_size`** Container Registry 서비스가 사용할 스토리지의 사이즈를 설정합니다. "`최소 50Gi 이상`"을 권장합니다. **`qks_registry_fqdn`** Container Registry 서비스의 접근하기 위한 도메인을 지정합니다. > Ingress Controller를 통해 라우팅되므로 반드시 도메인을 지정해야합니다. (IP주소 불가) ### QKS Container Registry 사용 로컬 레지스트리는 자체 서명 인증서 (Self-signed Certificate)를 사용하며, 정상적인 사용을 위해서는 클라이언트 사이드에서 Insecure Registry로 설정해야 합니다. Docker의 경우 다음과 같이 설정합니다. `/etc/docker/daemon.json` ```json { "insecure-registries" : ["image.qks.io"] } ``` Insecure Registry 설정시 클라이언트는 다음과 같이 작동합니다. - HTTPS로 연결시도 - HTTPS 연결은 가능하나, 인증서가 유효하지 않다면 무시하고 연결 - HTTPS 연결이 불가하면, HTTP로 연결 > 참고: [Insecure Registry](https://docs.docker.com/registry/insecure/#deploy-a-plain-http-registry) > > containerd, cri-o, podman 등은 해당 매뉴얼을 참고합니다. ## QKS Chart Registry Helm 차트를 저장할 로컬 레지스트리 서버를 구성합니다. > 보다 원할한 서비스를 위해 `Harbor`로 교체 예정 ```yaml # QKS Chartmuseum qks_chartmuseum_enabled: true qks_chartmuseum_release: "qks-chartmuseum" qks_chartmuseum_version: "2.13.2" qks_chartmuseum_namespace: "qks-system" qks_chartmuseum_fqdn: "charts.qks.io" qks_chartmuseum_name: "qks-repo" qks_chartmuseum_user: "dpcore" qks_chartmuseum_pass: "dpcore" ``` ### QKS Chart Registry 설정 **`qks_chartmuseum_enabled`** (**true** / false) Chart Registry 구성여부를 설정합니다. **`qks_chartmuseum_release`** Helm 을 통해 표시될 릴리즈 이름을 설정합니다. **`qks_chartmuseum_version`** Helm 차트 버전을 설정합니다. 오프라인 모드에서는 "`2.13.2`"만 선택 가능합니다. **`qks_chartmuseum_namespace`** Chart Registry 서비스가 배포될 네임스페이스를 지정합니다. 기본값은 "`qks-system`" 입니다. **`qks_chartmuseum_fqdn`** Chart Registry 서비스의 접근하기 위한 도메인을 지정합니다. > Ingress Controller를 통해 라우팅되므로 반드시 도메인을 지정해야합니다. (IP주소 불가) **`qks_chartmuseum_name`** QKS 에서 사용되는 차트가 저장될 저장소 이름입니다. **`qks_chartmuseum_user`** CHart Registry 서비스의 사용자명을 지정합니다. **`qks_chartmuseum_pass`** Chart Registry 서비스의 패스워드를 지정합니다. ### QKS Chart Registry 사용 차트 저장소를 접근하기 위해서는 다음과 같이 설정합니다. - 저장소 추가 ```bash helm repo add qks-repo http://charts.qks.io ``` - 차트 업로드 ```bash helm push <차트파일> <저장소 이름> helm push mychart-0.0.1.tgz qks-repo ``` > 참고: [Helm Push Plugin](https://github.com/chartmuseum/helm-push) ## QKS Package Repository 네트워크가 단절된 Air-gapped 환경에서 배포 시 필요한 운영체제 패키지를 제공하는 저장소를 구성합니다. 운영체제 설치 이미지 및 부가 패키지를 포함합니다. 지원하는 운영체는 다음과 같습니다. | 운영체제 | 버전 | | -------- | :-----------: | | RHEL | 8.x / 9.x | | Ubuntu | 20.04 / 22.04 | > 참고: `Ubuntu` 저장소는 구현 중입니다. 인벤토리 설정파일의 `[qks-pkg-server]` 섹션에 나열한 호스트들이 Ceph 스토리지 서버로 구성됩니다. > 다수의 호스트를 나열하면 HA로 구성됩니다. ```yaml # QKS Package Repository qks_package_repository_enabled: true qks_package_repository_path: "/repo" qks_package_repository_port: 1234 ``` ### QKS Package Repository 설정 **`qks_package_repository_enabled`** (true / **false**) Package Repository 구성여부를 설정합니다. > qks_offline_enabled 설정이 "`true`"일 경우도 패키지 저장소가 구성됩니다. **`qks_package_repository_path`** 운영체제 설치 이미지 및 부가 패키지들이 보관될 디렉토리 경로를 지정합니다. > `15 GB` 이상의 가용공간이 필요합니다. **`qks_package_repository_port`** Package Repository 서버가 사용할 포트를 지정합니다. 기본값은 "`1234`"이며, 이미 사용중인 프로세스가 있는지 아래의 명령으로 확인하고, 필요시 적절한 포트로 변경합니다. ```bash netstate -neopa | grep " LISTEN " | grep 1234 ``` ## QKS K8S Tools QKS Kubernetes 를 편리하게 사용할 수 있는 유틸리티 셋입니다. > K8S Master 노드에 `root` 유저로 로그인시 출력됩니다. ~/.kube/config 파일의 내용을 참고 및 변경합니다. ```yaml # QKS K8S Tools qks_tools_enabled: true ``` **`qks_tools_enabled`** (**true** / false) QKS Kubernetes Tools 의 사용여부를 설정합니다. ### QKS K8S Tools 프롬프트 현재 작업중인 사용자명, 호스트명, 컨텍스트, 네임스페이스 등을 프롬프트에 직관적으로 표시합니다. ```{image} ../images/tools.png ``` > 참고: [A Powerline style prompt for your shell](https://github.com/justjanne/powerline-go) ### QKS K8S Tools 컨텍스트 & 네임스페이스 다수의 클러스터 사이의 컨텍스트를 변경하거나, 클러스터의 네임스페이스를 변경합니다. - kubectx ```bash USAGE: kubectx : 등록된 컨텍스트 목록 kubectx : 컨텍스트로 변경 kubectx - : 이전 컨텍스트로 변경 kubectx -c, --current : 현재 컨텍스트명 표시 kubectx = : 컨텍스트명을 에서 으로 변경 kubectx =. : 현재 컨텍스트명을 으로 변경 kubectx -d [] : 컨텍스트를 삭제 ``` - kubens ```bash USAGE: kubens : 현재 컨텍스트의 네임스페이스 표시 kubens : 네임스페이스로 변경 kubens - : 이전 네임스페이스로 변경 kubens -c, --current : 현재 네임스페이스 표시 ``` > 참고: [kubectx + kubens: Power tools for kubectl](https://github.com/ahmetb/kubectx)