04 Доступ к кластеру Doris
Kubernetes использует Service для предоставления VIP и балансировки нагрузки. Service поддерживает три режима предоставления доступа извне: ClusterIP, NodePort и LoadBalancer.
Режим ClusterIP
По умолчанию Doris в Kubernetes использует режим доступа ClusterIP. Режим доступа ClusterIP предоставляет внутренний адрес в кластере Kubernetes, который служит адресом сервиса внутри Kubernetes.
После первоначального развёртывания вы можете подключиться к Doris по протоколу MySQL под пользователем root без пароля следующим образом.
Шаг 1: Получение Service
После развёртывания кластера выполните следующую команду, чтобы просмотреть Service, предоставляемые Doris Operator:
kubectl -n doris get svc
Результат будет следующим:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
doriscluster-sample-be-internal ClusterIP None <none> 9050/TCP 9m
doriscluster-sample-be-service ClusterIP 10.1.68.128 <none> 9060/TCP,8040/TCP,9050/TCP,8060/TCP 9m
doriscluster-sample-fe-internal ClusterIP None <none> 9030/TCP 14m
doriscluster-sample-fe-service ClusterIP 10.1.118.16 <none> 8030/TCP,9020/TCP,9030/TCP,9010/TCP 14m
В приведённом выше выводе и у FE, и у BE есть Service двух типов с суффиксами internal и service соответственно:
-
Service с суффиксом
internalиспользуются только для внутреннего взаимодействия Doris, например для проверки работоспособности и обмена данными, и недоступны извне. -
Service с суффиксом
serviceиспользуются для доступа к сервисам кластера.
Шаг 2: Подключение к Doris
Режим ClusterIP можно использовать только внутри Kubernetes. Выполните следующую команду, чтобы создать в текущем кластере Kubernetes Pod с клиентом MySQL:
kubectl run mysql-client --image=mysql:5.7 -it --rm --restart=Never --namespace=doris -- /bin/bash
Внутри контейнера вы можете подключиться к кластеру Doris, указав имя Service с суффиксом service:
mysql -uroot -P9030 -hdoriscluster-sample-fe-service
Режим NodePort
После настройки режима доступа NodePort в разделе конфигурации доступа DorisCluster выполните следующие действия, чтобы подключиться к FE по протоколу MySQL под пользователем root без пароля.
Шаг 1: Получение Service
После развёртывания кластера выполните следующую команду, чтобы просмотреть Service:
kubectl get service
Результат будет следующим:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 169d
doriscluster-sample-fe-internal ClusterIP None <none> 9030/TCP 2d
doriscluster-sample-fe-service NodePort 10.152.183.58 <none> 8030:31041/TCP,9020:30783/TCP,9030:31545/TCP,9010:31610/TCP 2d
doriscluster-sample-be-internal ClusterIP None <none> 9050/TCP 2d
doriscluster-sample-be-service NodePort 10.152.183.244 <none> 9060:30940/TCP,8040:32713/TCP,9050:30621/TCP,8060:30926/TCP 2d
Шаг 2: Подключение к Doris
Рассмотрим подключение через MySQL. По умолчанию Doris использует порт запросов (Query Port) 9030. В приведённом выше примере порт 9030 сопоставлен с локальным портом 31545. Для доступа к кластеру Doris необходимо получить IP-адрес узла кластера. Выполните следующую команду, чтобы узнать его:
kubectl get nodes -owide
Результат будет следующим:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
r60 Ready control-plane 14d v1.28.2 192.168.88.60 <none> CentOS Stream 8 4.18.0-294.el8.x86_64 containerd://1.6.22
r61 Ready <none> 14d v1.28.2 192.168.88.61 <none> CentOS Stream 8 4.18.0-294.el8.x86_64 containerd://1.6.22
r62 Ready <none> 14d v1.28.2 192.168.88.62 <none> CentOS Stream 8 4.18.0-294.el8.x86_64 containerd://1.6.22
r63 Ready <none> 14d v1.28.2 192.168.88.63 <none> CentOS Stream 8 4.18.0-294.el8.x86_64 containerd://1.6.22
В режиме NodePort вы можете обращаться к сервисам внутри кластера Kubernetes через IP-адрес любого узла и сопоставленный порт хоста. В этом примере доступны IP-адреса узлов 192.168.88.61, 192.168.88.62 и 192.168.88.63. Следующий пример показывает, как подключиться к Doris через узел 192.168.88.62 и порт хоста 31545, сопоставленный с query port:
mysql -h 192.168.88.62 -P 31545 -uroot
Режим LoadBalancer
В публичном облаке после настройки режима доступа LoadBalancer в разделе конфигурации доступа DorisCluster выполните следующие действия, чтобы подключиться к FE по протоколу MySQL под пользователем root без пароля.
Шаг 1: Получение Service
После развёртывания кластера выполните следующую команду, чтобы просмотреть Service, который можно использовать для доступа к Doris:
kubectl get service
Результат будет следующим:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 169d
doriscluster-sample-fe-internal ClusterIP None <none> 9030/TCP 2d
doriscluster-sample-fe-service LoadBalancer 10.152.183.58 ac4828493dgrftb884g67wg4tb68gyut-1137856348.us-east-1.elb.amazonaws.com 8030:31041/TCP,9020:30783/TCP,9030:31545/TCP,9010:31610/TCP 2d
doriscluster-sample-be-internal ClusterIP None <none> 9050/TCP 2d
doriscluster-sample-be-service LoadBalancer 10.152.183.244 ac4828493dgrftb884g67wg4tb68gyut-1137823345.us-east-1.elb.amazonaws.com 9060:30940/TCP,8040:32713/TCP,9050:30621/TCP,8060:30926/TCP 2d
Шаг 2: Подключение к Doris
Рассмотрим подключение через MySQL:
mysql -h ac4828493dgrftb884g67wg4tb68gyut-1137856348.us-east-1.elb.amazonaws.com -P 31545 -uroot
Использование StreamLoad для доступа к Doris, развёрнутому в Kubernetes
Doris поддерживает импорт данных в режиме StreamLoad. Когда клиент и кластер Doris находятся в одной локальной сети, клиент может напрямую использовать адрес FE в качестве адреса запроса. Сервис FE получает запрос и возвращает код состояния HTTP 301 вместе с доступным адресом BE, указывая клиенту отправить запрос на импорт данных по этому адресу BE. Кластер Doris, развёрнутый в Kubernetes, использует для взаимодействия адреса, доступные только внутри Kubernetes. Если для StreamLoad настроен доступный адрес FE, адрес BE, возвращаемый FE через механизм перенаправления 301, доступен только внутри Kubernetes, из-за чего импорт данных из клиентов за пределами Kubernetes завершается ошибкой.
Когда клиент за пределами Kubernetes использует StreamLoad для импорта данных в кластер Doris, развёрнутый в Kubernetes, в качестве адреса импорта StreamLoad необходимо настроить адрес BE, доступный извне.
Настройка внешнего доступа к Service для BE
Настройте Service для BE так, чтобы он был доступен извне кластера Kubernetes, согласно инструкциям для NodePort или LoadBalancer. Затем обновите ресурс DorisCluster, используемый для развёртывания кластера Doris.
Настройка прокси-адреса BE
Используя способы получения адресов доступа, описанные в разделах Режим NodePort или Режим LoadBalancer, получите адрес, доступный извне Kubernetes, и соответствующий порт сервиса web_server. Настройте полученные адрес и порт в качестве адреса запроса, используемого StreamLoad для импорта данных.