如何在Minikube中運行gRPC服務

如何在Minikube中運行gRPC服務

本文通過一個具體的例子介紹瞭如何在Minikube中運行gRPC服務。 

本文使用了Ubuntu 16.04.3 LTS操作系統。

0.1 安裝並配置Docker、Minikube和kubectl。注意:Minicube的安裝和運行需要連接Google的網站

wget -qO- https://get.docker.com | sh
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl \
    -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
chmod +x *
mv * /usr/local/bin/
minikube start --vm-driver=none

0.2 在minikube中啓動一個gRPC的服務

kubectl run \
--image=caiofilipini/grpc-weather:master grpc-weather \
--port=9000  \
--env="OPEN_WEATHER_MAP_API_KEY=<your api key>" \
--env="WEATHER_UNDERGROUND_API_KEY=<your api key>"

在Kubernetes集羣內部訪問

1.1 暴露爲服務,默認爲ClusterIP類型

kubectl expose deployment grpc-weather --port=9000 --name=grpc-weather

用kubectl get svc命令查看服務的集羣IP,例如

NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
grpc-weather   ClusterIP   10.97.231.175   <none>        9000/TCP   48s

1.2 在Minikube中啓動一個客戶端服務Pod

echo '
apiVersion: v1               
kind: Pod                    
metadata:
  name: grpc-weather-client         
spec:
  containers:
  - image: caiofilipini/grpc-weather:master    
    name: grpc-weather-client
    command: ["sleep", "9999999"]
' | kubectl create -f -

1.3 連接到客戶端服務容器

kubectl exec -it grpc-weather-client bash

1.4 運行測試,注意將以下命令中的IP換爲在1.1中查到的CLUSTER-IP

make build-client
./weath_client/client --s 10.97.231.175 --p 9000 Santiago

顯示類似以下的信息,則表示gRPC服務調用成功

2018/03/06 02:39:12 It's currently 22.5°C, clear sky in Santiago
在Kubernetes集羣外訪問

2.1 暴露爲一個NodePort類型的服務,以下命令將服務暴露於30123端口

echo "
apiVersion: v1
kind: Service
metadata:
  name: grpc-weather-np
spec:
  type: NodePort    
  ports:
  - port: 80        
    targetPort: 9000
    nodePort: 30123 
  selector:
    app: weather
" | kubectl create -f -

使用minikube ip命令查看Node IP,本例中爲172.31.29.181

2.2 使用Docker在Kubernets之外運行一個客戶端

docker run \
  --rm \
  -it \
  --name weather_service \
  --entrypoint bash \
  --net=host \
  caiofilipini/grpc-weather:master

2.3 運行測試,注意將以下命令中的IP換爲在2.1中查到的Node Ip

make build-client
./weather_client/client --s 172.31.29.181 --p 30123 Santiago

顯示類似以下的信息,則表示gRPC服務調用成功

2018/03/06 02:39:12 It's currently 22.5°C, clear sky in Santiago

進一步的思考

3.1 如圖所示,使用NodePort暴露服務時,外部客戶端需要得知所有Node的IP,或者需要負載均衡器的支持,纔可以達到高可用的效果。是否有動態的方法支持高可用性?


3.2 如何調用Kubernetes集羣外部的gRPC服務?

參考文章

4.1 Add example using grpc and http2 (https://github.com/kubernetes/ingress-nginx/issues/39)

4.2 Kubernetes in Action (https://www.safaribooksonline.com/library/view/kubernetes-in-action/9781617293726/)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章