cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: minio-secret # Secret 명
namespace: myspace # Secret이 설치될 Namespace
annotations:
serving.kubeflow.org/s3-endpoint: minio-service.kubeflow:9000 # 설치된 Minio 서비스 endpoint
serving.kubeflow.org/s3-usehttps: "0" # http를 사용하지 않음 (설치된 Minio 설정)
serving.kubeflow.org/s3-verifyssl: "0" # ssy verify 하지 않음 (설치된 Minio 설정)
serving.kubeflow.org/s3-region: us-east-0
type: Opaque
stringData:
AWS_ACCESS_KEY_ID: minio
AWS_SECRET_ACCESS_KEY: minio123
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: kfserving-sa # ServiceAccount 명
namespace: myspace # ServiceAccount가 설치될 Namespace
secrets:
- name: minio-secret # 이 ServiceAccount가 사용할 Secret (위에서 생성한 Secret)
EOF
- minio service 확인 (GCP VM SSH 에서 확인)
- endpoit는 <Namespae>.<Service명>:<Port(내부)>
- Namespae: kubeflow
- Service명: minio-service
- Port(내부): 9000
- endpoit는 <Namespae>.<Service명>:<Port(내부)>
kubectl get svc -A | grep minio
kubeflow minio-service NodePort 10.99.254.139 <none> 9000:32001/TCP
nferenceService 배포
- 터미널에서 아래 실행
(또는 kubectl apply -f covid19-InferenceService.1.2.yaml 실행)
cat << EOF | kubectl apply -f -
apiVersion: serving.kubeflow.org/v1alpha2
kind: InferenceService
metadata:
name: covid-19 # KFServing InferenceService 명
namespace: myspace # KFServing InferenceService가 배포될 Namespace
annotations:
sidecar.istio.io/inject: "false"
spec:
default:
predictor:
serviceAccountName: kfserving-sa # s3:// 레파지토리(Minio)를 사용하기 위해 이 KFServing InferenceService가 사용할 serviceAccount (Step1.에서 생성함)
tensorflow:
storageUri: 's3://model/covid-19/' # 모델을 저장한 경로 s3://<bucket명>/<저장경로>
resources:
limits:
cpu: 100m
memory: 1Gi
requests:
cpu: 100m
memory: 100Mi
EOF
- 진행상화 확인
# kubectl get po -n myspace
STATUS가 'PodInitializing' 이면 대기, 오류인 경우 로그 확인
$ kubectl get inferenceservice -n myspace covid-19
NAME URL READY DEFAULT TRAFFIC CANARY TRAFFIC AGE
covid-19 http://covid-19.kubeflow.example.com/v1/models/covid-19 True 100 125m
InferenceService 테스트 (GCP VM SSH 에서 실행)
- kfserving-ingressgateway를 NodePort로 노출
# kubectl edit svc -n istio-system kfserving-ingressgateway
kubectl edit svc -n istio-system istio-ingressgateway
...
ports:
...
- name: https-tracing
nodePort: 31204
port: 15032
protocol: TCP
targetPort: 15032
- name: tls
nodePort: 30103
port: 15443
protocol: TCP
targetPort: 15443
selector:
app: istio-ingressgateway
kfserving: ingressgateway
sessionAffinity: None
type: NodePort # 변경
...
터미널에서 ./kfserving-test.1.2.sh 실행
또는 아래 구문으로 테스트
MODEL_NAME=covid-19
TEST_JSON="../image_data.json"
# Jupyter Notebook Terminal (K8s 내부)에서 실행 시
INGRESS_HOST=istio-ingressgateway.istio-system
INGRESS_PORT=80
# Host ssh 접속하여 (K8s 외부) 실행 시
# INGRESS_HOST=<VM 외부 IP>
# INGRESS_PORT=32380
SERVICE_HOSTNAME=$(kubectl get inferenceservice -n myspace $MODEL_NAME -o jsonpath='{.status.url}' | cut -d "/" -f 3)
SERVING_URL=http://${INGRESS_HOST}:${INGRESS_PORT}/v1/models/$MODEL_NAME:predict
curl -v -H "Host: ${SERVICE_HOSTNAME}" ${SERVING_URL} -d @${TEST_JSON}