Micro是一个微服务工具包,而Kubernetes是一个容器调度平台,它们组合在一起便构成微服务基础设施。

  • 无外部依赖
  • 客户端缓存服务发现
  • 可选k8s服务负载均衡
  • 使用gRPC传输协议
  • 预置工具包

安装 Micro

或者

如果使用go-micro,可以导入:

  1. import "github.com/micro/kubernetes/go/micro"

在)中可以使用其它服务一样集成k8s。

  1. import (
  2. "github.com/micro/go-micro"
  3. k8s "github.com/micro/kubernetes/go/micro"
  4. )
  5. func main() {
  6. service := k8s.NewService(
  7. micro.Name("greeter")
  8. )
  9. service.Init()
  10. service.Run()
  11. }

部署服务

以下是k8s部署微服务的示例

  1. apiVersion: extensions/v1beta1
  2. metadata:
  3. namespace: default
  4. name: greeter
  5. spec:
  6. replicas: 1
  7. template:
  8. metadata:
  9. labels:
  10. app: greeter-srv
  11. spec:
  12. containers:
  13. command: [
  14. "/greeter-srv",
  15. "--server_address=0.0.0.0:8080",
  16. "--broker_address=0.0.0.0:10001"
  17. ]
  18. image: microhq/greeter-srv:kubernetes
  19. imagePullPolicy: Always
  20. ports:
  21. - containerPort: 8080
  22. name: greeter-port

通过 kubectl 部署

  1. go get github.com/micro/kubernetes/cmd/health

或者

  1. docker pull microhq/health:kubernetes

运行健康检查

例如,运行healthcheck greeter服务,地址为localhost:9091

  1. health --server_name=greeter --server_address=localhost:9091

在localhost:8080调用healthchecker

  1. curl http://localhost:8080/health

添加 kubernetes 部署配置

K8s负载均衡

Micro默认提供客户端负载均衡,但k8s也提供有服务负载均衡策略。

要把默认的均衡卸掉迁移到k8s,可以使用与k8s服务协同的方式。

点击了解更多关于静态选择器

用法

要在运行服务时使用静态选择器,请指定参数或环境变量

  1. MICRO_SELECTOR=static ./service

或者

  1. ./service --selector=static

部署示例

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: greeter
  5. spec:
  6. replicas: 1
  7. template:
  8. labels:
  9. app: greeter-srv
  10. spec:
  11. containers:
  12. - name: greeter
  13. command: [
  14. "/greeter-srv",
  15. "--selector=static",
  16. "--server_address=0.0.0.0:8080",
  17. "--broker_address=0.0.0.0:10001"
  18. ]
  19. image: microhq/greeter-srv:kubernetes
  20. imagePullPolicy: Always
  21. ports:
  22. - containerPort: 8080
  23. name: greeter-port

K8s 服务

静态选择器将负载均衡迁移到k8s服务。因此,请确保为每个微服务创建了k8s服务。

服务样例

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: greeter
  5. labels:
  6. app: greeter
  7. spec:
  8. ports:
  9. - port: 8080
  10. protocol: TCP
  11. app: greeter

这样,在你的服务中调用greeter微服务,会被路由到k8s服务中的greeter服务8080端口上。