Kubernetes 可观测性教程:K8s 集群设置和演示应用部署
本篇博文将带您了解如何配置 Kubernetes 可观测性教程系列博文中会用到的环境。请务必首先查看第 1 部分:日志监测和分析博文(如果还未作了解),因为本篇博文仅为该系列的补充说明,无法作为独立部分进行参考。阅读完上述提到的博文后,您可以回到此处,开始设置教程环境。
第 1 步:启用(免费)Elasticsearch Service 部署
实现配置并运行本教程中 Elastic Stack 最便捷的方式便是启用 14 天免费试用的 Elastic Cloud 上的 Elasticsearch Service。仅需几下单击(无需信用卡),您便可以设置并开始运行您的集群。或者按照自己的需求,下载 Elastic Stack,进行本地安装。 本教程中的所有说明都可以轻松修改,以便在自己的硬件上与独立的 Elasticsearch 集群配合使用。
第 2 步:Minikube 单节点 Kubernetes 集群设置
现在您的 Elastic Stack 部署已启用并运行,下面开始设置 Minikube 环境。
准备 Kubernetes 环境
本教程将介绍设置单一节点 Minikube 环境以运行余下的教程活动,例如捕获日志、指标和应用程序性能数据。虽然有其他方式可以创建支持本教程的环境,例如 Strigo.io 类、GKE、AWS 独立主机,不过本次示例讲解如何创建 Debian 9 主机环境(截图取自 Google Cloud)。
注意:如果您已经有在云端环境或您的服务器中运行的 Kubernetes 集群,可以忽略此部分。只有在没有自己的 Kubernetes 集群时,才需运行这些步骤。
初始配置
创建 Debian 9 服务器。请首先以较低的规格配置开始,然后酌情尝试较高的规格配置。以下为所需规格:
- CPU(2 或 4)
- 8 或 16 GB RAM
- 100 GB 磁盘空间。
- Debian 9 Linux OS (Stretch)
- 确保与所选服务器端口 30080-30085 的外部连接。这可能需要为服务器配置防火墙规则。
Google Cloud 的配置示例:
安装必备软件包
以下步骤将在 Debian 9 服务器上安装您的 Kubernetes 单节点集群。首先,运行以下命令:
$ sudo apt-get install -y git tmux
从我的 Github 存储库中查看代码
运行以下命令,从我的 Github 存储库中克隆示例代码:
$ git clone https://github.com/michaelhyatt/k8s-o11y-workshop
安装必备项
运行以下命令,安装 kubectl、Minikube 和 Docker:
$ cd k8s-o11y-workshop $ ./install/install-debian9.sh
启用 Minikube 和 Kubernetes
本命令将启用 Minikube 环境:
$ ./install/start_k8s.sh
通过运行以下命令及查看服务是否处于运行
状态,确保环境已启用并运行无误:
$ kubectl get pods --namespace=kube-system
输出应如以下所示:
NAME READY STATUS RESTARTS AGE coredns-5644d7b6d9-jhjlm 1/1 Running 0 106s coredns-5644d7b6d9-npwr7 1/1 Running 0 105s etcd-minikube 1/1 Running 0 55s kube-addon-manager-minikube 1/1 Running 0 43s kube-apiserver-minikube 1/1 Running 0 57s kube-controller-manager-minikube 1/1 Running 0 47s kube-proxy-fm476 1/1 Running 0 105s kube-scheduler-minikube 1/1 Running 0 50s kube-state-metrics-57cd6fdf9-gfgl8 1/1 Running 0 102s storage-provisioner 1/1 Running 0 101s
现在您的 Minikube 单节点 Kubernetes 集群已配置完成并运行。
第 3 步:部署演示应用程序
现在 Kubernetes 集群已启用并运行,下面来部署演示应用程序。
创建并更新连接详情和密钥
验证 Theia 编辑器已启用并运行。您也可以使用 vim 和 nano 等其他编辑器编辑 install/create_secrets.sh 文件。
$ kubectl get pods
输出应如以下所示:
NAME READY STATUS RESTARTS AGE theia-86d9888954-npk7l 1/1 Running 0 74s
确保从您的 Elastic Cloud 集群设置中已经记录以下详情:
cloud_id
:应为 “: ” 形式 cloud_auth
:应为 “elastic:” 形式 apm_url
:APM 服务器 URL 应以 https:// 开始apm_token
:连接 APM 服务器的密钥令牌。
这些详情将用于创建 Kubernetes 密钥,用于连接本服务器上运行的组件与 Elastic Cloud 集群。
找到服务器公共 IP 地址,打开浏览器窗口,地址为 http://
在编辑器中,打开 install/create_secrets.sh, 文件,依照上述内容更新四项详情。结束时保存文件。
在终端窗口中运行此命令,创建密钥:
$ ./install/create_secrets.sh
运行 Beats 设置
Elastic Stack 提供多种 Beats,可以向 Elasticsearch 传输数据。为了跟踪 k8s 日志文件,我们将使用 Filebeat。为了从应用程序和系统 pod(包括 Kubernetes 本身)中收集各种指标,我们将使用 Metricbeat。
Beats 设置需要创建所有数据采集相关项目:采集管道、索引模板、开箱即用的 Kibana 可视化。一条命令运行一次便可实现以上所有操作,而且部署到 Kubernetes 集群中的每一个 Beat 只需运行一次。
请运行以下设置命令,运行 Metricbeat 和 Filebeat 设置作业:
$ kubectl create -f $HOME/k8s-o11y-workshop/filebeat/filebeat-setup.yml $ kubectl create -f $HOME/k8s-o11y-workshop/metricbeat/metricbeat-setup.yml
然后只需等待作业完成,方式是观察状态从 ContainerCreation
(容器创建)变为 Running
(运行中),最后使用以下 kubectl 命令 Completed
(完成)操作:
$ kubectl get pods --namespace=kube-system
生成的 pod 状态应如下所示:
NAME READY STATUS RESTARTS AGE coredns-5644d7b6d9-jhjlm 1/1 Running 0 2d coredns-5644d7b6d9-npwr7 1/1 Running 0 2d etcd-minikube 1/1 Running 0 2d filebeat-init-nkghj 0/1 Completed 0 2m kube-addon-manager-minikube 1/1 Running 0 2d kube-apiserver-minikube 1/1 Running 0 2d kube-controller-manager-minikube 1/1 Running 0 2d kube-proxy-fm476 1/1 Running 0 2d kube-scheduler-minikube 1/1 Running 0 2d kube-state-metrics-57cd6fdf9-gfgl8 1/1 Running 0 2d storage-provisioner 1/1 Running 0 2d metricbeat-init-gm6wj 0/1 Completed 0 2m
忘记创建密钥的情况
本阶段最常见的错误原因将会是不正确的 Elastic Cloud 凭证。如果您看到指示无法连接云端集群的错误时,请进行以下步骤操作。
- 核实上述环节中的四个云端和 APM 值。
- 删除凭据和 Beats 设置作业,具体如下:
$ kubectl delete secret cloud-secret --namespace=kube-system $ kubectl delete secret cloud-secret $ kubectl delete secret apm-secret
- 依照上述环节或者通过 vim/nano 编辑器,更新 Theia Web 编辑器中的凭据。
- 再次运行以下命令,重新创建密钥:
$ ./install/create_secrets.sh
- 再次尝试 Beats 设置命令。
部署 Beats
运行以下两个命令,部署 Filebeat 和 Metricbeat:
$ kubectl create -f $HOME/k8s-o11y-workshop/filebeat/filebeat.yml $ kubectl create -f $HOME/k8s-o11y-workshop/metricbeat/metricbeat.yml
运行以下命令,验证 Beats 是否在运行:
$ kubectl get pods --namespace=kube-system
应该有三个额外的 Kubernetes pod 在运行(Filebeat 一个,Metricbeat 两个):
NAME READY STATUS RESTARTS AGE coredns-5644d7b6d9-jhjlm 1/1 Running 0 2d coredns-5644d7b6d9-npwr7 1/1 Running 0 2d etcd-minikube 1/1 Running 0 2d filebeat-init-nkghj 0/1 Completed 0 2d filebeat-wnltr 1/1 Running 0 4m kube-addon-manager-minikube 1/1 Running 0 2d kube-apiserver-minikube 1/1 Running 0 2d kube-controller-manager-minikube 1/1 Running 0 2d kube-proxy-fm476 1/1 Running 0 2d kube-scheduler-minikube 1/1 Running 0 2d kube-state-metrics-57cd6fdf9-gfgl8 1/1 Running 0 2d metricbeat-777d6c6c45-gzfwr 1/1 Running 0 4m metricbeat-init-rjz4q 0/1 Completed 0 4m metricbeat-vxbj5 1/1 Running 0 4m storage-provisioner 1/1 Running 0 2d
核实 Beats 正在向 Elasticsearch 发送数据
如要额外核实 Beats 是否成功连接到 Elastic Cloud 集群并发送数据,请打开 Kibana 中的 Logs 和 Metrics 应用。所述位置应该有些进行中的操作。
部署应用程序组件
部署 MySQL:
$ kubectl create -f $HOME/k8s-o11y-workshop/mysql/mysql.yml
通过查看 Metrics 应用中正在运行的 pod,并从 pod 菜单中对其进行选择并观察 MySQL 日志,以验证容器已启用:
等待“连接准备就绪”MySQL 日志行:
部署 petclinic 应用和 NGINX 代理:
$ kubectl create -f $HOME/k8s-o11y-workshop/petclinic/petclinic.yml $ kubectl create -f $HOME/k8s-o11y-workshop/nginx/nginx.yml
核实所有组件正在运行
查看 Kibana 的 Metrics 应用中正在运行的所有组件:
可于 http://kubectl get services
命令获取 petclinic Web 应用程序的公共 IP 地址。
万事就绪。现在您可以返回查看所安排的常规系列教程:Kubernetes 可观测性教程:指标监测和分析。