kind: StatefulSet
metadata:
name: elasticsearch
namespace: elk
labels:
app: elasticsearch
spec:
podManagementPolicy: Parallel
serviceName: elasticsearch
replicas: 3
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
tolerations: #此配置是容忍污点可以使pod部署到master节点,可以去掉

  • key: “node-role.kubernetes.io/control-plane”
    operator: “Exists”
    effect: NoSchedule
    containers:
  • image: elasticsearch:7.17.10
    name: elasticsearch
    resources:
    limits:
    cpu: 1
    memory: 2Gi
    requests:
    cpu: 0.5
    memory: 500Mi
    env:
  • name: network.host
    value: “site
  • name: node.name
    value: “${HOSTNAME}”
  • name: discovery.zen.minimum_master_nodes
    value: “2”
  • name: discovery.seed_hosts #该参数用于告诉新加入集群的节点去哪里发现其他节点,它应该包含集群中已经在运行的一部分节点的主机名或IP地址,这里我使用无头服务的地址
    value: “elasticsearch-0.elasticsearch.elk.svc.cluster.local,elasticsearch-1.elasticsearch.elk.svc.cluster.local,elasticsearch-2.elasticsearch.elk.svc.cluster.local”
  • name: cluster.initial_master_nodes #这个参数用于指定初始主节点。当一个新的集群启动时,它会从这个列表中选择一个节点作为初始主节点,然后根据集群的情况选举其他的主节点
    value: “elasticsearch-0,elasticsearch-1,elasticsearch-2”
  • name: cluster.name
    value: “es-cluster”
  • name: ES_JAVA_OPTS
    value: “-Xms512m -Xmx512m”
    ports:
  • containerPort: 9200
    name: db
    protocol: TCP
  • name: inter
    containerPort: 9300
    volumeMounts:
  • name: elasticsearch-data
    mountPath: /usr/share/elasticsearch/data
    volumeClaimTemplates:
  • metadata:
    name: elasticsearch-data
    spec:
    storageClassName: “es-pv”
    accessModes: [ “ReadWriteMany” ]
    resources:
    requests:
    storage: 30Gi

创建elk服务的命名空间

kubectl create namespace elk

创建yaml文件的服务

kubectl create -f es-pv.yaml
kubectl create -f es-service-nodeport.yaml
kubectl create -f es-service.yaml
kubectl create -f es-setafulset.yaml

查看es服务是否正常启动

kubectl get pod -n elk

检查elasticsearch集群是否正常

http://10.1.60.119:30017/_cluster/state/master_node,nodes?pretty

可以看到集群中能正确识别到三个es节点

elasticsearch集群部署完成

部署kibana服务

这里使用deployment控制器部署kibana服务,使用service服务对外提供访问

创建deployment的yaml配置文件

vi kibana-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: kibana
namespace: elk
labels:
app: kibana
spec:
replicas: 1
selector:
matchLabels:
app: kibana
template:
metadata:
labels:
app: kibana
spec:
tolerations:

  • key: “node-role.kubernetes.io/control-plane”
    operator: “Exists”
    effect: NoSchedule
    containers:
  • name: kibana
    image: kibana:7.17.10
    resources:
    limits:
    cpu: 1
    memory: 1G
    requests:
    cpu: 0.5
    memory: 500Mi
    env:
  • name: ELASTICSEARCH_HOSTS
    value: http://elasticsearch:9200
    ports:
  • containerPort: 5601
    protocol: TCP

创建service的yaml配置文件

vi kibana-service.yaml

apiVersion: v1
kind: Service
metadata:
name: kibana
namespace: elk
spec:
ports:

  • port: 5601
    protocol: TCP
    targetPort: 5601
    nodePort: 30019
    type: NodePort
    selector:
    app: kibana

创建yaml文件的服务

kubectl create -f kibana-service.yaml
kubectl create -f kibana-deployment.yaml

查看kibana是否正常

kubectl get pod -n elk

部署logstash服务

logstash服务也是通过deployment控制器部署,需要使用到configmap存储logstash配置,还有service提供对外访问服务

编辑configmap的yaml配置文件

vi logstash-configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
name: logstash-configmap
namespace: elk
labels:
app: logstash
data:
logstash.conf: |
input {
beats {
port => 5044 #设置日志收集端口

codec => “json”

}
}
filter {
}
output {

stdout{ 该被注释的配置项用于将收集的日志输出到logstash的日志中,主要用于测试看收集的日志中包含哪些内容

codec => rubydebug

}

elasticsearch {
hosts => “elasticsearch:9200”
index => “nginx-%{+YYYY.MM.dd}”
}
}

编辑deployment的yaml配置文件

vi logstash-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: logstash
namespace: elk
spec:
replicas: 1
selector:
matchLabels:
app: logstash
template:
metadata:
labels:
app: logstash
spec:
containers:

  • name: logstash
    image: logstash:7.17.10
    imagePullPolicy: IfNotPresent
    ports:
  • containerPort: 5044
    volumeMounts:
  • name: config-volume
    mountPath: /usr/share/logstash/pipeline/
    volumes:
  • name: config-volume
    configMap:
    name: logstash-configmap
    items:
  • key: logstash.conf
    path: logstash.conf

编辑service的yaml配置文件(我这里是收集k8s内部署的服务日志,所以没开放对外访问)

vi logstash-service.yaml

apiVersion: v1
kind: Service
metadata:
name: logstash
namespace: elk
spec:
ports:

  • port: 5044
    targetPort: 5044
    protocol: TCP
    selector:
    app: logstash
    type: ClusterIP

创建yaml文件的服务

kubectl create -f logstash-configmap.yaml
kubectl create -f logstash-service.yaml
kubectl create -f logstash-deployment.yaml

查看logstash服务是否正常启动

kubectl get pod -n elk

部署filebeat服务

filebeat服务使用daemonset方式部署到k8s的所有工作节点上,用于收集容器日志,也需要使用configmap存储配置文件,还需要配置rbac赋权,因为用到了filebeat的自动收集模块,自动收集k8s集群的日志,需要对k8s集群进行访问,所以需要赋权

编辑rabc的yaml配置文件

vi filebeat-rbac.yaml

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
img

)]
[外链图片转存中…(img-PnbPysKI-1712526005034)]
[外链图片转存中…(img-fM26yz42-1712526005035)]
[外链图片转存中…(img-6nUCCHzU-1712526005035)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
[外链图片转存中…(img-L7mH1bRW-1712526005035)]

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐