Pixie是基于Ebpf技术构建的一套可观测性平台,Pixie默认已经集成了许多可观测性工具,例如:我们可以清晰的通过Pixie观测到K8S内部的流量情况、DNS解析时延、TCP丢包、掉包等,同时我们还可以通过Pixie多K8S内Namespace、Pod等进行监控,当然大名鼎鼎的Cilium(一款K8S的网络插件)也可以做到,但是如果您的K8S集群不是使用到Cilium的话,使用Pixie作为K8S可观测性平台是非常不错的选择。
Pixie官方主要给出了两种搭建模式,第一种是Community Cloud for Pixie,第二种是通过Self-Hosted模式进行搭建,如果您的K8S集群在公有云,那么选择Community Cloud的模式是一种快捷、简单的方式,在这种模式下用户只需要部署Pixie采集端,而无需单独部署Pixie Cloud(用于管理部署在各个K8S集群的Pixie采集端),Pixie Cloud由社区来提供,但是这种方式对于我们国内很多系统来说是不适用的,它要求K8S集群能够直连到Pixie社区提供的Cloud上去,这意味着K8S需要与公网打通,这往往不符合安全要求,于使只能采用第二种模式来进行部署,将Pixie Cloud和Pixie采集端部署到私有的集群上面。以下是笔者在实验环境搭建的过程。
首先我的实验环境主要由三台虚拟机组成,基于Kubernetes 1.23.2版本搭建了一套集群,集群信息如下,这里要注意Pixie要求K8S的版本需要高于1.16,同时集群中主机需要使用Cgroup v1版本,笔者尝试过Cgroup v2,但是Pixie无法正常运行。
接下来我们可以按照官网的步骤开始搭建,这里贴出官网地址,大家可以参考:
Install | Install Guides | Self-Hosted Pixiehttps://docs.px.dev/installing-pixie/install-guides/self-hosted-pixie/ 1.第一步:按照官网要求,我们需要首先使用Git将Pixie源码切到本地,这里没有特殊的说明
git clone https://github.com/pixie-io/pixie.git cd pixie
2.第二步:安装mkcert,具体如何安装这里不详细写出来,各位可以参考官方文档
GitHub - FiloSottile/mkcert: A simple zero-config tool to make locally trusted development certificates with any names you'd like.https://github.com/FiloSottile/mkcert#installation 这个mkcert是作用是生成本地的CA证书,之后Pixie Cloud和客户端之间需要通过SSL来进行通信,这里没有什么坑,安装即可。
3.第三步:生成CA证书,这里也没什么好说的,往下走
mkcert -install
4.第四步:创建名为plc的命名空间,这个命名空间是用于Pixie Cloud的服务
kubectl create namespace plc
5.第五步:创建Pixie Cloud中所需要的secrets资源,包括一些密钥之类的,这一步一定确保已经在命名空间中创建,如果这里缺失了,后面Pixie Cloud的部分服务就会无法启动,创建以后可以通过Kubectl 进行查看下。
./scripts/create_cloud_secrets.sh
6.第六步:安装kustomize,这个工具是用于生成安装Pixie Cloud的YAML文件的,这步没有坑,安装方法如下:
Kustomize | SIG CLIhttps://kubectl.docs.kubernetes.io/installation/kustomize/7.第七步:安装Pixie Cloud的依赖,这一步会安装Pixie Cloud服务依赖的一些中间件之类的,比如es,postgres,nat,stan等。注意这些服务都需要挂在数据卷,在部署之前需要提前把需要的数据卷给创建好,因为笔者这里使用的是本地环境,于使创建的是宿主机数据卷,服务在启动的时候会自动去Bound数据卷,数据卷的大小需要查看依赖服务的PVC的要求来创建。
kustomize build k8s/cloud_deps/public/ | kubectl apply -f - --namespace=plc
8.第八步:安装Pixie Cloud,这里就是等待Pull镜像和安装成功,可以通过查看plc命名空间下容器状态来观察:
kustomize build k8s/cloud/public/ | kubectl apply -f - --namespace=plc
9.第九步:为Pixie Cloud的两个Service配置External 我们需要为cloud-proxy-service ,vzconn-service配置External IP,用于集群外部访问,注意这里按照官方步骤执行后,这两个服务的External IP是pending状态,需要手工修改Service的yaml配置来绑定IP,这里因为是实验环境,笔者把K8S Master的宿主机IP与其绑定。
10.第十步 :设置DNS,这一步的目的使集群内部的DNS能够解析到Pixie Cloud的域名,首先需要在本地环境中安装Go,编译dev_dns_updater.go,然后执行,这里的目的就是把dev.withpixie.dev这个域名加入到集群DNS解析中,当然本地环境通过配置HOST也是可以的。
go build src/utils/dev_dns_updater/dev_dns_updater.go ./dev_dns_updater --domain-name="dev.withpixie.dev" --kubeconfig=$HOME/.kube/config --n=plc
11.第十一步:配置Pixie Cloud页面的登陆账号和密码,这里它需要去查询一个create-admin-job的日志,日志中指示需要打开又给URL地址即可,注意这里大家在打开浏览器的时候会遇到证书不安全的问题,同时浏览器开启了HSTS策略导致浏览器打不开的问题,笔者在Chrome上解决了这个问题,需要在浏览器界面上输入thisissafe即可,火狐浏览器暂未找到解决方法
kubectl logs create-admin-job--n plc
12.第十二步:解析来就是安装Pixie Cli和Pixie采集端了,这里只需要执行以下步骤,当然这里有个问题,Pixie每次部署会重新去拉最新版本的镜像,这样会导致拉去时间过长和需要联网,这部分问题需要把部署YAML文件导出后通过修改YAML文件并用YAML文件安装来解决。注意这还有个可能遇到的问题就是vizier-pem服务会反复重启报错,笔者的解决办法是调大容器的内存以及修改vizier-cloud-connector和vizier-metadata服务的参数,参数名称为PL_RENEW_PERIOD,值调为10000。
export PL_CLOUD_ADDR=dev.withpixie.dev bash -c "$(curl -fsSL https://withpixie.ai/install.sh)" px deploy --dev_cloud_namespace plc
13.第十三步:安装完成后就可以使用了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)