EFK(elasticsearch fluentd kibana)在k8s上的部署(arm环境下)

项目目标

     在k8s上部署efk日志采集系统

项目拆解

1.镜像构建

  a.elasticsearch
 先使用命令获取es的arm版镜像,这里使用的es是7.3.2版本的
docker pull gagara/elasticsearch-oss-arm64:7.3.2
通过:         
      git clone  https://github.com/kubernetes/kubernetes.git
      下载代码,然后切换tag,切换到和k8s版本一致的tag   v1.16.0
      git checkout   v1.16.0
      然后进入上述目录的es-image目录下(目录为kubernetes/cluster/addons/fluentd-elasticsearch/),
      修改Dockerfile文件中使用的es镜像为   gagara/elasticsearch-oss-arm64:7.3.2

      然后修改Dockerfile中第一行golang的镜像(dockerfile中的版本没有arm的镜像)为1.15.0-alpine

      FROM golang:1.12.0 AS builder---->FROM golang:1.15.0-alpine AS builder

     由于go语言的mod被墙了,需要在dockerfiled的第二行新增两个环境变量:

   ENV  GOPROXY https://goproxy.io
   ENV  GO111MODULE on

然后修改当前目录下脚本elasticsearch_logging_discovery.go为下面这样:

/*
Copyright 2017 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package main

import (
        "flag"
        "fmt"
        "net"
        "os"
        "strconv"
        "strings"
        "time"

        corev1 "k8s.io/api/core/v1"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        clientset "k8s.io/client-go/kubernetes"
        restclient "k8s.io/client-go/rest"
        "k8s.io/client-go/tools/clientcmd"
        clientapi "k8s.io/client-go/tools/clientcmd/api"
        "k8s.io/klog/v2"
        utilnet "k8s.io/utils/net"
)

func buildConfigFromEnvs(masterURL, kubeconfigPath string) (*restclient.Config, error) {
        if kubeconfigPath == "" && masterURL == "" {
                kubeconfig, err := restclient.InClusterConfig()
                if err != nil {
                        return nil, err
                }

                return kubeconfig, nil
        }

        return clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
                &clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeconfigPath},
                &clientcmd.ConfigOverrides{ClusterInfo: clientapi.Cluster{Server: masterURL}}).ClientConfig()
}

func flattenSubsets(subsets []corev1.EndpointSubset) []string {
        ips := []string{}
        for _, ss := range subsets {
                for _, addr := range ss.Addresses {
                        if utilnet.IsIPv6String(addr.IP) {
                                ips = append(ips, fmt.Sprintf(`"[%s]"`, addr.IP))
                        } else {
                                ips = append(ips, fmt.Sprintf(`"%s"`, addr.IP))
                        }
                }
        }
        return ips
}

func getAdvertiseAddress() (string, error) {
        addrs, err := net.InterfaceAddrs()
        if err != nil {
                return "", err
        }

        for _, addr := range addrs {
                if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
                        return ipnet.IP.String(), nil
                }
        }

        return "", fmt.Errorf("no non-loopback address is available")
}

func main() {
        flag.Parse()

        klog.Info("Kubernetes Elasticsearch logging discovery")

        advertiseAddress, err := getAdvertiseAddress()
        if err != nil {
                klog.Fatalf("Failed to get valid advertise address: %v", err)
        }
        fmt.Printf("network.host: \"%s\"\n\n", advertiseAddress)

        cc, err := buildConfigFromEnvs(os.Getenv("APISERVER_HOST"), os.Getenv("KUBE_CONFIG_FILE"))
        if err != nil {
                klog.Fatalf("Failed to make client: %v", err)
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值