Hero Image
Envoy introduction

简介 Envoy 是一个高性能的网络代理服务,可以用于 Service Mesh。它是专为大型现代 SOA(面向服务架构)架构设计的 L7 代理和通信总线,体积小,性能高。它可以提供通用的网络功能,如负载均衡、服务发现、路由、健康检查、认证、授权等⁵。它还支持动态配置和热重启,以适应不断变化的服务环境²。 Envoy的架构基于一个高度模块化的设计,其中每个模块都专注于不同的网络功能。这种模块化的设计使得Envoy非常灵活,可以轻松地扩展和自定义以满足各种用例和需求。 Envoy的代理是分层的,其中包括网络层,传输层和应用层。网络层负责处理IP包,传输层负责处理TCP和UDP报文,应用层代理负责处理HTTP请求和响应等高级协议。在这些代理层中, Envoy提供了各种过滤器和扩展,以实现各种网络功能,如身份验证,流量转换和日志记录等。 其中,网络层代理实现了一个高性能的L3/L4代理,可以在TCP和UDP层提供负载均衡和故障转移。这意味着Envoy可以将请求分发到多个后端服务器,并确保在服务器出现故障时仍能正常工作。 传输层代理实现了一个基于HTTP/2的L7代理,支持HTTP/1.1,gRPC和WebSocket等协议。这使得Envoy可以在应用层面上提供更多的功能,例如流控制和请求/响应重试等。除此之外,Envoy还支持TCP代理,可以在L4层对TCP数据进行处理。 特性 一些比较比较重要的特性如下: Envoy 是一个基于现代 C++ 开发的 L4/L7 高性能代理,可以透明地代理各种协议,如 HTTP/1.1,HTTP/2,GRPC,WebSocket 等。 Envoy 支持流量管理、治理特性、负载均衡、动态配置 API、可观察性设计等功能,可以满足复杂的服务网络需求。 Envoy 是一个数据平面第一的设计,即将 Envoy 作为一个独立进程,与每个应用程序服务并行运行,并通过统一的 API 进行配置和管理。 Envoy的核心设计原则之一是可观测性。Envoy提供了丰富的统计信息,日志和跟踪功能,以帮助用户深入了解其网络流量的性能和行为。此外,Envoy还支持各种开放式标准,如Prometheus,Zipkin和Jaeger等,以便用户可以将其数据与其它系统无缝集成。 除此之外,Envoy还支持多种部署方式,例如Docker容器,Kubernetes集群和Mesos框架。这使得Envoy可以轻松地与现代云原生应用程序集成。 总结 总的来说,Envoy是一个功能强大,灵活和高性能的代理,适用于各种网络和安全用例。它的模块化架构和可观测性设计使得Envoy成为一个理想的选择,无论是在公共云,私有云还是混合云环境下使用。

Hero Image
k8s 问题排查

Kubelet问题排查思路 Kubelet是Kubernetes节点上的重要组件之一,它负责管理Pod的生命周期,包括容器的创建、销毁和重启等。一旦Kubelet出现问题,可能会导致Pod无法正常启动或运行,从而影响整个集群的稳定性。 本文将介绍Kubelet问题排查的几个基本思路,帮助您快速解决Kubernetes集群中的问题。 检查Kubelet的运行状态 首先,您需要检查Kubelet的运行状态,以便快速定位问题。您可以通过以下命令检查Kubelet的状态: systemctl status kubelet 如果Kubelet正在运行,则输出应该类似于以下内容: ● kubelet.service - kubelet: The Kubernetes Node Agent Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-08-02 11:06:45 CST; 2 weeks 0 days ago Docs: <http://kubernetes.io/docs/> Main PID: 2345 (kubelet) Tasks: 144 Memory: 923.4M CPU: 1h 51min 13.014s CGroup: /system.slice/kubelet.service └─2345 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.4.1 如果Kubelet未运行,则可能需要手动启动它: systemctl start kubelet 检查Kubelet的配置文件 Kubelet的配置文件包含了很多重要的信息,例如容器运行时、Pod网络和存储等。因此,在排查Kubelet问题时,您需要检查Kubelet的配置文件是否正确。您可以通过以下命令查看Kubelet的配置文件: cat /etc/kubernetes/kubelet.conf 如果配置文件存在问题,则需要修改配置文件并重新启动Kubelet。

Hero Image
kubebuilder

Kubebuilder是一款用于构建Kubernetes API和控制器的SDK和CLI工具。使用Kubebuilder可以轻松地构建自己的Kubernetes API和控制器,从而实现自定义资源和自动化管理。本篇文章将介绍如何使用Kubebuilder构建自己的Kubernetes API和控制器。 准备工作 在使用Kubebuilder之前,需要先安装以下软件: Golang Docker Kubernetes CLI Git 可以通过以下命令安装Kubebuilder: # 安装最新版本 go get sigs.k8s.io/kubebuilder/cmd/kubebuilder # 安装指定版本 go get sigs.k8s.io/kubebuilder/cmd/kubebuilder@{version} 创建项目 使用Kubebuilder创建项目的命令如下: kubebuilder init --domain {yourdomain.com} 其中,--domain参数用于指定域名,即Kubernetes API的Group名称。执行完该命令后,将会在当前目录下创建一个名为{yourdomain.com}的文件夹,该文件夹包含了一些默认的文件和目录结构。 创建API 使用Kubebuilder创建API的命令如下: kubebuilder create api --group {group} --version {version} --kind {Kind} 其中,--group参数用于指定Group名称,--version参数用于指定API的版本号,--kind参数用于指定资源类型名称。执行完该命令后,将会在当前目录下的api/{version}目录下创建一些默认的文件和目录结构。 编写代码 在创建API后,可以开始编写控制器的代码了。Kubebuilder提供了一些默认的代码模板,可以通过以下命令生成: kubebuilder create api --group {group} --version {version} --kind {Kind} 将会在当前目录下的controllers/{kind}_controller.go文件中生成控制器代码模板。 构建镜像 编写完控制器代码后,需要将其打包成镜像,以便进行部署和使用。可以通过以下命令构建镜像: make docker-build docker-push IMG={yourimage}:{version} 其中,{yourimage}和{version}分别为镜像名称和版本号。 部署应用 在构建完镜像后,可以使用Kubernetes CLI部署应用: kubectl apply -f config/crd/bases/{yourdomain.com}_{group}_{version}_{kind}.yaml kubectl apply -f config/manager/{kind}_manager.