在谷歌Tau T2A实例上部署ELK
基于 Ampere Altra 处理器
Ampere® Altra®处理器从设计伊始就旨在为云原生应用程序(如NGINX)提供卓越的性能。以其创新架构,提供高性能、线性可扩展性和惊人的能源效率,Ampere Altra允许工作负载在不断增加的负载下,性能变化很小,以可预测的方式运行。在NGINX实际工作负载中提供行业领先的性能/瓦特能力和更低的碳足迹。
谷歌云基于Ampere Altra处理器的Tau T2A虚拟机针对向外扩展的云原生工作负载进行了成本优化,提供以多种预定的虚拟机形态-每个虚拟机最多48个vCPU,每个vCPU 4 GB内存,最高32 Gbps网络带宽,以及广泛的网络连接存储选项。Google Kubernetes Engine (GKE)是容器工作负载的关键基础设施,最开始就是支持Tau T2A虚拟机的。
传统的ELK软件栈由Elasticsearch, Logstash, 和Kibana组成。从2015年起,轻量级的数据传输器Beats家族开始非正式的成为ELK中的一个组件。 ELK 软件栈为开发人员提供了端到端的能力来聚合应用程序和系统日志、分析这些日志以及可视化洞察以进行监控、故障排除和分析。
在本示例中,我们将演示如何在基于谷歌云Tau T2A 实例的GKE集群上部署 ELK 软件栈,以从 Kubernetes 集群内的 Pod 收集日志。
在开始之前,我们将假设以下条件已经就绪:
如果所有这些先决条件都已满足,那么恭喜你!现在我们可以进入下一个阶段——建立一个GKE集群。
谷歌云T2A虚拟机目前支持GKE 1.24及以上版本。三个谷歌云区域和几个区域现在都可用于基于t2a的GKE集群创建:us-central1(爱荷华州- A区,B区,F区),europe-west4(荷兰- A区,B区)和asia-southeast1(新加坡- B区,C区)。
在本教程中,我们使用以下gcloud命令在us-central1-a区域配置一个三节点GKE T2A集群:
$ gcloud container clusters create "eck-tutorial" --project=<YOUR_PROJECT_NAME> --zone us-central1-a --node-locations "us-central1-a" --machine-type "t2a-standard-4" --num-nodes "3" --enable-gvnic --cluster-version "1.24.3-gke.200"
进入gcloud命令行后,确认创建Kubernetes集群,状态如下所示:
$ kubeconfig entry generated for eck-tutorial. NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS eck-tutorial us-central1-a 1.24.3-gke.200 34.133.94.220 t2a-standard-4 1.24.3-gke.200 3 RUNNING
创建集群后,gcloud将集群身份验证凭证保存到$HOME/中的一个配置文件中。所以kubectl也可以用来与集群交互。
注:GKE 版本 1.24.3-gke.200 将arm64 节点标记为taint,以避免将x86 的应用pod 调度到 arm64 节点。
$ kubectl describe node <NODE_NAME> … Taints: kubernetes.io/arch=arm64:NoSchedule …
我们现在可以通过在对象规范中添加节点选择器或节点关联来将工作负载调度到T2A节点。如果集群中只有arm64架构,另一种选择是从工作节点上删除NoSchedule taints标签。在本教程中,我们将删除节点的 taints标记,因为我们的集群仅由T2A arm64节点组成。
$ kubectl taint nodes <NODE_NAME> kubernetes.io/arch=arm64:NoSchedule- node/<NODE_NAME> untainted
此时,我们应该可以继续在新创建的T2A Kubernetes集群上进行弹性堆栈部署。
Operator 的部署
从Elastic网站下载定制并安装资源定义和RBAC规则。
$ kubectl create -f https://download.elastic.co/downloads/eck/2.4.0/crds.yaml $ kubectl apply -f https://download.elastic.co/downloads/eck/2.4.0/operator.yaml
稍等片刻后可以看到elastic-operator Pod 已经拉起并进入运行状态。
$ kubectl get pods -n elastic-system NAME READY STATUS RESTARTS AGE elastic-operator-0 1/1 Running 0 2m
Elasticsearch 节点的部署
当Operator准备好了,就可以创建一个Elasticsearch集群,并根据以下集群yaml规范达到所需的状态:
$ cat <<EOF | kubectl apply -f - apiVersion: elasticsearch.k8s.elastic.co/v1 kind: Elasticsearch metadata: name: quickstart spec: version: 8.4.1 nodeSets: - name: default count: 1 config: node.store.allow_mmap: false EOF
当“Health”设置为“green”,“Phase”设置为“Ready”时,Elasticsearch节点已就绪,如下所示:
$ kubectl get elasticsearch NAME HEALTH NODES VERSION PHASE AGE quickstart green 1 8.4.1 Ready 1m
Filebeat 的部署
在本教程中,我们将使用filebeat收集Kubernetes节点上容器的日志。下面的命令行用于将Filebeat作为daemonSet作为数据流部署到Elasticsearch。
$ cat <<EOF | kubectl apply -f - apiVersion: beat.k8s.elastic.co/v1beta1 kind: Beat metadata: name: quickstart spec: type: filebeat version: 8.4.1 elasticsearchRef: name: quickstart config: filebeat.inputs: - type: container paths: - /var/log/containers/*.log daemonSet: podTemplate: spec: dnsPolicy: ClusterFirstWithHostNet hostNetwork: true securityContext: runAsUser: 0 containers: - name: filebeat volumeMounts: - name: varlogcontainers mountPath: /var/log/containers - name: varlogpods mountPath: /var/log/pods - name: varlibdockercontainers mountPath: /var/lib/docker/containers volumes: - name: varlogcontainers hostPath: path: /var/log/containers - name: varlogpods hostPath: path: /var/log/pods - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers EOF
同样,我们等待“Health”运行状况变为“green”。
$ kubectl get beat NAME HEALTH AVAILABLE EXPECTED TYPE VERSION AGE quickstart green 3 3 filebeat 8.4.1 2m
Kibana 的部署
在部署Elasticsearch之后,我们需要Kibana来搜索、观察和分析您的数据。要部署与现有Elasticsearch集群相关联的Kibana实例,请使用以下规则:
$ cat <<EOF | kubectl apply -f - apiVersion: kibana.k8s.elastic.co/v1 kind: Kibana metadata: name: quickstart spec: version: 8.4.1 count: 1 elasticsearchRef: name: quickstart EOF
查看 Kibana 的“health”状态:
$ kubectl get kibana NAME HEALTH NODES VERSION AGE quickstart green 1 8.4.1 2m
在Kibana的“health”状态变为“green”后,我们用一个外部IP地址来访问Kibana。
$ kubectl expose deployment quickstart-kb \ --type=LoadBalancer \ --port 5601 \ --target-port 5601 service/quickstart-kb exposed
然后GKE提供一个LoadBalancer类型的服务对象来引导Kubernetes集群和后端Kibana pod之外的流量。
$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.28.0.1 <none> 443/TCP 1h quickstart-es-default ClusterIP None <none> 9200/TCP 1h quickstart-es-http ClusterIP 10.28.0.145 <none> 9200/TCP 1h quickstart-es-internal-http ClusterIP 10.28.3.117 <none> 9200/TCP 1h quickstart-es-transport ClusterIP None <none> 9300/TCP 1h quickstart-kb LoadBalancer 10.28.5.239 34.70.116.77 5601:30503/TCP 40s quickstart-kb-http ClusterIP 10.28.3.84 <none> 5601/TCP 1h
在本例中,创建了一个外部IP(34.70.116.77)来访问Kibana实例。
Kibana登录信息可以通过以下命令获取:
$ kubectl get secret quickstart-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode; echo
接下来,我们使用用户名elastic从浏览器访问Kibana实例。
Kibana 的配置
2. 点击 Create data view.
3. 命名新创建的数据视图并输入索引模式。例如,gke-eck-tutorial。从filebeat-8.4.1数据流导入索引模式。
4. 我们可以从创建的Kubernetes集群中查看pod的日志。 如果所有这些先决条件都已满足,那么恭喜你!现在我们可以进入下一个阶段——建立一个GKE集群。
此处包含的所有数据和信息仅供参考,Ampere 保留更改它的权利,恕不另行通知。本文档可能包含技术错误、遗漏和印刷错误,Ampere 没有义务更新或更正此信息。 Ampere 不作任何形式的陈述或保证,包括但不限于对不侵权、适销性或适用于特定目的的明示或暗示保证,并且不承担任何形式的责任。所有信息均“按原样”提供。本文件不是 Ampere 的要约或具有约束力的承诺。使用此处设想的产品需要随后的谈判和最终协议的执行,或者受 Ampere 的商品销售条款和条件的约束。
与 Ampere 测试中使用的不同的系统配置、组件、软件版本和测试环境可能会导致与 Ampere 获得的测量结果不同。
©2022 Ampere Computing 版权所有。Ampere、Ampere Computing、Altra和“A”标志均为Ampere Computing的注册商标或商标。Arm是Arm有限公司(或其子公司)的注册商标。本出版物中使用的所有其他产品名称仅用于识别目的,可能是其各自公司的商标。
Ampere Computing®/ 4655 Great America Parkway, Suite 601 / Santa Clara, CA 95054 / amperecomputing.com