如何编辑 Kubeletlog等级冗余并且在 OpenShift4中收集日志

本文基于 OpenShift 4版本

为了处理一些节点上发生的故障, 建议通过设置 kubelet log 等级去减少日志冗余

在 OpenShift 安装好之后,一般 logs 可以用以下命令得到

oc adm node-logs --role master -u kubelet
oc adm node-logs --role worker -u kubelet

或者在 node 内部运行这个

journalctl -b -f -u kubelet.service

也可以通过以下命令来收集 master 节点日志

sudo tail -f /var/log/containers/*

也可以用以下命令直接收集所有的节点

- for n in $(oc get node --no-headers | awk '{print $1}'); do oc adm node-logs $n | gzip > $n.log.gz; done

临时设置 Kubelet , 有效性仅为当前一次,不会影响之后的配置

如果你不想更改 machine-config设置(spec":{“paused”:false}}) 只想临时改变 kubelet, 而不会影响service, 可以用以下这种方法

oc debug node/<nodename>
chroot /host

在这里插入图片描述

命令行类似这样的时候,输入命令

systemctl cat kubelet
# /etc/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
Wants=rpc-statd.service crio.service
After=crio.service

[Service]
Type=notify
ExecStartPre=/bin/mkdir --parents /etc/kubernetes/manifests
ExecStartPre=/bin/rm -f /var/lib/kubelet/cpu_manager_state
EnvironmentFile=/etc/os-release
EnvironmentFile=-/etc/kubernetes/kubelet-workaround
EnvironmentFile=-/etc/kubernetes/kubelet-env

ExecStart=/usr/bin/hyperkube \
kubelet \
  --config=/etc/kubernetes/kubelet.conf \
  --bootstrap-kubeconfig=/etc/kubernetes/kubeconfig \
  --rotate-certificates \
  --kubeconfig=/var/lib/kubelet/kubeconfig \
  --container-runtime=remote \
  --container-runtime-endpoint=/var/run/crio/crio.sock \
  --allow-privileged \
  --node-labels=node-role.kubernetes.io/master,node.openshift.io/os_id=${ID} \
  --minimum-container-ttl-duration=6m0s \
  --client-ca-file=/etc/kubernetes/ca.crt \
  --cloud-provider= \
  --volume-plugin-dir=/etc/kubernetes/kubelet-plugins/volume/exec \
  \
  --anonymous-auth=false \
  --v=1 \

Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
# /etc/systemd/system/kubelet.service.d/10-default-env.conf

定义新的冗余标准在 /etc/systemd/system/kubelet.service 并且重启 service. 在下面的例子,将 v=1 变成 v=8

sed -i -e 's/--v=1/--v=8/g' /etc/systemd/system/kubelet.service
systemctl daemon-reload
systemctl restart kubelet

设置完成之后,收集完 logs 日志再把数值改到原先的值, 否则, 你可能会看到以下错误

E0514 12:47:17.998892    2281 daemon.go:1350] content mismatch for file /etc/systemd/system/kubelet.service: [Unit]

为 OpenShift4.4 和 OpenShift 4.5 永久配置kubelet log level

按照以下步骤,创建一个新的MachineConfig,并等待machineconfigo操作符将更改卷展到每个节点。您需要为每个角色创建一个machineconfighmachineconfiguration.openshift.io/role:
将要更改 < role >

警示: 这里会被警告, 节点会一个个被重启

如果你想将 kubelet level 变成 2 , 可以按照以下步骤

  • 后却 base 64 string code 为变量
$ cat << EOF | base64
KUBELET_LOG_LEVEL=2
EOF
S1VCRUxFVF9MT0dfTEVWRUw9Mgo=

创建一个新的 MachineConfig CustomeResource 并且添加前面的 base 64的值

apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: worker
  name: 02-worker-kubelet-env-config
spec:
  config:
    ignition:
      config: {}
      security:
        tls: {}
      timeouts: {}
      version: 2.2.0
    networkd: {}
    passwd: {}
    storage:
      files:
      - contents:
          source: data:text/plain;charset=utf-8;base64,S1VCRUxFVF9MT0dfTEVWRUw9NAo=    # <<<<<< Here, after the coma (,)
          verification: {}
        filesystem: root
        mode: 420
        path: /etc/kubernetes/kubelet-env
  osImageURL: ""

适用新的 MachineConfig

oc create -f 02-worker-kubelet-env-config

等待这个变量在所有节点上生效, 你可以在 machine-config-operator 监控日志

oc -n openshift-machine-config-operator logs -f $(oc get pods -l k8s-app=machine-config-operator -o name -n openshift-machine-config-operator)

之后你可以进入节点 oc debug node/nodename 并且确定 kubelet 进程运行新的冗余等级

在这里插入图片描述

永久配置 OpenShift 4.6 和之后版本的kubelet log level

在 OCP 4.5 版本里, 目录 /etc/kubernetes 标记为 etc_t 然而在新的 OCP 4.6会被标记为 kubernetes_file_t.
这导致SElinux不匹配,导致kubelet env不能被kubelet加载。对于OCP 4.6及更高版本,请使用以下MachineConfig:

   apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: master
      name: 99-master-kubelet-loglevel
    spec:
      config:
        ignition:
          config: {}
          security:
            tls: {}
          timeouts: {}
          version: 2.2.0
        systemd:
          units:
            - name: kubelet.service
              enable: true
              dropins:
                - name: 10-kubelet-loglevel.conf
                  contents: |
                    [Service]
                    Environment=
                    Environment="KUBELET_LOG_LEVEL=2"

根据一般用例,建议使用 0-4 作为调试日志 5-8作为跟踪日志

冗余等级描述
v=0通常很有用,Operator总是可以看到它
v=1一个合理的默认日志级别, 如果你不想冗余
v=2有关服务的有用稳态信息以及可能与系统中的重大更改相关的重要日志消息。这是建议的默认日志级别
v=3更新的扩展信息
v=4调试等级的冗余
v=5显示默认的痕迹请求
v=6显示请求的资源
v=7显示 http请求的header
v=8显示 http请求的内容

此文章原始作者为David Hernandez Fernandez. 经过他的同意+ 我的个人理解 完成这篇文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值