如何在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=" \
--env="WEATHER_UNDERGROUND_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           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,或者需要负载均衡器的支持,才可以达到高可用的效果。是否有动态的方法支持高可用性?

如何在Minikube中运行gRPC服务_第1张图片

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/)

你可能感兴趣的:(实用技术)