美文网首页K8sKubernetesCKA认证
【K8s 精选】CKA - 了解日志架构和节点级日志

【K8s 精选】CKA - 了解日志架构和节点级日志

作者: 熊本极客 | 来源:发表于2022-03-07 09:42 被阅读0次

    1.日志架构简介

    容器化应用的日志记录常用方式就是写入标准输出标准错误流集群日志级日志的存储和生命周期与节点、Pod 或容器的生命周期是相互独立的,而节点级日志Pod 的生命周期一致,默认情况下如果容器重启,kubelet 会保留被终止的容器日志。 如果 Pod 在工作节点被驱逐,该 Pod 中所有的容器及其日志都会被驱逐。

    2.节点级日志

    2.1 架构及相关配置

    image.png

    容器化的应用写入标准输出流 stdout 和标准错误流 stderr 的任何数据,都会被容器引擎捕获并被重定向到某个位置。

    问题:如何理解标准输出流 stdout 和标准错误流 stderr 的日志?
    答:stdoutstderr 默认是输出到屏幕,其中文件描述符 0 表示 stdin、1 表示 stdout、2 表示stderr,两者支持重定向。
    ls logA.txt 1 > logB.txt:首先清空文件 logB.txt,执行命令 ls logA.txt 的正常打印信息,写入 logB.txt;ls logC.txt 2 >> logD.txt:执行命令 ls logC.txt 的错误打印信息追加到 logD.txt

    下面是以 Docker 容器引擎为例,将stdoutstderr 输出流重定向到某个日志驱动(Logging Driver) ,其中 Docker 配置文件 /etc/docker/daemon.json 的内容如下所示 。

    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3",
        "labels": "production_status",
        "env": "os,customer"
      }
    }
    

    默认情况下,Docker 使用的日志驱动是 json-file。JSON 格式用其来源 stdoutstderr 及其时间戳来注释每一行。每个日志文件只包含一个容器的信息。

    {"log":"Log line is here\n","stream":"stdout","time":"2019-01-01T11:11:11.111111111Z"}
    

    kubelet 组件是负责管理日志目录日志轮换kubelet 管理 CRI 容器运行时,例如 Docker、containerd 和 CRI-O。后者将容器日志写入到指定的位置。kubelet 配置文件中的参数 containerLogMaxSize 和 containerLogMaxFiles 可以用来配置每个日志文件的最大长度和每个容器可以生成的日志文件个数上限。kubelet 组件有 2 种配置方式,配置文件 kubelet-configuration.yamlkubelet 指令

    #查看 kubelet 参数详情
    $ps -ef |grep kubelet
    root      97784      1  5 Feb24 ?        14:26:01 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --tls-cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 --network-plugin=cni --pod-infra-container-image=192.168.0.60:5000/pause:3.2
    
    #设置 kubelet 参数
    #方式 1:kubelet 配置文件 kubelet-configuration.yaml
    $kubelet --config=/.../kubelet-configuration.yaml
    #方式 2:kubelet 指令
    $kubelet --containerLogMaxSize=5Mi --containerLogMaxFiles=5
    
    # 重新启动 kubelet 以使更改生效
    $systemctl daemon-reload
    $systemctl restart kubelet
    

    kubelet-configuration.yaml 的内容:

    apiVersion: kubelet.config.k8s.io/v1beta1
    kind: KubeletConfiguration
    address: "0.0.0.0",
    port: 10250,
    serializeImagePulls: false,
    evictionHard:
        memory.available:  "200Mi"
    containerLogMaxSize: "5Mi"
    containerLogMaxFiles: 5
    

    2.2 获取应用日志

    $kubectl get pod |grep flink
    deployment-flink-jobmanager-9d68c8cd5-8xxj1            1/1     Running   0          6d22h
    deployment-flink-taskmanager-94df9488f-s5j93           1/1     Running   0          6d22h
    deployment-flink-taskmanager-94df9488f-xk8rd           1/1     Running   0          6d22h
    
    $kubectl logs deployment-flink-jobmanager-9d68c8cd5-8xxj1
    chown: changing ownership of '/opt/test/flink/conf/flink-conf.yaml': Read-only file system
    chown: changing ownership of '/opt/test/flink/conf/log4j.properties': Read-only file system
    ...
    

    相关文章

      网友评论

        本文标题:【K8s 精选】CKA - 了解日志架构和节点级日志

        本文链接:https://www.haomeiwen.com/subject/rnwbrrtx.html