一、流程概述
要实现K8S使用Helm离线部署EFK,首先需要离线下载EFK相关镜像,然后使用Helm进行部署。
下面是整个流程的步骤概览:
步骤 | 操作
------------ | -------------
准备离线下载配置 | 配置使用阿里云的镜像服务、使用harbor仓库
离线下载镜像 | 使用离线下载配置下载EFK相关镜像
创建namespace和PV | 创建存储和命名空间
创建Deployment | 创建Elasticsearch、Fluentd和Kibana的Deployment
创建Service | 创建Elasticsearch、Fluentd和Kibana的Service
部署EFK | 运行部署命令
二、具体步骤
1. 准备离线下载配置
首先,我们需要配置使用阿里云的镜像服务和使用harbor仓库。如下所示:
```shell
# 配置阿里云镜像服务
$ vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}
# 配置Helm使用harbor仓库
$ helm repo add harbor https://harbor.example.com/chartrepo/library --username=admin --password=xxx
```
2. 离线下载镜像
执行下面的命令,离线下载EFK相关镜像:
```shell
$ docker pull alpine:3.14.2
$ docker save alpine:3.14.2 > alpine_3.14.2.tar
$ docker pull fluentd:v1.12.5-debian-1
$ docker save fluentd:v1.12.5-debian-1 > fluentd_v1.12.5-debian-1.tar
$ docker pull fluentd:v1.11.5-debian-1
$ docker save fluentd:v1.11.5-debian-1 > fluentd_v1.11.5-debian-1.tar
$ docker pull es:7.12.0
$ docker save es:7.12.0 > es_7.12.0.tar
$ docker pull kibana:7.12.0
$ docker save kibana:7.12.0 > kibana_7.12.0.tar
将下载的镜像文件复制到K8S集群中,例如使用scp命令将文件复制到目标服务器上。
```
3. 创建namespace和PV
执行下列命令,创建namespace和PV:
```shell
# 创建namespace
$ kubectl create namespace logging
# 创建PV
$ vim efk-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: data-efk
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: slow
local:
path: /data-efk
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node1
$ kubectl apply -f efk-pv.yaml
```
4. 创建Deployment
接下来,我们需要创建Elasticsearch、Fluentd和Kibana的Deployment。执行以下命令:
```shell
# 创建Elasticsearch Deployment
$ vim es.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: es
namespace: logging
spec:
replicas: 1
selector:
matchLabels:
app: es
template:
metadata:
labels:
app: es
spec:
containers:
- name: es
image: es:7.12.0 # 替换为你的镜像地址
ports:
- containerPort: 9200
```
```shell
# 创建Fluentd Deployment
$ vim fluentd.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: fluentd
namespace: logging
spec:
replicas: 1
selector:
matchLabels:
app: fluentd
template:
metadata:
labels:
app: fluentd
spec:
containers:
- name: fluentd
image: fluentd:v1.12.5-debian-1 # 替换为你的镜像地址
volumeMounts:
- name: data-efk
mountPath: /var/log
volumes:
- name: data-efk
persistentVolumeClaim:
claimName: data-efk-claim
```
```shell
# 创建Kibana Deployment
$ vim kibana.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: kibana
namespace: logging
spec:
replicas: 1
selector:
matchLabels:
app: kibana
template:
metadata:
labels:
app: kibana
spec:
containers:
- name: kibana
image: kibana:7.12.0 # 替换为你的镜像地址
ports:
- containerPort: 5601
```
5. 创建Service
为了让外部能够访问到EFK组件,我们需要创建对应的Service。执行以下命令:
```shell
# 创建Elasticsearch Service
$ vim es-service.yaml
apiVersion: v1
kind: Service
metadata:
name: es
namespace: logging
spec:
selector:
app: es
ports:
- protocol: TCP
port: 9200
targetPort: 9200
type: NodePort
```
```shell
# 创建Kibana Service
$ vim kibana-service.yaml
apiVersion: v1
kind: Service
metadata:
name: kibana
namespace: logging
spec:
selector:
app: kibana
ports:
- protocol: TCP
port: 5601
targetPort: 5601
type: NodePort
```
6. 部署EFK
最后,我们可以运行部署命令,部署EFK组件:
```shell
# 部署EFK
$ helm install efk harbor/efk --version=1.0.0 --values=values.yaml -n logging
```
至此,我们已经完成了K8S使用Helm离线部署EFK的操作。小白只需按照以上步骤进行操作,即可成功实现关键词。