在树莓派(Raspberry Pi)上使用arm64架构构建Kubernetes上的Elasticsearch和Kibana环境

Kibana-7.9.1

由于成功创建了适用于arm64的Kibana容器镜像,所以我尝试在Kubernetes上进行部署。
(有关创建容器镜像的方法和使用Docker Compose进行部署的更多详情,请参考此处。)

Helm的安装

wget https://get.helm.sh/helm-v3.3.1-linux-arm64.tar.gz
tar zxvf helm-v3.3.1-linux-arm64.tar.gz
cd linux-arm64/
sudo install helm /usr/local/bin

确认操作

 $ helm version
version.BuildInfo{Version:"v3.3.1", GitCommit:"249e5215cde0c3fa72e27eb7a30e8d55c9696144", GitTreeState:"clean", GoVersion:"go1.14.7"}
 $ 

Helm的Elastic存储库配置。

弹性堆栈的Kubernetes Helm Charts
https://github.com/elastic/helm-charts

helm repo add elastic https://helm.elastic.co
$ helm search repo elastic
NAME                    CHART VERSION   APP VERSION     DESCRIPTION                                       
elastic/elasticsearch   7.9.1           7.9.1           Official Elastic helm chart for Elasticsearch     
elastic/apm-server      7.9.1           7.9.1           Official Elastic helm chart for Elastic APM Server
elastic/filebeat        7.9.1           7.9.1           Official Elastic helm chart for Filebeat          
elastic/kibana          7.9.1           7.9.1           Official Elastic helm chart for Kibana            
elastic/logstash        7.9.1           7.9.1           Official Elastic helm chart for Logstash          
elastic/metricbeat      7.9.1           7.9.1           Official Elastic helm chart for Metricbeat        
 $ 

建立Elasticsearch环境

创建PersistentVolume

在安装Helm之前创建一个持久卷。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: es-pv-volume
  labels:
    type: local
    app: elasticsearch-master
spec:
  storageClassName: standard
  capacity:
    storage: 1Gi
  persistentVolumeReclaimPolicy: Delete
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/data/elasticsearch"

当/data/elasticsearch目录自动创建时,由于root用户成为其所有者,导致Pod的启动失败,因此在主机操作系统上先进行准备。

mkdir /data/elasticsearch
chown 1000:1000 /data/elasticsearch

安装 Elasticsearch Helm Chart

有一个适用于minikube环境的示例,我基于它进行了修改。只添加了imageTag和replicas字段。

---
imageTag: 7.9.1

replicas: 1

# Permit co-located instances for solitary minikube virtual machines.
antiAffinity: "soft"

# Shrink default JVM heap.
esJavaOpts: "-Xmx128m -Xms128m"

# Allocate smaller chunks of memory per pod.
resources:
  requests:
    cpu: "100m"
    memory: "512M"
  limits:
    cpu: "1000m"
    memory: "512M"

# Request smaller persistent volumes.
volumeClaimTemplate:
  accessModes: [ "ReadWriteOnce" ]
  storageClassName: "standard"
  resources:
    requests:
      storage: 100M
helm install elasticsearch elastic/elasticsearch --values ./values.yml

如果顺利的话,将会启动整套系统。

 $ kubectl get service,statefulset,pod,persistentvolumeclaim,persistentvolume --namespace=default -l app=elasticsearch-master
NAME                                    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)             AGE
service/elasticsearch-master            ClusterIP   10.103.52.98   <none>        9200/TCP,9300/TCP   6h38m
service/elasticsearch-master-headless   ClusterIP   None           <none>        9200/TCP,9300/TCP   6h38m

NAME                                    READY   AGE
statefulset.apps/elasticsearch-master   1/1     6h38m

NAME                         READY   STATUS    RESTARTS   AGE
pod/elasticsearch-master-0   1/1     Running   2          6h38m

NAME                                                                STATUS   VOLUME         CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/elasticsearch-master-elasticsearch-master-0   Bound    es-pv-volume   1Gi        RWO            standard       6h38m

NAME                            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                                 STORAGECLASS   REASON   AGE
persistentvolume/es-pv-volume   1Gi        RWO            Delete           Bound    default/elasticsearch-master-elasticsearch-master-0   standard                6h43m
 $ 

建立Kibana环境

安装Kibana Helm图表

Kibana也准备了values.yml文件。

因为Kibana没有提供针对arm64的容器映像,所以我们自己创建了一个。
(更详细的说明请点击此处)

---
image: "ghcr.io/moritalous/ghcr/kibana-arm64"
imageTag: 7.9.1

service:
  type: NodePort
  port: 5601
  nodePort: 30601
helm install kibana elastic/kibana --values ./values.yml

启动确认

$ kubectl get service,deployment,pod --namespace=default -l app=kibana
NAME                    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/kibana-kibana   NodePort   10.109.131.74   <none>        5601:30601/TCP   8h

NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/kibana-kibana   1/1     1            1           8h

NAME                                 READY   STATUS    RESTARTS   AGE
pod/kibana-kibana-56b7b6c95c-vj6sv   1/1     Running   0          7h37m
 $ 

确认动作

http://树莓派.local:30601/

image.png
广告
将在 10 秒后关闭
bannerAds