在VMware中安装Ubuntu 20.04并部署gRPC开发环境
本指南详细介绍如何在VMware虚拟机中安装Ubuntu 20.04,并配置gRPC开发环境,包括Envoy、Prometheus、Grafana等工具。请按照以下步骤进行操作。
1. 下载并安装VMware和Ubuntu 20.04 ISO
下载VMware:
- 前往 VMware 官方网站 下载并安装VMware Workstation Player或VMware Workstation Pro。
下载Ubuntu 20.04 LTS ISO:
2. 在VMware中创建并安装Ubuntu 20.04
- 打开VMware,选择“创建新的虚拟机(Create a New Virtual Machine)”。
- 选择安装方式:
- 选择“典型(Typical)”安装。
- 选择你刚下载的Ubuntu 20.04 LTS的ISO镜像文件,点击“下一步”。
- 配置虚拟机:
- 设置虚拟机名称(如
Ubuntu-20.04
)和虚拟机的存储路径。
- 为虚拟机分配资源,建议至少2个CPU核心、4GB内存、20GB硬盘空间。
- 选择“完成”以开始虚拟机的创建。
- 安装Ubuntu:
- 启动虚拟机后,按照屏幕上的提示完成Ubuntu 20.04的安装。
- 设置你的用户名和密码,安装成功后重启虚拟机。
3. 配置Ubuntu开发环境
3.1. 更新系统并安装基础工具
在Ubuntu虚拟机中,打开终端并运行以下命令来更新系统并安装基础开发工具:
sudo apt update
sudo apt upgrade -y
sudo apt install build-essential cmake git
3.2. 安装gRPC
- 克隆gRPC代码库并安装:
git clone -b v1.30.0 https://github.com/grpc/grpc
cd grpc
git submodule update --init
make -j$(nproc)
sudo make install
- 这将克隆并构建gRPC以及它的依赖项,包括Protobuf。
3.3. 安装Google Test
- 克隆并安装Google Test:
git clone https://github.com/google/googletest.git
cd googletest
mkdir build
cd build
cmake ..
make
sudo make install
Google Test是用于C++代码的单元测试框架,安装完成后可用于后续的单元测试。
3.4. 安装Envoy
- 添加Envoy存储库并安装:
curl -L https://getenvoy.io/gpg | sudo apt-key add -
echo "deb [arch=amd64] https://packages.getenvoy.io/debian focal stable" | sudo tee /etc/apt/sources.list.d/getenvoy.list
sudo apt update
sudo apt install -y getenvoy-envoy
- 验证安装:
envoy --version
3.5. 安装Prometheus
- 下载并安装Prometheus:
wget https://github.com/prometheus/prometheus/releases/download/v2.31.1/prometheus-2.31.1.linux-amd64.tar.gz
tar xvfz prometheus-2.31.1.linux-amd64.tar.gz
cd prometheus-2.31.1.linux-amd64
./prometheus --config.file=prometheus.yml
- Prometheus现在已经启动并可以在
http://localhost:9090
访问。
3.6. 安装Grafana
- 添加Grafana存储库并安装:
sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana
sudo systemctl enable --now grafana-server
- 访问Grafana:
- 打开浏览器并访问
http://localhost:3000
,默认用户名和密码为admin/admin
。
4. gRPC服务配置
你现在可以在虚拟机中开发并运行gRPC服务,下面是一个简单的gRPC服务配置示例。
4.1. 编写 helloworld.proto
文件
在你的项目目录中创建一个proto
文件,用于定义gRPC服务接口:
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
4.2. 实现gRPC服务
在C++中实现GreeterService
:
#include "helloworld.grpc.pb.h"
#include <grpcpp/grpcpp.h>
class GreeterServiceImpl final : public Greeter::Service {
public:
grpc::Status SayHello(grpc::ServerContext* context, const HelloRequest* request,
HelloReply* reply) override {
reply->set_message("Hello " + request->name());
return grpc::Status::OK;
}
};
int main() {
std::string server_address("0.0.0.0:50051");
GreeterServiceImpl service;
grpc::ServerBuilder builder;
builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
builder.RegisterService(&service);
std::unique_ptr<grpc::Server> server(builder.BuildAndStart());
server->Wait();
}
4.3. 编译并运行服务
- 编译gRPC服务:
g++ -std=c++11 -I/usr/local/include helloworld.grpc.pb.cc helloworld.pb.cc -L/usr/local/lib -lgrpc++ -lprotobuf -o greeter_server
- 运行服务:
./greeter_server
5. 配置Envoy、Prometheus和Grafana
通过Envoy代理并监控gRPC服务,以下是简化的配置步骤。
5.1. Envoy配置文件
创建一个envoy.yaml
配置文件,用于配置Envoy代理和Prometheus集成。
static_resources:
listeners:
- name: listener_0
address:
socket_address:
address: 0.0.0.0
port_value: 10000
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
route_config:
name: local_route
virtual_hosts:
- name: local_service
domains: ["*"]
routes:
- match: { prefix: "/" }
route:
cluster: grpc_service
http_filters:
- name: envoy.filters.http.router
clusters:
- name: grpc_service
connect_timeout: 0.25s
type: LOGICAL_DNS
lb_policy: ROUND_ROBIN
http2_protocol_options: {}
load_assignment:
cluster_name: grpc_service
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: 127.0.0.1
port_value: 50051
admin:
access_log_path: "/tmp/admin_access.log"
address:
socket_address:
address: 127.0.0.1
port_value: 9901
stats_sinks:
- name: envoy.stat_sinks.prometheus
typed_config:
"@type": type.googleapis.com/envoy.extensions.stat_sinks.prometheus.v3.PrometheusSink
emit_tags_as_labels: true
5.2. 启动Envoy
envoy -c envoy.yaml
5.3. Prometheus配置文件
创建Prometheus配置文件以抓取Envoy暴露的监控指标:
scrape_configs:
- job_name: 'envoy'
static_configs:
- targets: ['localhost:9901']
5.4. 启动Prometheus
./prometheus --config.file=prometheus.yml
5.5. Grafana配置
- 打开浏览器,访问
http://localhost:3000
。
- 添加Prometheus数据源,URL设置为
http://localhost:9090
。
- 创建仪表盘来监控gRPC服务的请求、延迟等指标。
6. 总结
通过在VMware中安装Ubuntu 20.04并配置gRPC开发环境,你可以在虚拟机中实现一个完整的C++/gRPC服务开发、代理、监控的环境。按照以上步骤,你将获得一个包含gRPC、Envoy、Prometheus和Grafana的开发环境,能够实现端到端的服务开发、测试和监控。