最近更新时间:2023.12.12 10:52:11
首次发布时间:2022.05.07 14:30:55
采集容器文本日志或容器标准输出之前,需要先在 Kubernetes 集群中安装 LogCollector,并配置相关环境。本文介绍通过 DaemonSet 方式安装 LogCollector 的操作步骤。
本文以 DaemonSet 方式为例,介绍如何在 Kubernetes 集群上安装 LogCollector。在安装的过程中,主要完成以下步骤:
此步骤会创建一个 ConfigMap,并在其中添加日志服务的配置信息。
登录需要安装 LogCollector 的 Kubernetes 集群。
创建 LogCollector 所需的命名空间(namespace)。
如果命名空间已存在,则跳过此步骤。
kubectl create namespace ${namespace}
创建一个 YAML 文件,名为 logcollector_config.yaml
。
vim logcollector_config.yaml
编辑 YAML 文件,并在 YAML 文件中输入以下内容。
根据实际情况,在 output.tls
部分配置相关鉴权参数。
apiVersion: v1 kind: ConfigMap metadata: name: logcollector-config namespace: ${namespace} data: filebeat.yml: | filebeat: deploy_in_container: true autodiscover: providers: - type: kubernetes output.tls: endpoint: ${volc_endpoint} region: ${volc_region} secret_id: ${your_ak} secret_key: ${your_sk} label: ${your_labels} logging.level: info logging.to_files: true logging.files: name: filebeat keepfiles: 7 permissions: 0644
参数说明如下:
参数 | 示例 | 说明 |
---|---|---|
namespace | kube-system | 命名空间。只能指定一个命名空间。 |
endpoint | https://tls-cn-beijing.ivolces.com | 日志服务连接域名,即服务地址。登录日志服务控制台后,在日志项目的详情页中查看连接域名。日志服务支持的地域及对应服务地址请参考服务入口。 |
region | cn-beijing | 日志项目所在的地域(Region)。 日志服务地域及对应ID请参考服务入口。 |
secret_id | AK******** | 火山引擎主账号或子账号的 Access Key ID。在火山引擎控制台密钥管理页面,根据页面提示查看并复制 Access Key ID。 |
secret_key | TUdZ******** | 火山引擎主账号或子账号的 Secret Access Key。 在火山引擎控制台密钥管理页面,根据页面提示查看并复制Secret Access Key。 |
label | http_module | 机器的自定义标识。用于将此机器添加到对应的机器组中。多个标识之间通过逗号(,)分隔。 |
执行如下命令使 ConfigMap 配置生效。
kubectl apply -f logcollector_config.yaml
为 LogCollector 创建一个 ServiceAccount,并配置基本的身份信息。
创建一个 YAML 文件,名为 logcollector_sa.yaml
。
vim logcollector_sa.yaml
在 YAML 文件中输入如下内容。
apiVersion: v1 kind: ServiceAccount metadata: name: logcollector namespace: ${namespace}
参数 | 示例 | 说明 |
---|---|---|
namespace | kube-system | 命名空间。只能指定一个命名空间,且必须和步骤 1 中设置的命名空间相同。 |
执行如下命令使 ServiceAccount 配置生效。
kubectl apply -f logcollector_sa.yaml
为 LogCollector 创建 ClusterRole。
创建一个 YAML 文件,名为 logcollector_cr.yaml
。
vim logcollector_cr.yaml
在 YAML 文件中输入如下内容。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: logcollector namespace: ${namespace} rules: - apiGroups: - "" resources: - pods - nodes - namespaces verbs: - get - list - watch - apiGroups: - apps resources: - replicasets - deployments - daemonsets - statefulsets verbs: - watch - list - get - apiGroups: - batch resources: - jobs - cronjobs verbs: - watch - list - get
参数 | 示例 | 说明 |
---|---|---|
namespace | kube-system | 命名空间。只能指定一个命名空间,且必须和步骤 1 中设置的命名空间相同。 |
执行如下命令使 ClusterRole 配置生效。
kubectl apply -f logcollector_cr.yaml
为 LogCollector 创建 ClusterRoleBinding。
创建一个 YAML 文件,名为 logcollector_crb.yaml
。
vim logcollector_crb.yaml
在 YAML 文件中输入如下内容。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: logcollector namespace: ${namespace} subjects: - kind: ServiceAccount name: logcollector namespace: ${namespace} roleRef: kind: ClusterRole name: logcollector apiGroup: rbac.authorization.k8s.io
参数说明如下:
参数 | 示例 | 说明 |
---|---|---|
namespace | kube-system | 命名空间。只能指定一个,且必须和步骤 1 中设置的命名空间相同。 |
执行如下命令使 ClusterRoleBinding 配置生效。
kubectl apply -f logcollector_crb.yaml
为 LogCollector 创建 Daemonset,用于采集当前节点中的日志。
创建一个 YAML 文件,名为 logcollector_ds.yaml
。
vim logcollector_ds.yaml
在 YAML 文件中输入如下内容,并根据实际情况替换其中的参数。
apiVersion: apps/v1 kind: DaemonSet metadata: name: logcollector namespace: ${namespace} labels: k8s-app: logcollector spec: selector: matchLabels: k8s-app: logcollector template: metadata: labels: k8s-app: logcollector spec: serviceAccountName: logcollector terminationGracePeriodSeconds: 30 containers: - name: logcollector image: ${logcollector-image} imagePullPolicy: Always args: - /usr/local/container/filebeat-7.12.0/filebeat - -c - /usr/local/container/filebeat-7.12.0/etc/filebeat.yml securityContext: runAsUser: 0 # If using Red Hat OpenShift, uncomment this: # privileged: true livenessProbe: initialDelaySeconds: 10 periodSeconds: 10 exec: command: - sh - -c - | filebeat_num=`ps -ef 2>/dev/null | grep "filebeat" | grep -v "grep" | wc -l` if [ $filebeat_num -eq 0 ]; then return 1 fi resources: limits: cpu: '2' memory: 2Gi requests: cpu: '1' memory: 1Gi volumeMounts: - name: logcollector-config mountPath: /usr/local/container/filebeat-7.12.0/etc/ readOnly: true - name: logcollector-host mountPath: /logcollector_host mountPropagation: HostToContainer readOnly: true - name: logcollector-data mountPath: /usr/local/container/filebeat-7.12.0/data env: - name: MAX_MEM valueFrom: resourceFieldRef: containerName: logcollector resource: limits.memory volumes: - name: logcollector-config configMap: defaultMode: 420 name: logcollector-config - name: logcollector-host hostPath: path: / - name: logcollector-data hostPath: path: ${logcollector-data-dir} type: DirectoryOrCreate
参数说明如下:
参数 | 示例 | 说明 |
---|---|---|
namespace | kube-system | 命名空间。只能指定一个,且必须和步骤 1 中设置的命名空间相同。 |
image | logcollector-cn-beijing.cr.volces.com/logcollector/logcollector:latest | LogCollector 的镜像地址。最新版本镜像地址请参考 LogCollector 镜像地址。 |
path | /var/lib/logcollector-data | LogCollector的CheckPoint状态的存储目录,保证 LogCollector 的 Pod 重启之后不会重复采集。 |
执行如下命令使 Daemonset 配置生效。
kubectl apply -f logcollector_ds.yaml
日志服务在各个区域提供的最新版本 LogCollector 镜像地址如下:
地域 | 镜像地址 |
---|---|
华北2(北京) |
|
华东2(上海) |
|
华南1(广州) |
|