用 Go 搭建 Kubernetes Operators

简介: 简介 Istio 是一个由 IBM、Google 以及 Lyft 联合推出的开源软件,以无痛方式为运行在 Kubernetes 上的微服务提供流量管理,访问策略管理以及监控等功能。这一软件目前仅在 Kubernetes 上运行,今后可能会扩展到其他平台。

简介

Istio 是一个由 IBM、Google 以及 Lyft 联合推出的开源软件,以无痛方式为运行在 Kubernetes 上的微服务提供流量管理,访问策略管理以及监控等功能。这一软件目前仅在 Kubernetes 上运行,今后可能会扩展到其他平台。本文会结合官方例子,完成安装和基础的监控内容。

架构和组件

总体架构如图所示。

Envoy

一个 C++ 编写的高性能代理服务器,这里做了扩展,在 Istio 中会以 Sidecar 方式跟应用运行在同一 Pod 内,一方面可以接收并执行关于规则、流量拆分等方面的指令,另一方面能够产生各种指标用于监控和跟踪。

Mixer

Mixer 组件,主要进行访问控制以及策略控制,同时也负责从 Envoy 中获取各项指标。

Pilot

Pilot 是用户和 Isito 之间的桥梁,负责接收各种配置,并发送给各个组件。

Istio auth

内置认证和凭证管理,利用 TLS 提供服务之间、用户和服务之间的认证。 可以用来将没有加密支持的服务升级为加密版本,并且在网络策略之外,提供服务级别的策略控制,今后还会增加更多的鉴权和审计方面的能力。

功能 & 特性

  • 无需对现有服务进行变更
  • 支持 http 1.1/2、gRPC 以及 TCP 流量的负载均衡和故障转移
  • 可替换的组件
  • 流量监控
  • 可提供身份认证功能
  • 可定制的路由规则
  • 错误处理,例如超时、重试、访问量控制、健康检查和熔断器等。

安装

先决条件

  • Kubernetes
  • 互联网连接

准备工作

首先去https://github.com/istio/istio/releases下载最新版本(目前为 0.1.6),解压并设置 istioctl 命令的执行路径 。下面命令中描述的相对目录就是基于此目录

执行命令kubectl api-versions | grep rbac查看当前集群的 RBAC 设置:

  • 如果返回内容为空则无需理会。
  • 如果返回内容中包含beta,则需要运行kubectl apply -f install/kubernetes/istio-rbac-beta.yaml来进行授权
  • 如果返回内容中只有alpha ,就要kubectl apply -f install/kubernetes/istio-rbac-beta.yaml创建相应的角色和绑定了。

运行

最后,运行kubectl create -f install/kubernetes/istio.yaml创建一系列的 Deployment 以及 Services。

注1: 其实上面的内容照做并不一定能成功,反正我的 1.6.6 上面是没能成功,Pilot Pod 中的 API Server 容器会出错,错误信息大概是“system:serviceaccount:default:istio-pilot-service-account” cannot get thirdpartyresources.extensions at the cluster scope.”,也就证明了 beta.yaml 中的 RBAC 设置是不够的,这里我把几个 RoleBinding 都改成为 ClusterRoleBinding,运行就成功了。

注2:istio.yaml 中的 Ingress 服务是 Loadbalancer 类型的,如果测试集群不具备这样的条件,还请自行修改成其他合适内容。

至此,基础的 istio 组件就已经运行完毕了。

运行应用

安装包内包含了一个叫 bookinfo 的小应用,由 Product(入口页)、Detail 和 Review 三部分组成,具体应用 YAML 在安装目录的samples/apps/bookinfo/bookinfo-v1.yaml文件中。打开文件我们会发现这是个很简单的小应用,无非是几个 Deployment 和 Service 的组合。

该应用的微服务相互关系大致如下图所示,这个例子很好的展示了 istio 的一大特性——不拘泥于某种语言。


istio 提供了一个工具叫 istioctl,这个工具的功能之一,就是把普通的应用 YAML 注入为 istio 支持的应用模式,例如:istioctl kube-inject -f bookinfo-v1.yaml > bookinfo-istio-v1.yaml,比较新旧两个文件不难发现,这一工具为每个 Pod 新增了一个名为 proxy 的容器,以此接管流量,给监控和管理打下基础。

接下来我们运行这一应用: – kubectl create -f bookinfo-istio-v1.yaml:运行注入后的 应用 -kubectl create -f bookinfo-ingress.yaml:创建 Ingress 资源

监控

istio 内置了对 ServiceGraph、Prometheus 以及 Zipkin 的支持,简单的运行一下kubectl create -f install/kubernetes/addons,就会启用这几个服务。注意这几个服务使用的也都是 Loadbalancer 模式,读者应根据集群情况自行修改。

各个服务启动之后,可以使用负载工具例如 wrk 对 Productpage 页面进行一段时间的访问,来模拟工作情况。

Grafana

Grafana 启动后,我们可以使用服务暴露的地址进行访问,在其中可以看到如下图所示的 Dashboard,展示了我们应用中的几个服务的各种监控数据。

Service Graph

这一个服务提供了两个入口,一个是 /dotvz,以图形的方式供服务关系展示,而/graph则提供了 JSON 格式的文档供结构化使用。例如:

{ "nodes": { "details": {}, "productpage": {}, "reviews": {}, "unknown": {} }, "edges": [ { "source": "productpage", "target": "reviews", "labels": { "qps": "0.030416", "version": "v1" } }, { "source": "unknown", "target": "productpage", "labels": { "qps": "0.030416", "version": "v1" } }, { "source": "productpage", "target": "details", "labels": { "qps": "0.030416", "version": "v1" } } ] }

Zipkin

Istio 提供了开箱即用的 Zipkin 跟踪支持,打开页面之后,我们会看到 Zipkin 的查找页面,并无特殊内容,就不展开细谈了。

文中介绍内容只是很粗浅的入门操作,后续会进一步跟进、挖掘和学习这一系统的其他强大功能。

本文转自中文社区-配置Pod的liveness和readiness探针

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes Linux 应用服务中间件
Kubernetes—集群环境搭建
Kubernetes—集群环境搭建
440 0
|
Kubernetes Go Docker
在K8s编程中如何使用Go
一文带你了解在K8s编程中如何使用Go
623 3
|
Kubernetes 监控 Cloud Native
"解锁K8s新姿势!Cobra+Client-go强强联手,打造你的专属K8s监控神器,让资源优化与性能监控尽在掌握!"
【8月更文挑战第14天】在云原生领域,Kubernetes以出色的扩展性和定制化能力引领潮流。面对独特需求,自定义插件成为必要。本文通过Cobra与Client-go两大利器,打造一款监测特定标签Pods资源使用的K8s插件。Cobra简化CLI开发,Client-go则负责与K8s API交互。从初始化项目到实现查询逻辑,一步步引导你构建个性化工具,开启K8s集群智能化管理之旅。
496 2
|
运维 Kubernetes Go
"解锁K8s二开新姿势!client-go:你不可不知的Go语言神器,让Kubernetes集群管理如虎添翼,秒变运维大神!"
【8月更文挑战第14天】随着云原生技术的发展,Kubernetes (K8s) 成为容器编排的首选。client-go作为K8s的官方Go语言客户端库,通过封装RESTful API,使开发者能便捷地管理集群资源,如Pods和服务。本文介绍client-go基本概念、使用方法及自定义操作。涵盖ClientSet、DynamicClient等客户端实现,以及lister、informer等组件,通过示例展示如何列出集群中的所有Pods。client-go的强大功能助力高效开发和运维。
1494 1
|
Kubernetes Cloud Native Go
Golang深入浅出之-Go语言中的云原生开发:Kubernetes与Docker
【5月更文挑战第5天】本文探讨了Go语言在云原生开发中的应用,特别是在Kubernetes和Docker中的使用。Docker利用Go语言的性能和跨平台能力编写Dockerfile和构建镜像。Kubernetes,主要由Go语言编写,提供了方便的客户端库与集群交互。文章列举了Dockerfile编写、Kubernetes资源定义和服务发现的常见问题及解决方案,并给出了Go语言构建Docker镜像和与Kubernetes交互的代码示例。通过掌握这些技巧,开发者能更高效地进行云原生应用开发。
610 1
|
Kubernetes 监控 Cloud Native
Go微服务架构实战 中篇:2. 基于k8s部署服务和注册中心,验证服务注册和发现
Go微服务架构实战 中篇:2. 基于k8s部署服务和注册中心,验证服务注册和发现
1076 0
Go微服务架构实战 中篇:2. 基于k8s部署服务和注册中心,验证服务注册和发现
|
Kubernetes 应用服务中间件 nginx
02-Kubernetes-集群环境搭建(下)
02-Kubernetes-集群环境搭建(下)
|
Kubernetes 网络协议 安全
|
JSON Kubernetes 测试技术
在 Go 中使用 Kubernetes 对象
通常,在某些情况下,我们需要通用的方法去使用 Kubernetes 资源对象,而不是编写代码来处理特定类型。
507 0
|
运维 Kubernetes 负载均衡
Go微服务架构实战 中篇:5. k8s基于ingress和service实现金丝雀发布和蓝绿发布
Go微服务架构实战 中篇:5. k8s基于ingress和service实现金丝雀发布和蓝绿发布
907 0