采集容器文本日志或容器标准输出之前,需要先在 Kubernetes 集群中安装 LogCollector,并配置相关环境。本文介绍通过 DaemonSet 方式安装 LogCollector 的操作步骤。
本文以 DaemonSet 方式为例,介绍如何在 Kubernetes 集群上安装 LogCollector。在安装的过程中,主要完成以下步骤:
登录待安装 LogCollector 的 Kubernetes 集群,然后根据地域与网络类型,执行对应的下载命令,将 LogCollector 下载到指定目录下。
wget https://logcollector-cn-beijing.tos-cn-beijing.ivolces.com/logcollector-k8s.tgz; tar xvf logcollector-k8s.tgz; chmod 744 ./logcollector-k8s/logcollector-k8s-custom-install.sh
wget https://logcollector-cn-guangzhou.tos-cn-guangzhou.volces.com/logcollector-k8s.tgz; tar xvf logcollector-k8s.tgz; chmod 744 ./logcollector-k8s/logcollector-k8s-custom-install.sh
打开配置文件logcollector-k8s/values.yaml
。
根据实际情况替换其中的参数。
# =================TLS Common Config================= # TLS's endpoint: https://www.volcengine.com/docs/6470/73641, eg https://tls-cn-beijing.volces.com endpoint: https://tls-cn-beijing.volces.com # TLS's region-ID: cn-beijing, cn-shanghai, cn-guangzhou region: cn-beijing # =================TLS Authority Config================= # https://www.volcengine.com/docs/6291/65568 # Access Key ID secret_id: XXXXXXXXXXBcFk4C8sbmXQ8i65XXXXXXXXXX #Secret Access Key secret_key: XXXXXXXXXX4tX5SHyXv6tZXXXXXXXXXX # =================LogCollector Config================= # host group's identifiers, see https://www.volcengine.com/docs/6470/107375 # if you want to use ip-type host group, you can comment or delete this. # Multiple identifiers are separated by commas(,) label: your label # =================LogCollector Container Config================= # the namespace that you want to install, please make sure this namespace exist namespace: ns # logcollector's image address, see https://www.volcengine.com/docs/6470/1158004 # if you don't make sure, you can comment or delete this. This shell will find it by region. logcollector-image: img # The storage path of LogCollector's CheckPoint file which ensures that there will be no # repeated collection after the LogCollector's Pod restarts. logcollector-data-dir: dir
参数说明如下:
参数 | 示例 | 说明 |
---|---|---|
endpoint | https://tls-cn-beijing.volces.com | |
region | cn-beijing | 日志项目所在的地域 ID。详细说明请参考服务地址。 |
secret_id | AK******** | 火山引擎账号或 IAM 用户的 Access Key ID。 |
secret_key | TUdZ******** | 火山引擎账号或 IAM 用户的 Secret Access Key。 |
label | http_module | 机器的自定义标识,用于将此机器添加到对应的机器组中。 |
namespace | kube-system | 命名空间。 |
logcollector-image | logcollector-cn-beijing.cr.volces.com/logcollector/logcollector:latest | LogCollector的镜像地址。最新版本镜像地址请参考 LogCollector 镜像地址。 |
logcollector-data-dir | /var/lib/logcollector-data | LogCollector 的 CheckPoint 状态的存储目录,保证 LogCollector 所在 Pod 重启之后 LogCollector 不会重复采集日志。 |
执行如下命令,安装 LogCollector DaemonSet。
cd logcollector-k8s bash ./logcollector-k8s-custom-install.sh;
此步骤会创建一个 ConfigMap,并在其中添加日志服务的配置信息。
登录需要安装 LogCollector 的 Kubernetes 集群。
创建 LogCollector 所需的命名空间(namespace)。
如果命名空间已存在,则跳过此步骤。
kubectl create namespace ${namespace}
创建一个 YAML 文件,名为 logcollector_config.yaml
。
vim logcollector_config.yaml
编辑 YAML 文件,并在 YAML 文件中输入以下内容。
根据实际情况,完成如下参数配置。
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 | 日志项目所在的地域。 日志服务地域及对应ID请参考服务入口。 |
secret_id | AK******** | 火山引擎账号或 IAM 用户的 Access Key ID。 |
secret_key | TUdZ******** | 火山引擎主账号或 IAM 用户的 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 创建 ConfigMap中设置的命名空间。 |
执行如下命令使 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 创建 ConfigMap中设置的命名空间。 |
执行如下命令使 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 创建 ConfigMap中设置的命名空间。 |
执行如下命令使 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 - name: MAX_PROCS valueFrom: resourceFieldRef: containerName: logcollector resource: limits.cpu 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 创建 ConfigMap中设置的命名空间。 |
image | logcollector-cn-beijing.cr.volces.com/logcollector/logcollector:latest | LogCollector 的镜像地址。最新版本镜像地址请参考 LogCollector 镜像地址。 |
path | /var/lib/logcollector-data | LogCollector 的 CheckPoint 状态的存储目录,保证 LogCollector 所在 Pod 重启之后 LogCollector 不会重复采集。 |
执行如下命令使 Daemonset 配置生效。
kubectl apply -f logcollector_ds.yaml
日志服务在各个区域提供的最新版本 LogCollector 镜像地址如下:
地域 | 镜像地址 |
---|---|
华北2(北京) |
|
华东2(上海) |
|
华南1(广州) |
|
柔佛(亚太东南) |
|