# Kubernetes

***업데이트: Roboflow Enterprise 고객인 경우 다음을 사용하여 Kubernetes 환경에 Roboflow Inference Service를 배포할 수 있습니다*** [***this Helm chart***](https://github.com/roboflow/inference/tree/main/inference/enterprise/helm-chart)***.***

또는 다음은 포드와 서비스를 Kubernetes 클러스터에 배포하기 위한 간단한 Kubernetes 매니페스트입니다.

아래 Kubernetes 매니페스트는 단일 CPU 기반 roboflow infer 포드를 생성하고 여기에 cluster-IP 서비스를 연결하는 간단한 예시를 보여줍니다.

```yaml
# Pod
---
apiVersion: v1
kind: Pod
metadata:
  name: roboflow
  labels:
    app.kubernetes.io/name: roboflow
spec:
  containers:
  - name: roboflow
    image: roboflow/roboflow-inference-server-cpu
    ports:
    - containerPort: 9001
      name: rf-pod-port


# Service
---
apiVersion: v1
kind: Service
metadata:
  name: rf-service
spec:
  type: ClusterIP
  selector:
    app.kubernetes.io/name: roboflow
  ports:
  - name: rf-svc-port
    protocol: TCP
    port: 9001
    targetPort: rf-pod-port
```

(위 예시는 Kubernetes 클러스터가 Docker Hub에서 이미지를 다운로드할 수 있다고 가정합니다)

위의 yaml 블럭을 다음 이름으로 저장하세요 `roboflow.yaml` 그리고 `kubectl` 클러스터의 기본 네임스페이스에 포드와 서비스를 배포하려면 CLI를 사용하세요.

```
kubectl apply -f roboflow.yaml
```

\
서비스(type: ClusterIP)가 생성됩니다; Kubernetes 클러스터 내부에서 다음 URI로 Roboflow inference에 접근할 수 있습니다: `http://rf-service.default.svc:9001`

### 이 예시를 넘어서

Kubernetes는 Roboflow inference 서비스에 여러 고급 기능과 확장을 통합할 수 있는 기능을 제공합니다. 예를 들어 위 예시를 확장하여 다음과 같은 더 고급 사용 사례에 적용할 수 있습니다:

* nodeSelector를 사용하여 포드를 Kubernetes 환경 내의 GPU 머신 노드 풀에 호스팅하고 `roboflow/inference-server:gpu` 매개변수에 대해 입력 이미지를 선택하세요. 예측에는 모델 결과를 선택하세요. 선택적 구성 속성을 사용하여 경계 상자의 색상과 크기를 변경할 수 있습니다.
* Roboflow inference 서비스를 수평으로 자동 확장하는 Kubernetes Deployment를 생성하고 CPU 사용량과 같은 특정 메트릭을 기반으로 자동 확장 트리거를 설정합니다.
* nodePort나 LoadBalancer와 같은 다른 서비스 유형을 사용해 Roboflow inference 서비스를 외부에 제공하기
* Ingress 컨트롤러를 사용해 TLS(HTTPS) 등으로 Roboflow inference를 노출하기
* Roboflow inference 서비스에 모니터링 및 경보 추가하기
* 라이선스 서버 및 오프라인 모드 통합하기
