QKS Kubernetes 컴포넌트

QKS GPU Accelerator

QKS 서비스에서 GPU 가속을 사용하기 위한 설정입니다. 현재는 NVIDIA 하드웨어(GTX / Tesla) 만을 지원합니다.

인벤토리 설정파일의 [qks-nvidia] 섹션에 나열한 호스트들이 GPU 노드로 구성됩니다.

# 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

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 가속 지원을 위한 디바이스 플러그인 이미지 버전을 지정합니다.

qks_accelerator_device_metric_version

GPU 리소스 모니터링을 위한 DCGM Exporter 이미지 버전을 지정합니다.

QKS Ingress Controller

Ingress Controller는 Kubernetes 네트웍 외부에서의 요청을 내부 서비스로 라우팅해주는 Layer 7 Switch 역할을 수행합니다. Nginx 기반의 Reverse Proxy 로 Ingress 리소스의 정의대로 내부 서비스로 라우팅해줍니다. 라우팅 경로는 로드밸런서 > K8S NODEPORT > K8S SERVICE > K8S POD 입니다. 다음과 같은 설치옵션을 제공합니다.

# 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] 섹션에 나열한 호스트들이 로드밸런서 서버로 구성됩니다.

# 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) 이미지의 버전을 지정합니다.

qks_vip_manager_nic

VIP Manager가 사용할 네트워크 인터페이스를 지정합니다.

다수의 네트워크 인터페이스가 있을 경우, 외부로 부터 유입이 가능한 인터페이스를 지정합니다.

qks_load_balancer_enabled

(true / false)

Load Balancer 구성여부를 설정합니다.

qks_load_balancer_version

Load Balancer (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)를 위해 노드 및 컨테이너의 리소스 사용률 정보를 제공하는 메트릭스 서버를 설정합니다.

# 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 사용

아래의 명령으로 노드 및 컨테이너의 상태를 확인할 수 있습니다.

kubectl top nodes
kubectl top pods 

QKS Storage NFS

별도의 스토리지가 없을 경우 사용할 수 있는 NFS 서버를 제공합니다. NFS 특성상 HA 구성이 불가하여 가용성 부족합니다. 하드웨어 스토리지가 없을 경우만 사용하고, 최적을 성능을 위해서는 하드웨어 스토리지 사용을 권장합니다.

인벤토리 설정파일의 [qks-nfs-server] 섹션에 나열한 호스트들이 NFS 서버로 구성됩니다.

NFS 특성상 HA 구성이 불가하며, 반드시 하나의 호스트만 지정해야 합니다.

# 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로 사용

# 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” 입니다.

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” 입니다.

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) 및 관리가 가능한 프로비저너를 설정합니다.

# 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” 입니다.

qks_nfs_provisioner_mount_on_masters

(true / false)

NFS 서버의 export 경로를 Kubernetes Master 노드에 자동 마운트 여부를 설정합니다. 기본값은 “false” 이고 기본값 사용을 권장합니다.

QKS Monitoring

Kubernetes 리소스 사용 모니터링을 제공합니다. Kubernetes 모니터링의 표준인 오픈소스 Prometheus 입니다. 동적으로 구성가능한 컨트롤러가 포함된 Prometheus Operator 버전을 사용합니다.

# 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를 사용합니다.

# 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

{
  "insecure-registries" : ["image.qks.io"]
}

Insecure Registry 설정시 클라이언트는 다음과 같이 작동합니다.

  • HTTPS로 연결시도

  • HTTPS 연결은 가능하나, 인증서가 유효하지 않다면 무시하고 연결

  • HTTPS 연결이 불가하면, HTTP로 연결

참고: Insecure Registry

containerd, cri-o, podman 등은 해당 매뉴얼을 참고합니다.

QKS Chart Registry

Helm 차트를 저장할 로컬 레지스트리 서버를 구성합니다.

보다 원할한 서비스를 위해 Harbor로 교체 예정

# 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 사용

차트 저장소를 접근하기 위해서는 다음과 같이 설정합니다.

  • 저장소 추가

helm repo add qks-repo http://charts.qks.io
  • 차트 업로드

helm push <차트파일> <저장소 이름>
helm push mychart-0.0.1.tgz qks-repo

QKS Package Repository

네트워크가 단절된 Air-gapped 환경에서 배포 시 필요한 운영체제 패키지를 제공하는 저장소를 구성합니다. 운영체제 설치 이미지 및 부가 패키지를 포함합니다. 지원하는 운영체는 다음과 같습니다.

운영체제 버전
RHEL 8.x / 9.x
Ubuntu 20.04 / 22.04

참고: Ubuntu 저장소는 구현 중입니다.

인벤토리 설정파일의 [qks-pkg-server] 섹션에 나열한 호스트들이 Ceph 스토리지 서버로 구성됩니다.

다수의 호스트를 나열하면 HA로 구성됩니다.

# 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”이며, 이미 사용중인 프로세스가 있는지 아래의 명령으로 확인하고, 필요시 적절한 포트로 변경합니다.

netstate -neopa | grep " LISTEN " | grep 1234

QKS K8S Tools

QKS Kubernetes 를 편리하게 사용할 수 있는 유틸리티 셋입니다.

K8S Master 노드에 root 유저로 로그인시 출력됩니다. ~/.kube/config 파일의 내용을 참고 및 변경합니다.

# QKS K8S Tools
qks_tools_enabled: true

qks_tools_enabled

(true / false)

QKS Kubernetes Tools 의 사용여부를 설정합니다.

QKS K8S Tools 프롬프트

현재 작업중인 사용자명, 호스트명, 컨텍스트, 네임스페이스 등을 프롬프트에 직관적으로 표시합니다.

../_images/tools.png

QKS K8S Tools 컨텍스트 & 네임스페이스

다수의 클러스터 사이의 컨텍스트를 변경하거나, 클러스터의 네임스페이스를 변경합니다.

  • kubectx

USAGE:
  kubectx                       : 등록된 컨텍스트 목록
  kubectx <NAME>                : <NAME> 컨텍스트로 변경
  kubectx -                     : 이전 컨텍스트로 변경
  kubectx -c, --current         : 현재 컨텍스트명 표시
  kubectx <NEW_NAME>=<NAME>     : 컨텍스트명을 <NAME> 에서 <NEW_NAME> 으로 변경
  kubectx <NEW_NAME>=.          : 현재 컨텍스트명을  <NEW_NAME> 으로 변경
  kubectx -d <NAME> [<NAME...>] : <NAME> 컨텍스트를 삭제
  • kubens

USAGE:
  kubens                    : 현재 컨텍스트의 네임스페이스 표시
  kubens <NAME>             : <NAME> 네임스페이스로 변경
  kubens -                  : 이전 네임스페이스로 변경
  kubens -c, --current      : 현재 네임스페이스 표시