成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

簡述 Kubernetes 集群日志基礎

云計算
在本文中,我將討論 Kubernetes 中不同容器日志記錄模式的工作原理。

服務器和應用程序日志記錄是開發人員、運維人員和安全團隊了解應用程序在其生產環境中運行狀態的重要工具。

日志記錄使運維人員能夠確定應用程序和所需組件是否運行平穩,并檢測是否發生了異常情況,以便他們能夠對這種情況做出反應。

對于開發人員,日志記錄提供了在開發期間和之后對代碼進行故障排除的可見性。在生產環境中,開發人員通常依賴于沒有調試工具的日志記錄工具。在加上系統的日志記錄,開發人員可以與運維人員攜手合作,有效地解決問題。

日志記錄工具最重要的受益者是安全團隊,尤其是在云原生的環境中。能夠從應用程序和系統日志中收集信息使得安全團隊能夠分析來自身份驗證、應用程序訪問惡意軟件活動的數據,并在需要時進行響應。

Kubernetes 是領先的容器平臺,越來越多的應用程序通過 Kubernetes 部署到生產環境。我相信了解 Kubernetes 的日志架構是一項非常重要的工作,每個開發、運維和安全團隊都需要認真對待。

在本文中,我將討論 Kubernetes 中不同容器日志記錄模式的工作原理。

系統日志記錄和應用日志記錄

在深入研究 Kubernetes 日志記錄架構之前,我想探索不同的日志記錄方法以及這兩種功能如何成為 Kubernetes 日志記錄的關鍵特性。

有兩種類型的系統組件:在容器中運行的組件和不在容器中運行的組件。例如:

  • Kubernetes 調度者和 kube-proxy 運行在容器中。
  • kubelet 和容器運行時不在容器中運行。

與容器日志類似,系統容器日志存儲在 /var/log 目錄中,你應該定期輪換它們。

在這里,我研究的是容器日志記錄。首先,我看一下集群級別的日志記錄以及為什么它對集群運維人員很重要。集群日志提供有關集群如何執行的信息。諸如為什么 吊艙Pod 被下線或節點死亡之類的信息。集群日志記錄還可以捕獲諸如集群和應用程序訪問以及應用程序如何利用計算資源等信息。總體而言,集群日志記錄工具為集群運維人員提供操作集群和安全有用的信息。

捕獲容器日志的另一種方法是通過應用程序的本機日志記錄工具。現代應用程序設計很可能具有日志記錄機制,可幫助開發人員通過標準輸出 (stdout) 和錯誤流 (stderr) 解決應用程序性能問題。

為了擁有有效的日志記錄工具,Kubernetes 實現需要應用程序和系統日志記錄組件。

Kubernetes 容器日志的 3 種類型

如今,在大多數的 Kubernetes 實現中,你可以看到三種主要的集群級日志記錄方法。

  • 節點級日志代理
  • 用于日志記錄的挎斗Sidecar容器應用程序
  • 將應用程序日志直接暴露給日志后端

節點級日志代理

我想考慮節點級日志代理。你通常使用 DaemonSet 作為部署策略來實現這些,以便在所有 Kubernetes 節點中部署一個吊艙(充當日志代理)。然后,該日志代理被配置為從所有 Kubernetes 節點讀取日志。你通常將代理配置為讀取節點 /var/logs 目錄捕獲 stdout/stderr 流并將其發送到日志記錄后端存儲。

下圖顯示了在所有節點中作為代理運行的節點級日志記錄。

Node-level logging agent

以使用 fluentd 方法為例設置節點級日志記錄,你需要執行以下操作:

(1) 首先,你需要創建一個名為 fluentdd 的服務賬戶。Fluentd 吊艙使用此服務賬戶來訪問 Kubernetes API,你需要在日志命名空間中使用標簽 app: fluentd 創建它們:

  1. #fluentd-SA.yaml 
  2. apiVersion: v1 
  3. kind: ServiceAccount 
  4. metadata: 
  5.   name: fluentd 
  6.   namespace: logging 
  7.   labels: 
  8.     app: fluentd   

你可以在此 倉庫 中查看完整示例。

(2) 接著,你需要創建一個名稱為 fluentd-configmap 的 ConfigMap。這為 fluentd daemonset 提供了一個配置文件,其中包含所有必需的屬性。

  1. #fluentd-daemonset.yaml 
  2. apiVersion: extensions/v1beta1 
  3. kind: DaemonSet 
  4. metadata: 
  5.   name: fluentd 
  6.   namespace: logging 
  7.   labels: 
  8.     app: fluentd 
  9.     kubernetes.io/cluster-service: "true" 
  10. spec: 
  11.   selector: 
  12.     matchLabels: 
  13.       app: fluentd 
  14.       kubernetes.io/cluster-service: "true" 
  15.   template: 
  16.     metadata: 
  17.       labels: 
  18.         app: fluentd 
  19.         kubernetes.io/cluster-service: "true" 
  20.     spec: 
  21.       serviceAccount: fluentd 
  22.       containers: 
  23.       - name: fluentd 
  24.         image: fluent/fluentd-kubernetes-daemonset:v1.7.3-debian-elasticsearch7-1.0 
  25.         env: 
  26.           - name: FLUENT_ELASTICSEARCH_HOST 
  27.             value: "elasticsearch.logging.svc.cluster.local" 
  28.           - name: FLUENT_ELASTICSEARCH_PORT 
  29.             value: "9200" 
  30.           - name: FLUENT_ELASTICSEARCH_SCHEME 
  31.             value: "http" 
  32.           - name: FLUENT_ELASTICSEARCH_USER 
  33.             value: "elastic" 
  34.           - name: FLUENT_ELASTICSEARCH_PASSWORD 
  35.             valueFrom: 
  36.               secretKeyRef: 
  37.                 name: efk-pw-elastic 
  38.                 key: password 
  39.           - name: FLUENT_ELASTICSEARCH_SED_DISABLE 
  40.             value: "true" 
  41.         resources: 
  42.           limits: 
  43.             memory: 512Mi 
  44.           requests: 
  45.             cpu: 100m 
  46.             memory: 200Mi 
  47.         volumeMounts: 
  48.         - name: varlog 
  49.           mountPath: /var/log 
  50.         - name: varlibdockercontainers 
  51.           mountPath: /var/lib/docker/containers 
  52.           readOnly: true 
  53.         - name: fluentconfig 
  54.           mountPath: /fluentd/etc/fluent.conf 
  55.           subPath: fluent.conf 
  56.       terminationGracePeriodSeconds: 30 
  57.       volumes: 
  58.       - name: varlog 
  59.         hostPath: 
  60.           path: /var/log 
  61.       - name: varlibdockercontainers 
  62.         hostPath: 
  63.           path: /var/lib/docker/containers 
  64.       - name: fluentconfig 
  65.         configMap: 
  66.           name: fluentdconf 

你可以在此 倉庫 中查看完整示例。

現在,我們來看看如何將 fluentd daemonset 部署為日志代理的代碼。

  1. #fluentd-daemonset.yaml 
  2. apiVersion: extensions/v1beta1 
  3. kind: DaemonSet 
  4. metadata: 
  5.   name: fluentd 
  6.   namespace: logging 
  7.   labels: 
  8.     app: fluentd 
  9.     kubernetes.io/cluster-service: "true" 
  10. spec: 
  11.   selector: 
  12.     matchLabels: 
  13.       app: fluentd 
  14.       kubernetes.io/cluster-service: "true" 
  15.   template: 
  16.     metadata: 
  17.       labels: 
  18.         app: fluentd 
  19.         kubernetes.io/cluster-service: "true" 
  20.     spec: 
  21.       serviceAccount: fluentd 
  22.       containers: 
  23.       - name: fluentd 
  24.         image: fluent/fluentd-kubernetes-daemonset:v1.7.3-debian-elasticsearch7-1.0 
  25.         env: 
  26.           - name: FLUENT_ELASTICSEARCH_HOST 
  27.             value: "elasticsearch.logging.svc.cluster.local" 
  28.           - name: FLUENT_ELASTICSEARCH_PORT 
  29.             value: "9200" 
  30.           - name: FLUENT_ELASTICSEARCH_SCHEME 
  31.             value: "http" 
  32.           - name: FLUENT_ELASTICSEARCH_USER 
  33.             value: "elastic" 
  34.           - name: FLUENT_ELASTICSEARCH_PASSWORD 
  35.             valueFrom: 
  36.               secretKeyRef: 
  37.                 name: efk-pw-elastic 
  38.                 key: password 
  39.           - name: FLUENT_ELASTICSEARCH_SED_DISABLE 
  40.             value: "true" 
  41.         resources: 
  42.           limits: 
  43.             memory: 512Mi 
  44.           requests: 
  45.             cpu: 100m 
  46.             memory: 200Mi 
  47.         volumeMounts: 
  48.         - name: varlog 
  49.           mountPath: /var/log 
  50.         - name: varlibdockercontainers 
  51.           mountPath: /var/lib/docker/containers 
  52.           readOnly: true 
  53.         - name: fluentconfig 
  54.           mountPath: /fluentd/etc/fluent.conf 
  55.           subPath: fluent.conf 
  56.       terminationGracePeriodSeconds: 30 
  57.       volumes: 
  58.       - name: varlog 
  59.         hostPath: 
  60.           path: /var/log 
  61.       - name: varlibdockercontainers 
  62.         hostPath: 
  63.           path: /var/lib/docker/containers 
  64.       - name: fluentconfig 
  65.         configMap: 
  66.           name: fluentdconf 

將這些放在一起執行:

  1. kubectl apply -f fluentd-SA.yaml \ 
  2.               -f fluentd-configmap.yaml \ 
  3.               -f fluentd-daemonset.yaml 

用于日志記錄的挎斗容器應用程序

另一種方法是使用帶有日志代理的專用挎斗容器。容器最常見的實現是使用 Fluentd 作為日志收集器。在企業部署中(你無需擔心一點計算資源開銷),使用 fluentd(或類似)實現的挎斗容器提供了集群級日志記錄的靈活性。這是因為你可以根據需要捕獲的日志類型、頻率和其它可能的調整來調整和配置收集器代理。

下圖展示了作為日志代理的挎斗容器。

Sidecar container as logging agent例如,一個吊艙運行單個容器,容器使用兩種不同的格式寫入兩個不同的日志文件。吊艙的配置文件如下:

  1. #log-sidecar.yaml 
  2. apiVersion: v1 
  3. kind: Pod 
  4. metadata: 
  5.   name: counter 
  6. spec: 
  7.   containers: 
  8.   - name: count 
  9.     image: busybox 
  10.     args: 
  11.    - /bin/sh 
  12.     - -c 
  13.     - > 
  14.      i=0
  15.       while true; 
  16.       do 
  17.         echo "$i: $(date)" >> /var/log/1.log; 
  18.         echo "$(date) INFO $i" >> /var/log/2.log; 
  19.         i=$((i+1)); 
  20.         sleep 1; 
  21.       done 
  22.     volumeMounts: 
  23.     - name: varlog 
  24.       mountPath: /var/log 
  25.   - name: count-log 
  26.     image: busybox 
  27.     args: [/bin/sh, -c, 'tail -n+1 -f /var/log/1.log'] 
  28.     volumeMounts: 
  29.     - name: varlog 
  30.       mountPath: /var/log 
  31.   volumes: 
  32.   - name: varlog 
  33.     emptyDir: {} 

把它們放在一起,你可以運行這個吊艙:

  1. $ kubectl apply -f log-sidecar.yaml 

要驗證挎斗容器是否用作日志代理,你可以執行以下操作:

  1. $ kubectl logs counter count-log 

預期的輸出如下所示:

  1. $ kubectl logs counter count-log-1 
  2. Thu 04 Nov 2021 09:23:21 NZDT 
  3. Thu 04 Nov 2021 09:23:22 NZDT 
  4. Thu 04 Nov 2021 09:23:23 NZDT 
  5. Thu 04 Nov 2021 09:23:24 NZDT 

將應用程序日志直接暴露給日志后端

第三種方法(在我看來)是 Kubernetes 容器和應用程序日志最靈活的日志記錄解決方案,是將日志直接推送到日志記錄后端解決方案。盡管此模式不依賴于原生 Kubernetes 功能,但它提供了大多數企業需要的靈活性,例如:

  • 擴展對網絡協議和輸出格式的更廣泛支持。
  • 提供負載均衡能力并提高性能。
  • 可配置為通過上游聚合接受復雜的日志記錄要求。

因為這第三種方法通過直接從每個應用程序推送日志來依賴非 Kubernetes 功能,所以它超出了 Kubernetes 的范圍。

結論

Kubernetes 日志記錄工具是企業部署 Kubernetes 集群的一個非常重要的組件。我討論了三種可能的可用模式。你需要找到適合你需求的模式。

如上所述,使用 daemonset 的節點級日志記錄是最容易使用的部署模式,但它也有一些限制,可能不適合你的組織的需要。另一方面,挎斗 模式提供了靈活性和自定義,允許你自定義要捕獲的日志類型,但是會提高計算機的資源開銷。最后,將應用程序日志直接暴露給后端日志工具是另一種允許進一步定制的誘人方法。

選擇在你,你只需要找到適合你組織要求的方法。

責任編輯:趙寧寧 來源: Linux中國
相關推薦

2023-03-30 09:17:42

KubesprayKubernetesLinux

2020-07-08 08:03:37

KubernetesLens集群

2021-11-22 08:50:20

Kubernetes網絡策略云原生應用程序

2020-04-02 15:10:57

Kubernetes集群安全

2023-06-27 17:37:08

Kubernete容器集群

2015-08-14 09:47:36

Linux日志基礎

2021-09-27 05:42:44

VeleroKubernetes 公有云

2022-01-17 11:05:11

CFSSLKubernetesLinux

2015-07-17 10:25:43

kubernetesDocker集群系統

2020-07-16 21:00:05

樹莓派Kubernetes集Linux

2021-12-24 10:47:49

Kubernetes容器化微服務

2022-05-24 09:00:00

云計算Kubernetes安全

2021-02-07 08:00:00

Kubernetes集群云原生

2022-07-24 21:11:19

KubernetesLinux

2022-05-02 18:45:33

Kubernetes網絡模型

2021-11-22 16:21:28

Kubernetes 運維開源

2022-08-09 09:10:43

Kubernetes容器

2017-08-08 11:14:47

AzureKubernetes多容器應用程序

2020-08-25 07:48:17

Kubernetes集群系統

2021-09-29 08:00:00

Kubernetes集群容器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www操操 | 九九亚洲精品 | 亚洲欧美成人影院 | 国产精品国产成人国产三级 | 国产精品成人一区二区 | 国产成人精品久久二区二区91 | 久久激情视频 | 日韩福利在线观看 | 黑人性hd | 亚洲免费在线观看 | 国产91黄色 | 凹凸日日摸日日碰夜夜 | 天天操天天天干 | 久久国产精99精产国高潮 | 超碰在线影院 | 成人妇女免费播放久久久 | 国产成人99av超碰超爽 | 成人精品在线视频 | 人人干超碰 | 99久久婷婷国产综合精品 | 国产精品久久久久久妇女6080 | 在线观看国产 | 一区二区国产精品 | 亚洲顶级毛片 | 日韩二区 | 欧美中文字幕一区二区三区亚洲 | 亚洲3p| 在线天堂免费中文字幕视频 | 精品在线观看一区 | 色精品视频 | cao视频 | 99久久精品免费看国产四区 | 亚洲激情一级片 | 亚洲精品久久久9婷婷中文字幕 | 日本视频在线播放 | av入口 | 国产色婷婷久久99精品91 | 国产一伦一伦一伦 | 午夜三区| 爱综合 | 国产一区二区视频免费在线观看 |