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://:30083

在编辑器中,打开 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 凭证。如果您看到指示无法连接云端集群的错误时,请进行以下步骤操作。

  1. 核实上述环节中的四个云端和 APM 值。
  2. 删除凭据和 Beats 设置作业,具体如下:
    $ kubectl delete secret cloud-secret --namespace=kube-system
    $ kubectl delete secret cloud-secret
    $ kubectl delete secret apm-secret
    
  3. 依照上述环节或者通过 vim/nano 编辑器,更新 Theia Web 编辑器中的凭据。
  4. 再次运行以下命令,重新创建密钥:
    $ ./install/create_secrets.sh
    
  5. 再次尝试 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://:30080 验证 petclinic UI。您可以使用 kubectl get services 命令获取 petclinic Web 应用程序的公共 IP 地址。

万事就绪。现在您可以返回查看所安排的常规系列教程:Kubernetes 可观测性教程:指标监测和分析