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.mzph.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;为开发者提供工程模板创建、开发、编译…