k8s docker總結特殊點

k8s docker總結特殊點

  • 前言
  • 一、docker 的驅動。
    • 1、cgroup:(Control Groups)
    • 2、日志驅動(log driver)
    • 3、存儲驅動
    • 4、網絡驅動:
  • 二、k8s中網絡插件(常用calico,次flannel)
    • **Flannel:**
    • **Calico:**
    • **Weave:**
    • **Cilium:**
    • **Antrea:**
  • 三、Dockerfile中極個別字段作用、區別
    • ADD、COPY
    • CMD 、RUN、ENTRYPOINT
  • 四、k8s中pv回收策略的異同點
    • Retain:
    • Recycle:
    • Delete:
    • 異同點:
      • 手動處理 vs. 自動處理:
      • 數據處理方式:
      • 數據安全性:
      • 適用場景:
  • 五、k8s如何管控一個有狀態集從開始創建到卷掛載綁定再到svc,最后到容器正常運行
    • 用戶創建 StatefulSet 對象:
    • kube-controller-manager 創建 StatefulSet 控制器:
    • kube-scheduler 調度 Pod:
    • 創建 PersistentVolumeClaim(PVC):
    • Pod 啟動及 Volume 掛載:
    • 創建 Headless Service:


前言

多點docker、k8s了解與某些參數配置的異同點,出現問題便于排查,有助于學習。


一、docker 的驅動。

看一個/etc/docker/daemon.json
顯而易見的driver有cgroupdriver、log-driver
優先看他倆:

1、cgroup:(Control Groups)

查看本地所使用的

docker info | grep "Cgroup Driver"

概念: cgroup 是 Linux 內核提供的一種機制,用于限制、賬戶和隔離進程組。目前使用最多的systemd,次cgroupfs。其他作為了解

錯誤:最常見的是當你k8s某些服務器資源重啟后加入不了集群時,一看報錯驅動問題

cgroupfs: cgroupfs 是 Docker 最早支持的 cgroup 驅動,它使用 cgroup 文件系統進行資源管理和隔離。這是 Docker 1.13 之前版本的默認 cgroup 驅動。

systemd: systemd 是 Linux 上的一個系統和服務管理器,也是一種 cgroup 驅動。Docker 可以通過配置使用 systemd 作為 cgroup 驅動,這種方式通常與運行 systemd 的系統集成得更好。

unified(Unified Control Group): 統一的 cgroup 驅動是 Linux 4.5 及以上內核引入的,它將 cgroup v1 和 cgroup v2 合并為一個單一的層次結構。Docker 從版本 20.10 開始默認使用 unified cgroup 驅動。這種驅動對 cgroup v2 的支持更為完整,但仍然保留對 cgroup v1 的兼容性。

{"data-root": "/var/lib/docker","exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com"], "insecure-registries": ["127.0.0.1/8","k8s.harbor.com"],"max-concurrent-downloads": 10,"live-restore": true,"log-driver": "json-file","log-level": "warn","log-opts": {"max-size": "50m","max-file": "1"},"storage-driver": "overlay2"
}

2、日志驅動(log driver)

**概念:**用于處理和存儲容器的日志。以下是一些常見的 Docker 日志驅動:最常用的json-file、syslog。其他作為了解

錯誤:當某些開源軟件部署方面遇到syslog錯誤時,那可能就是你開源軟件自定義了log驅動與你本地docker環境log驅動不匹配導致。

json-file: 默認的日志驅動,將容器的標準輸出和標準錯誤輸出保存到 JSON 格式的文件中。可以使用 docker logs 命令查看容器的日志。

syslog: 將容器日志發送到 syslog(系統日志)中,使其可由宿主機上的 syslog 守護程序處理。這對于集中管理日志非常有用。

journald: 將容器日志發送到 systemd-journald,適用于運行 systemd 的系統。可以使用 journalctl 命令查看容器的日志。

fluentd: 使用 Fluentd 進行日志收集。Fluentd 是一款開源的日志收集工具,支持靈活的日志傳輸和處理。

gelf: 將容器日志發送到 Graylog Extended Log Format(GELF)兼容的日志收集器。GELF 是一種結構化的日志格式,適用于分布式日志系統。

awslogs: 將容器日志發送到 Amazon CloudWatch Logs,適用于在 AWS 上運行的容器。

etwlogs: 僅適用于 Windows 容器,將容器日志發送到 Windows Event Tracing for Windows (ETW)。

splunk: 將容器日志發送到 Splunk,適用于使用 Splunk 進行日志分析的環境。

logentries: 將容器日志發送到 Logentries,適用于集中管理和分析日志。

可以通過在運行容器時使用 --log-driver 選項來指定日志驅動。例如:

docker run --log-driver=json-file my-container

要查看系統上可用的日志驅動,可以運行以下命令:

docker info | grep "Logging Driver"

3、存儲驅動

概念:存儲驅動負責實現鏡像和容器存儲的組件。基本選用默認overlay2。其他作為了解

overlay2: overlay2 是 Docker 默認的存儲驅動,適用于大多數 Linux 發行版。它提供了高性能的聯合文件系統,支持鏡像分層和容器存儲。

aufs: aufs(Advanced Multi-Layered Unification Filesystem)是一個老化的存儲驅動,已被 overlay2 取代。aufs 適用于較早版本的 Docker,但在新的內核版本中可能不再受支持。

overlay: overlay 是 overlay2 的前身,也是一個聯合文件系統,但相對于 overlay2,它在性能和功能上有一些限制。

btrfs: btrfs 是一種先進的文件系統,Docker 可以使用它作為存儲驅動。btrfs 支持快照、復制等高級功能。

devicemapper: devicemapper 是一種基于設備映射技術的存儲驅動。它提供了塊設備的級別的存儲,支持快照和寫時復制。

vfs(Virtual File System): vfs 是一種簡單的存儲驅動,適用于測試和開發環境。它是 Docker 最基本的存儲驅動,性能較差,不建議在生產環境中使用。

要查看當前 Docker 實例正在使用的存儲驅動,可以運行以下命令:

docker info | grep "Storage Driver"

4、網絡驅動:

概念: 允許用戶根據應用程序的需求選擇合適的網絡模式。

bridge: bridge 是 Docker 默認的網絡驅動,用于創建容器默認的橋接網絡。每個容器都連接到這個默認的橋接網絡,可以通過容器名稱或 IP 地址直接相互通信。

docker run --network bridge my-container

host: host 網絡模式允許容器共享主機的網絡命名空間,即與主機相同的網絡。這樣容器可以直接使用主機的網絡配置,適用于性能敏感的場景。

docker run --network host my-container

none: none 網絡模式會禁用容器的網絡棧,使其無法訪問網絡。適用于特定安全場景或僅需要本地 IPC 通信的容器。

docker run --network none my-container

overlay: overlay 網絡模式用于創建多主機之間的覆蓋網絡。適用于跨多個主機的容器通信,通常與 Docker Swarm 結合使用。

docker run --network overlay my-container

macvlan: macvlan 允許容器直接映射到物理網絡,每個容器都有唯一的 MAC 地址。適用于需要容器直接暴露到物理網絡的場景。

docker run --network macvlan my-container

ipvlan: ipvlan 類似于 macvlan,但允許多個容器共享相同的 MAC 地址。適用于需要在物理網絡上分配 IP 地址的場景。

docker run --network ipvlan my-container

bridge、host、none 的自定義橋接網絡: 可以使用 bridge、host 或 none 模式創建自定義橋接網絡,通過 docker network create 命令。

docker network create my-bridge-network
docker run --network my-bridge-network my-container

二、k8s中網絡插件(常用calico,次flannel)

**網絡插件:**用于配置容器間的通信和網絡策略。這些網絡插件負責實現 Kubernetes 群集中 Pod 之間的網絡通信。

Flannel:

特點: Flannel 是一個簡單且易于部署的網絡插件,使用基于層級的虛擬網絡(Overlay Network)實現容器間的通信。
工作原理: 使用 VXLAN 或 UDP 封裝技術在不同節點上創建虛擬網絡,允許 Pod 通過該虛擬網絡進行通信。
適用場景: 適用于需要快速部署和簡單網絡配置的場景。

Calico:

特點: Calico 是一個開源的網絡插件,提供了強大的網絡策略和安全性功能。它支持 BGP 協議用于路由。
工作原理: 使用路由表來處理容器之間的通信,支持網絡隔離和安全策略
適用場景: 適用于需要強大網絡策略和安全性的場景,特別是多租戶環境。

Weave:

特點: Weave 是一個輕量級的網絡插件,支持容器的動態發現和路由。它通過 DNS 提供服務發現功能。
工作原理: 使用虛擬網絡技術,包括 Overlay Network 和路由。
適用場景: 適用于需要輕量級網絡插件和服務發現的場景。

Cilium:

特點: Cilium 是一個強大的網絡和安全插件,支持容器的負載均衡、網絡隔離和安全策略。
工作原理: 使用 eBPF(Extended Berkeley Packet Filter)技術,允許對網絡數據包進行高級的處理。
適用場景: 適用于需要強大網絡功能和安全性的場景,尤其是具有復雜網絡需求的環境。

Antrea:

特點: Antrea 是一個基于 Open vSwitch(OVS)的網絡插件,提供網絡策略和安全性功能。
工作原理: 使用 OVS 技術來處理容器之間的通信,并支持網絡策略。
適用場景: 適用于需要基于 OVS 的網絡插件的場景。

三、Dockerfile中極個別字段作用、區別

ADD、COPY

COPY: 用于將本地文件或目錄復制到容器中。它是比較基礎的文件復制指令,不做任何解壓或處理。

COPY <src> <dest>

ADD: 類似于 COPY,但具有一些額外的功能,如自動解壓縮 tar 文件和從 URL 復制文件。由于 ADD 具有更多功能,建議在不需要這些額外功能時使用 COPY。

ADD <src> <dest>

CMD 、RUN、ENTRYPOINT

RUN: 用于在構建時執行命令,通常用于安裝軟件包、更新系統等。每個 RUN 指令都會在新的鏡像層中執行,并在構建期間對鏡像進行修改。

RUN apt-get update && apt-get install -y nginx

CMD: 用于定義容器啟動時執行的默認命令。它可以在 Dockerfile 中出現多次,但只有最后一次有效。如果用戶在啟動容器時提供了命令,則會覆蓋 CMD。

CMD ["nginx", "-g", "daemon off;"]

ENTRYPOINT: 用于配置容器啟動時執行的默認命令,并且這個命令不會被覆蓋。如果用戶在啟動容器時提供了命令,則會被附加到 ENTRYPOINT 后面。ENTRYPOINT 經常與 CMD 結合使用,以提供默認參數。

ENTRYPOINT ["nginx", "-g", "daemon off;"]

四、k8s中pv回收策略的異同點

Retain:

特點: PV 的數據在釋放后不會被刪除,而是保留在存儲中。管理員需要手動處理這些資源。
適用場景: 適用于需要手動處理 PV 數據回收的場景,例如希望保留數據以便進一步分析的情況。

Recycle:

特點: PV 的數據在釋放后會被刪除,但不同于 Delete 策略,它會嘗試簡單地清除數據,而不是進行安全擦除。
適用場景: 適用于不需要進行安全擦除、可以簡單清除數據的場景。

Delete:

特點: PV 的數據在釋放后會被刪除,同時 Kubernetes 會嘗試使用 Volume 插件進行安全擦除。
適用場景: 適用于需要安全擦除數據的場景,以確保數據不被不相關的用戶訪問。

異同點:

手動處理 vs. 自動處理:

Retain: 需要管理員手動處理 PV 中的數據,確保數據的安全存儲或進一步使用。
Recycle 和 Delete: Kubernetes 會自動處理 PV 中的數據,但它們的處理方式不同。

數據處理方式:

Recycle: 簡單地清除 PV 中的數據,不進行安全擦除。
Delete: 嘗試使用 Volume 插件進行安全擦除,以確保數據不被不相關的用戶訪問。

數據安全性:

Retain 和 Delete: 提供更高水平的數據安全性,特別是在涉及敏感數據時。
Recycle: 提供較低水平的數據安全性,因為它不執行安全擦除。

適用場景:

Retain: 適用于需要手動處理數據的場景,如進一步分析或備份。
Recycle: 適用于不需要安全擦除、可以簡單清除數據的場景。
Delete: 適用于需要安全擦除數據的場景,以確保數據不被不相關的用

五、k8s如何管控一個有狀態集從開始創建到卷掛載綁定再到svc,最后到容器正常運行

在 Kubernetes 中,有狀態服務集(StatefulSet)的創建和管理涉及多個組件的協同工作。以下是從創建開始到 StatefulSet 中的 Pod 正常運行的主要過程:

用戶創建 StatefulSet 對象:

用戶通過定義 StatefulSet 對象來描述有狀態服務集的規模、模板和其他配置。StatefulSet 中包含有關每個 Pod 的模板以及 PVC 模板。
kube-apiserver 接收 StatefulSet 配置:

用戶提交 StatefulSet 配置時,kube-apiserver 接收并驗證配置信息,然后將其保存到 etcd 中。這將觸發后續的控制器和調度過程。

kube-controller-manager 創建 StatefulSet 控制器:

kube-controller-manager 中包含 StatefulSet 控制器,該控制器監視 etcd 中的 StatefulSet 配置。
控制器檢測到 StatefulSet 的創建后,根據規模信息開始創建 Pod。

kube-scheduler 調度 Pod:

kube-scheduler 負責將新創建的 Pod 分配到集群中的節點上。對于有狀態服務,調度時需要考慮 Pod 的唯一性、親和性和反親和性規則。
每個 Pod 根據 StatefulSet 中定義的模板和 PVC 模板進行創建。

創建 PersistentVolumeClaim(PVC):

StatefulSet 中的每個 Pod 都有一個對應的 PersistentVolumeClaim(PVC)。PVC 描述了 Pod 對存儲的需求。PVC 根據模板創建,并綁定到可用的 PersistentVolume(PV)上。

Pod 啟動及 Volume 掛載:

kubelet 接收到 Pod 的配置信息后,在節點上創建容器,并根據 PVC 中定義的 Volume 掛載到指定的路徑。這使應用程序可以使用這個持久化存儲。

創建 Headless Service:

StatefulSet 通常與 Headless Service 結合使用。這個服務的 Cluster IP 為 None,每個 Pod 都有唯一的 DNS 記錄,例如 web-0.service-name.namespace.svc.cluster.local。
Headless Service 為有狀態服務提供唯一的網絡標識符,確保每個 Pod 具有獨特的 DNS 記錄。
Pod 正常運行:

控制器負責監控 StatefulSet 中的 Pod,并確保它們按照定義正常運行。每個 Pod 具有唯一的標識符和關聯的 PVC 和 PV。
Pod 的唯一性、持久化存儲和網絡標識符等特性使有狀態服務能夠保持穩定和可靠的運行狀態。
整個過程中,kube-apiserver 接收和存儲配置信息,kube-controller-manager 創建和監控控制器,kube-scheduler 負責調度 Pod,kubelet 負責在節點上創建和監控容器。同時,Headless Service 提供唯一的網絡標識符,PersistentVolume 和 PersistentVolumeClaim 提供持久化存儲,確保有狀態服務集的正確運行。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/168263.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/168263.shtml
英文地址,請注明出處:http://en.pswp.cn/news/168263.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【洛谷 P1636】Einstein學畫畫 題解(圖論+歐拉通路)

Einstein學畫畫 題目描述 Einstein 學起了畫畫。 此人比較懶~~&#xff0c;他希望用最少的筆畫畫出一張畫…… 給定一個無向圖&#xff0c;包含 n n n 個頂點&#xff08;編號 1 ~ n 1 \sim n 1~n&#xff09;&#xff0c; m m m 條邊&#xff0c;求最少用多少筆可以畫…

nodejs微信小程序+python+PHP-書吧租閱管理系統的設計與實現-安卓-計算機畢業設計

目 錄 摘 要 I ABSTRACT II 目 錄 II 第1章 緒論 1 1.1背景及意義 1 1.2 國內外研究概況 1 1.3 研究的內容 1 第2章 相關技術 3 2.1 nodejs簡介 4 2.2 express框架介紹 6 2.4 MySQL數據庫 4 第3章 系統分析 5 3.1 需求分析 5 3.2 系統可行性分析 5 3.2.1技術可行性&#xff1a;…

深度學習+不良身體姿勢檢測+警報系統+代碼+部署(姿態識別矯正系統)

正確的身體姿勢是一個人整體健康的關鍵。然而&#xff0c;保持正確的身體姿勢可能很困難&#xff0c;因為我們經常忘記這一點。這篇博文將引導您完成為此構建解決方案所需的步驟。最近&#xff0c;我們在使用 POSE 進行身體姿勢檢測方面玩得很開心。它就像一個魅力&#xff01;…

Ubuntu20安裝ssh服務

Ubuntu20上執行如下命令查看是否存在ssh服務 #ps -e | grep ssh 只有ssh-agent&#xff0c;沒有sshd; 因此要安裝openssh-server. 搜索openssh-server,得到下載鏈接&#xff1a; openssh-server 復制這個Binary Package鏈接即可下載&#xff0c;然后使用如下命令安裝 sudo…

Ruoyi項目傳List到后臺并使用Excel模板下載數據的方法以及遇到的各種前后端數據交互問題

import { download } from @/utils/requestconst app = createApp(App)// 全局方法掛載 app.config.globalProperties.download = download 首先因為ruoyi-ui中的main.js有配置如上全局注冊: 因此只需要在vue中定義一個方法直接使用this.download調用下載即可: (download的3…

Hausdorff是什么距離,怎樣計算的

Hausdorff距離是一種用于度量兩個集合之間的相似性或差異性的距離度量指標。它基于數學家Felix Hausdorff的工作而得名。 對于給定的兩個集合A和B&#xff0c;Hausdorff距離定義為集合A中的每個點到集合B的最近點的最大距離&#xff0c;與集合B中的每個點到集合A的最近點的最大…

C++列表初始化

1.列表初始化 注意和初始化列表區分開來&#xff0c;在 C 98 中允許使用花括號對數組或者結構體元素進行統一的初始值設定。 struct Point {int _x;int _y; };int main() {int array1[] { 1, 2, 3, 4, 5 };int array2[5] { 0 };Point p { 1, 2 };return 0; }而 C 11 擴大了…

PyQt6庫和工具庫QTDesigner安裝與配置

鋒哥原創的PyQt6視頻教程&#xff1a; 2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~共計12條視頻&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面開發 視頻教程(無廢話版…

c語言第七彈--掃雷小游戲!

今天做一個有趣的掃雷小游戲 現在正式開始設計。 思路&#xff1a;想要根本上實現必須擁有 實現函數的主體.c文件 頭文件.h 及頭文件實現.c。 頭文件.h #pragma once #include <stdio.h> #include <stdlib.h> #include <time.h> #define EASY_COUNT 10 #d…

【knife4j-spring-boot】Springboot + knife4j-spring-boot 整合swagger腳手架

swagger-boostrap-ui從1.x版本到如今2.x&#xff0c;同時也更改名字Knife4j 在此記錄下 knife4j-spring-boot-starter 的整合。 只需要引入knife4j-spring-boot-starter&#xff0c;無需引入其他的swagger包&#xff0c;knife4j-spring-boot-starter已經包含。 官方版本說明…

mysql1124實驗七索引管理

實驗任務七 索引管理實驗任務書 1. 實驗目的 掌握在MySQL中使用MySQL Workbench或者SQL語句創建和使用索引的方法&#xff08;以SQL命令為重點&#xff09;。 掌握在MySQL中使用MySQL Workbench或者SQL語句查看和刪除索引的方法&#xff08;以SQL命令為重點&#xff09;。 …

詳細解答T-SNE程序中from sklearn.manifold import TSNE的數據設置,包括輸入數據,繪制顏色的參數設置,代碼復制可用!!

文章目錄 前言——TSNE是t-Distributed Stochastic Neighbor Embedding的縮寫1、可運行的T-SNE程序2. 實驗結果3、針對上述程序我們詳細分析T-SNE的使用方法3.1 加載數據3.2 TSNE降維3.3 繪制點3.4 關于顏色設置&#xff0c;顏色使用的標簽數據的說明cy 總結 前言——TSNE是t-D…

Centos Download

前言 CentOS Linux 是一個社區支持的發行版&#xff0c;源自 CentOS git for Red Hat Enterprise Linux &#xff08;RHEL&#xff09; 上免費提供給公眾的源代碼。因此&#xff0c;CentOS Linux 的目標是在功能上與 RHEL 兼容。CentOS 計劃主要更改組件以刪除上游供應商的品牌…

Redis的四種模式:單機、主從、哨兵、集群

一、簡單理解 單機模式&#xff1a;安裝你的redis&#xff0c;啟動服務即為單機模式。 主從模式&#xff1a;一個主節點搭配一個或多個從節點&#xff0c;無自動故障轉移功能&#xff0c;主節點發生故障后&#xff0c;需要人工將其中一個從節點設置為主節點。 哨兵模式&…

【微服務專題】SpringBoot自動配置源碼解析

目錄 前言閱讀對象閱讀導航前置知識筆記正文0、什么是自動配置0.1 基本概念0.2 SpringBoot中的【約定大于配置】0.3 從SpringMVC看【約定大于配置】0.4 從Redis看【約定大于配置】 一、EnableAutoConfiguration源碼解析二、SpringBoot常用條件注解源碼解析2.1 自定義條件注解2.…

java 反射和注解1-反射詳解

反射和注解本就是一家人&#xff0c;注解離不開反射&#xff0c;這里先將反射的寫法&#xff0c;本文涉到的注解暫時可以不不用理解 1&#xff0c;創建一個類 public class ReflexUser {public String name;private String namePrivate;protected String nameProtected;Strin…

Arduino庫之 LedControl 庫說明文檔

LedControl 庫最初是為基于 8 位 AVR 處理器的 Arduino 板編寫的。用于通過MAX7219芯片控制LED矩陣和7段數碼管。但由于該代碼不使用處理器的任何復雜的內部功能&#xff0c;因此具有高度可移植性&#xff0c;并且應該在任何支持 和 功能的 Arduino&#xff08;類似&#xff09…

模擬火車訂票系統---python序列

if __name__ __main__:#創建車輛信息列表list["車次","出發站-到達站","出發時間","到達時間","歷時","余票"]trainNumber[T40,T298,Z158,Z62]address[長春-北京,長春-北京,長春-北京,長春-北京]getTime[00:12,0…

簡單介紹一下js中的構造函數、原型對象prototype、對象原型__proto__、原型鏈

構造函數 function Star (uname, age){this.uname unamethis.age agethis.sing function(){ log(唱歌~) }}let xzq new Star(薛之謙, 30)let ldh new Star(劉德華, 20)log(ldh) // { uname: 劉德華, age: 20, sing: f }ldh.sing() // 唱歌~log(ldh.sing xzq.sing) // fal…

DevEco Studio安裝

HUAWEI DevEco Studio For OpenHarmony&#xff08;以下簡稱DevEco Studio&#xff09;是基于IntelliJ IDEA Community開源版本打造&#xff0c;面向OpenHarmony全場景多設備的一站式集成開發環境&#xff08;IDE&#xff09;&#xff0c;為開發者提供工程模板創建、開發、編譯…