为 syslog 创建 sidecar 容器

您可以为 syslog 配置一个 sidecar 容器,以在与 NCP 相同的 pod 中运行。以下过程假设 syslog 代理映像为 example/rsyslog。
  1. 配置 NCP 和 NSX 节点代理以记录到一个文件中。
    在 NCP 和 NSX 节点代理的 yaml 文件中,设置 log_dir 参数并指定要挂载的卷。例如,
    [DEFAULT] log_dir = /var/log/nsx-ujo/ ... spec: ... containers: - name: nsx-ncp ... volumeMounts: - name: nsx-ujo-log-dir # Mount path must match [DEFAULT] option "log_dir" mountPath: /var/log/nsx-ujo volumes: ... - name: nsx-ujo-log-dir hostPath: path: /var/log/nsx-ujo
    您可以设置
    log_file
    参数以更改日志文件名称。默认名称为
    ncp.log
    nsx_node_agent.log
    nsx_kube_proxy.log
    。如果
    log_dir
    选项设置为
    /var/log/nsx-ujo
    以外的路径,必须创建一个 hostPath 卷或 emptyDir 卷并挂载到相应的 pod 规范。
  2. 确保主机路径存在且可由用户
    nsx-ncp
    写入。
    1. 运行以下命令。
      mkdir -p <host-filesystem-log-dir-path> chmod +w <host-filesystem-log-dir-path>
    2. 添加用户
      nsx-ncp
      或将主机路径模式更改为 777。
      useradd -s /bin/bash nsx-ncp chown nsx-ncp:nsx-ncp <host-filesystem-log-dir-path> or chmod 777 <host-filesystem-log-dir-path>
  3. 在 NCP pod 的规范 yaml 文件中,为 syslog 添加一个 ConfigMap。例如,
    kind: ConfigMap metadata: name: rsyslog-config labels: version: v1 data: ncp.conf: | module(load="imfile") ruleset(name="remote") { action(type="omfwd" Protocol="tcp" Target="nsx.example.com" Port="514") stop } input(type="imfile" File="/var/log/nsx-ujo/ncp.log" Tag="ncp" Ruleset="remote"
  4. 在 NCP pod 的 yaml 文件中,添加 rsyslog 容器并挂载相应的卷,rsyslog 可以在其中查找配置数据并从其他容器中读取日志。例如,
    spec: containers: - name: nsx-ncp ... - name: rsyslog image: example/rsyslog imagePullPolicy: IfNotPresent volumeMounts: - name: rsyslog-config-volume mountPath: /etc/rsyslog.d readOnly: true - name: nsx-ujo-log-dir mountPath: /var/log/nsx-ujo volumes: ... - name: rsyslog-config-volume configMap: name: rsyslog-config - name: nsx-ujo-log-dir hostPath: path: <host-filesystem-log-dir-path>