采集容器文本日志或容器标准输出之前,需要先在 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(广州) |
|
柔佛(亚太东南) |
|