Micro是一个微服务工具包,而Kubernetes是一个容器调度平台,它们组合在一起便构成微服务基础设施。
- 无外部依赖
- 客户端缓存服务发现
- 可选k8s服务负载均衡
- 使用gRPC传输协议
- 预置工具包
安装 Micro
或者
如果使用go-micro,可以导入:
import "github.com/micro/kubernetes/go/micro"
在)中可以使用其它服务一样集成k8s。
import (
"github.com/micro/go-micro"
k8s "github.com/micro/kubernetes/go/micro"
)
func main() {
service := k8s.NewService(
micro.Name("greeter")
)
service.Init()
service.Run()
}
部署服务
以下是k8s部署微服务的示例
apiVersion: extensions/v1beta1
metadata:
namespace: default
name: greeter
spec:
replicas: 1
template:
metadata:
labels:
app: greeter-srv
spec:
containers:
command: [
"/greeter-srv",
"--server_address=0.0.0.0:8080",
"--broker_address=0.0.0.0:10001"
]
image: microhq/greeter-srv:kubernetes
imagePullPolicy: Always
ports:
- containerPort: 8080
name: greeter-port
通过 kubectl 部署
go get github.com/micro/kubernetes/cmd/health
或者
docker pull microhq/health:kubernetes
运行健康检查
例如,运行healthcheck greeter服务,地址为localhost:9091
health --server_name=greeter --server_address=localhost:9091
在localhost:8080调用healthchecker
curl http://localhost:8080/health
添加 kubernetes 部署配置
K8s负载均衡
Micro默认提供客户端负载均衡,但k8s也提供有服务负载均衡策略。
要把默认的均衡卸掉迁移到k8s,可以使用与k8s服务协同的方式。
点击了解更多关于静态选择器。
用法
要在运行服务时使用静态选择器,请指定参数或环境变量
MICRO_SELECTOR=static ./service
或者
./service --selector=static
部署示例
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: greeter
spec:
replicas: 1
template:
labels:
app: greeter-srv
spec:
containers:
- name: greeter
command: [
"/greeter-srv",
"--selector=static",
"--server_address=0.0.0.0:8080",
"--broker_address=0.0.0.0:10001"
]
image: microhq/greeter-srv:kubernetes
imagePullPolicy: Always
ports:
- containerPort: 8080
name: greeter-port
K8s 服务
静态选择器将负载均衡迁移到k8s服务。因此,请确保为每个微服务创建了k8s服务。
服务样例
apiVersion: v1
kind: Service
metadata:
name: greeter
labels:
app: greeter
spec:
ports:
- port: 8080
protocol: TCP
app: greeter
这样,在你的服务中调用greeter微服务,会被路由到k8s服务中的greeter服务8080端口上。