采集容器文本日志或容器标准输出之前,需要先在 Kubernetes 集群中安装 LogCollector,并配置相关环境。本文介绍通过 DaemonSet 方式安装 LogCollector 的操作步骤。
通过 DaemonSet 方式在 Kubernetes 集群上安装 LogCollector 后,LogCollector 能够采集其他 Pod 内的容器文本日志或容器标准输出。在安装的过程中,主要完成以下步骤。
说明
已安装 Helm 3 客户端(3.7 之后版本)。具体操作,请参考Helm。
登录待安装 LogCollector 的 Kubernetes 集群,然后根据集群所在地域,执行对应的下载命令,下载 LogCollector Chart 包。
helm pull oci://logcollector-cn-beijing.cr.volces.com/logcollector/logcollector --version 0.1.0
执行以下命令部署 LogCollector Chart 包。
helm install logcollector logcollector-0.1.0.tgz \
--namespace={namespace} \
--set region={region} \
--set endpoint={endpoint} \
--set secret_id={secret_id} \
--set secret_key={secret_key} \
--set label={label} \
--set image={image} \
--set logcollector_data={logcollector_data}
注意
kubectl delete clusterrole logcollector
删除该 ClusterRole。kubectl delete clusterrolebinding logcollector
删除该 ClusterRoleBinding。其中,region
、endpoint
、secret_id
、secret_key
、label
、image
、logcollector-data
为必选参数,详细说明如下。
参数 | 是否必选 | 示例 | 说明 |
---|---|---|---|
region | 必选 | cn-beijing | 日志项目所在的地域 ID。详细说明请参考服务地址。 |
endpoint | 必选 | https://tls-cn-beijing.volces.com | |
secret_id | 必选 | AK******** | 火山引擎账号或 IAM 用户的 Access Key ID。 |
secret_key | 必选 | TUdZ******** | 火山引擎账号或 IAM 用户的 Secret Access Key。 |
label | 必选 | http_module | LogCollector 的 label 标识。
|
namespace | 必选 | kube-system | LogCollector 命名空间。只支持指定一个,且确保该命名空间已存在。 |
image | 必选 | logcollector-cn-beijing.cr.volces.com/logcollector/logcollector:latest | LogCollector 镜像地址。最新版本镜像地址请参考 LogCollector 镜像地址。 |
logcollector-data | 必选 | /var/lib/logcollector-data | 存储 LogCollector CheckPoint 状态的节点目录,用于确保 LogCollector Pod 重启之后 LogCollector 不会重复采集日志。 |
登录用于安装 LogCollector 的 Kubernetes 集群,然后根据集群地域与网络类型,执行对应的下载命令,将 LogCollector 安装包下载到指定目录下。
wget https://logcollector-cn-beijing.tos-cn-beijing.ivolces.com/logcollector.tgz; tar -xzf logcollector.tgz; chmod 755 ./logcollector/logcollector.sh
wget https://logcollector-cn-beijing.tos-cn-beijing.volces.com/logcollector.tgz; tar -xzf logcollector.tgz; chmod 755 ./logcollector/logcollector.sh
执行以下命令安装 LogCollector。
./logcollector/logcollector.sh install --region {region} --endpoint {endpoint} --secret_id {secret_id} --secret_key {secret_key} --label {label} --namespace {namespace} --image {image} --logcollector_data {logcollector_data}
其中,region
、endpoint
、secret_id
、secret_key
、label
、logcollector-data
为必选参数,namepspace
、image
为可选参数,详细说明如下。
参数 | 是否必选 | 示例 | 说明 |
---|---|---|---|
region | 必选 | cn-beijing | 日志项目所在的地域 ID。详细说明请参考服务地址。 |
endpoint | 必选 | https://tls-cn-beijing.volces.com | |
secret_id | 必选 | AK******** | 火山引擎账号或 IAM 用户的 Access Key ID。 |
secret_key | 必选 | TUdZ******** | 火山引擎账号或 IAM 用户的 Secret Access Key。 |
label | 必选 | http_module | LogCollector 的 label 标识。
|
namespace | 可选 | kube-system | LogCollector 命名空间。 |
image | 可选 | logcollector-cn-beijing.cr.volces.com/logcollector/logcollector:latest | LogCollector 镜像地址。如果没有指定镜像地址,将使用指定地域对应的最新版本镜像地址。最新版本镜像地址请参考 LogCollector 镜像地址。 |
logcollector-data | 必选 | /var/lib/logcollector-data | 存储 LogCollector CheckPoint 状态的节点目录,用于确保 LogCollector Pod 重启之后 LogCollector 不会重复采集日志。 |
此步骤会创建一个 Namespace。
登录需要安装 LogCollector 的 Kubernetes 集群。
创建一个 YAML 文件,名为 logcollector_ns.yaml。
vim logcollector_ns.yaml
编辑 YAML 文件,并在 YAML 文件中输入以下内容。
根据实际情况,完成如下参数配置。
apiVersion: v1
kind: Namespace
metadata:
name: <namespace>
参数说明如下:
参数 | 示例 | 说明 |
---|---|---|
name | kube-system | 命名空间名称。 |
执行如下命令使 Namespace 配置生效。
kubectl apply -f logcollector_ns.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 创建 Namespace中设置的命名空间。 |
执行如下命令使 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
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
执行如下命令使 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
subjects:
- kind: ServiceAccount
name: logcollector
namespace: <namespace>
roleRef:
kind: ClusterRole
name: logcollector
apiGroup: rbac.authorization.k8s.io
参数说明如下:
参数 | 示例 | 说明 |
---|---|---|
namespace | kube-system | 命名空间,输入您在1 创建 Namespace中设置的命名空间。 |
执行如下命令使 ClusterRoleBinding 配置生效。
kubectl apply -f logcollector_crb.yaml
为 LogCollector 创建一个 ConfigMap。
创建一个 YAML 文件,名为 logcollector_config.yaml
。
vim logcollector_config.yaml
在 YAML 文件中输入如下内容。
apiVersion: v1
kind: ConfigMap
metadata:
name: logcollector-config
namespace: <namespace>
data:
logcollector.yml: |
daemonset_mode: true
autodiscover:
providers:
- type: kubernetes
node: ${NODE_NAME}
output:
tls:
region: <region>
endpoint: <endpoint>
secret_id: <secret_id>
secret_key: <secret_key>
label: <label>
参数说明如下:
参数 | 示例 | 说明 |
---|---|---|
namespace | kube-system | 命名空间,输入您在1 创建 Namespace中设置的命名空间。 |
region | cn-beijing | 日志项目所在的地域 ID。详细说明请参考服务地址。 |
endpoint | https://tls-cn-beijing.volces.com | |
secret_id | AK******** | 火山引擎账号或 IAM 用户的 Access Key ID。 |
secret_key | TUdZ******** | 火山引擎账号或 IAM 用户的 Secret Access Key。 |
label | http_module | LogCollector 的 label 标识。
|
执行如下命令使 ConfigMap 配置生效。
kubectl apply -f logcollector_config.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
app.kubernetes.io/instance: logcollector
spec:
selector:
matchLabels:
k8s-app: logcollector
template:
metadata:
labels:
k8s-app: logcollector
spec:
serviceAccountName: logcollector
terminationGracePeriodSeconds: 65
containers:
- name: logcollector
image: <image>
imagePullPolicy: Always
args:
- /usr/local/container/logcollector/logcollectord
- -c
- /usr/local/container/logcollector/etc/logcollector.yml
- --httpprof
- 0.0.0.0:6060
securityContext:
runAsUser: 0
# If using Red Hat OpenShift, uncomment this:
# privileged: true
resources:
limits:
cpu: '2'
memory: 2Gi
requests:
cpu: '1'
memory: 1Gi
volumeMounts:
- name: logcollector-config
mountPath: /usr/local/container/logcollector/etc
readOnly: true
- name: logcollector-host
mountPath: /logcollector_host
mountPropagation: HostToContainer
readOnly: true
- name: logcollector-data
mountPath: /usr/local/container/logcollector/data
env:
- name: MAX_MEM
valueFrom:
resourceFieldRef:
containerName: logcollector
resource: limits.memory
- name: MAX_PROCS
valueFrom:
resourceFieldRef:
containerName: logcollector
resource: limits.cpu
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: NODE_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
volumes:
- name: logcollector-config
configMap:
defaultMode: 420
name: logcollector-config
- name: logcollector-host
hostPath:
path: /
- name: logcollector-data
hostPath:
path: <logcollector_data>
type: DirectoryOrCreate
参数说明如下:
参数 | 示例 | 说明 |
---|---|---|
namespace | kube-system | 命名空间。输入您在1 创建 Namespace中设置的命名空间。 |
image | logcollector-cn-beijing.cr.volces.com/logcollector/logcollector:latest | LogCollector 的镜像地址。最新版本镜像地址请参考 LogCollector 镜像地址。 |
logcollector-data | /var/lib/logcollector-data | 存储 LogCollector CheckPoint 状态的节点目录,保证 LogCollector Pod 重启之后 LogCollector 不会重复采集日志。 |
执行如下命令使 Daemonset 配置生效。
kubectl apply -f logcollector_ds.yaml
日志服务在各个区域提供的最新版本 LogCollector 镜像地址如下:
地域 | 镜像地址 |
---|---|
华北2(北京) |
|
华东2(上海) |
|
华南1(广州) |
|
柔佛(亚太东南) |
|