首页 > 其他分享 >基于Kubernetes简易集群的部署搭建

基于Kubernetes简易集群的部署搭建

时间:2024-10-14 14:47:32浏览次数:9  
标签:容器 Kubernetes kubectl containerd 集群 Pod 搭建

文章目录

一、环境准备

设计思路
在这里插入图片描述

配置网络和ip

control: 192.168.110.10/24

node1: 192.168.110.11/24

node2: 192.168.110.22/24

​ GW: 192.168.110.2

​ DNS1: 114.114.114.114

​ DNS2: 223.5.5.5

从下面开始,所有的操作需要在三个节点上一起执行。

配置hosts文件

// 文件中新增以下三行

192.168.110.10  control
192.168.110.11  node1
192.168.110.22  node2

允许系统转发 ipv4 数据包

echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/k8s.conf
# 读取文件内核配置
sysctl -f /etc/sysctl.d/k8s.conf
# 查看
sysctl net.ipv4.ip_forward

设置容器运行时

# 清理一下环境
dnf remove -y podman container* runc*
# 安装仓库配置命令行工具
dnf -y install dnf-utils
# 设置docker仓库,用来安装docker和containerd服务
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装docker
dnf -y install docker-ce docker-ce-cli containerd.io
# 确保containerd服务开机自启
systemctl enable --now containerd.service
# 生成包含所有containerd默认设置的配置文件
containerd config default > /etc/containerd/config.toml 
# 重启服务
systemctl restart containerd.service

编辑 /etc/containerd/config.toml

在这里插入图片描述

# 重启服务
systemctl restart containerd.service

禁用swap交换分区

 swapoff -a

禁止交换分区在重启后挂载激活 vim /etc/fstab

在这里插入图片描述

禁用SELINUX

setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
grep ^SELINUX= /etc/selinux/config

禁用防火墙

systemctl disable --now firewalld.service
nft flush ruleset

二、K8s安装和集群初始化

(1)安装k8s 安装工具的软件包

编辑所需的yum仓库 vim /etc/yum.repos.d/kubernetes.repo

[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni

安装Kubernetes及组件

dnf -y install kubectl kubelet kubeadm --disableexcludes=kubernetes
systemctl enable kubelet.service

(2) 集群初始化

获取初始化的默认配置

kubeadm config print init-defaults >> init.yml

更改镜像的地址

在这里插入图片描述

为加快集群初始化进程,提前下载集群运行的镜像

kubeadm config images pull   --config init.yml

在集群初始化时,还是使用较早版本的pause:3.8 ,手动下载并修改镜像仓库标记即可。

拉取pause:3.8镜像 下面这条命令的作用等同于docker pull

crictl -r unix:///var/run/containerd/containerd.sock pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8

查看容器命名空间

ctr namespace list

改名,这条命令的作用等于docker tag

ctr --namespace k8s.io image tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8 registry.k8s.io/pause:3.8  registry.k8s.io/pause:3.8

查看所有containerd 可以使用的镜像

crictl -r unix:///var/run/containerd/containerd.sock images
registry.cn-hangzhou.aliyuncs.com/google_containers/coredns         # k8S 集群内部的域名解析
registry.cn-hangzhou.aliyuncs.com/google_containers/etcd            # 存储K8S集群的状态数据
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver  # K8S的调用接口
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager # K8S 的控制器
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy   #工作节点代理
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler  # pod的调度
registry.cn-hangzhou.aliyuncs.com/google_containers/pause     # K8S的基础设施

保证所有的节点都有以上列出的所有镜像后,开始调整初始化配置并进行集群的初始化 init.yml

在这里插入图片描述
在这里插入图片描述

运行初始化命令:(只需要在控制节点上运行即可)

kubeadm init --config init.yml

集群内加入新节点的指令,这个指令最好保存下来方便使用
在这里插入图片描述
保存控制节点的访问配置

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
# echo引号中的内容来自初始化输出,直接复制即可,每个人的值都不一样
echo 'kubeadm join 192.168.110.10:6443 --token abcdef.0123456789abcdef  --discovery-token-ca-cert-hash sha256:6ca63b1e4c639dbb7b7222a2dc5cb2f0ccaaf57f159310be5810ea7006b6f388' > .kube/node_join

检查目前集群状态

kubectl get pods -o wide -A

有两个pod的状态不是running,原因是没有设置集群需要的网络插件
在这里插入图片描述
在node1 和 node2 上执行加入集群的指令(刚刚保存的)

kubeadm join 192.168.110.10:6443 --token abcdef.0123456789abcdef  --discovery-token-ca-cert-hash sha256:6ca63b1e4c639dbb7b7222a2dc5cb2f0ccaaf57f159310be5810ea7006b6f388'

在控制节点查看集群节点状态

kubectl get nodes

在这里插入图片描述
需要为K8S集群设置网络插件,才是完成了K8S集群的搭建,搭建完成后还可以使用更多的网络插件,结合不同项目的部署需要和实际组网需求。

(3)部署flannel 网络插件

为K8S集群设置flannel网络,网络插件以扁平化的网络管理模型,实现K8S集群中pod的通信,管理配置相当简单。
在控制节点配置完成:

wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

在这里插入图片描述
启动容器

systemctl start docker
systemctl disable docker.service

vim /etc/docker/daemon.json

{
"registry-mirrors": [
   "https://docker.registry.cyou",
   "https://docker-cf.registry.cyou",
   "https://dockercf.jsdelivr.fyi",
   "https://docker.jsdelivr.fyi",
   "https://dockertest.jsdelivr.fyi",
   "https://mirror.aliyuncs.com",
   "https://dockerproxy.com",
   "https://mirror.baidubce.com",
   "https://docker.m.daocloud.io",
   "https://docker.nju.edu.cn",
   "https://docker.mirrors.sjtug.sjtu.edu.cn",
   "https://docker.mirrors.ustc.edu.cn",
   "https://mirror.iscas.ac.cn",
   "https://docker.rainbond.cc"
 ]
}

cat /etc/resolv.conf

# Generated by NetworkManager
nameserver 223.5.5.5
nameserver 8.8.8.8
systemctl restart docker

拉取镜像

docker pull docker.io/flannel/flannel:v0.25.6
docker pull docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel2

导出镜像并同步给node1 node2,然后导入到containerd的镜像仓库中,使用ctr

# 导出镜像
docker save -o flannel.tar flannel/flannel:v0.25.6
docker save -o flannel-cni.tar flannel/flannel-cni-plugin:v1.5.1-flannel2
# 同步
scp flannel.tar root@node1:/root
scp flannel-cni.tar root@node1:/root
scp flannel.tar root@node2:/root
scp flannel-cni.tar root@node2:/root
# 在三个节点上导入镜像仓库中
ctr --namespace k8s.io image import flannel.tar
ctr --namespace k8s.io image import flannel-cni.tar
crictl -r unix:///var/run/containerd/containerd.sock images
# 更新资源
kubectl apply -f kube-flannel.yml

此时检查K8S集群的核心组件以及节点的状态,均显示健康

kubectl get pods -o wide -A

在这里插入图片描述

# 查看集群节点状态
kubectl get nodes

在这里插入图片描述
至此K8S集群部署完成

作为一个较为复杂的平台搭建,生产环境下搭建时可以选择对应的自动化组件完成搭建,简化集群维护和扩展的操作复杂度。

三、使用k8s 集调度运行pod

vim my_nginx.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx	# 资源名称
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 2		# 调度两个pod
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx		# 镜像
        imagePullPolicy: IfNotPresent		# 镜像不存在的时候进行拉取
        ports:
        - containerPort: 80			# 容器内开放80端口访问

拉取 Nginx 镜像

docker pull nginx			# 等待缓慢下载完毕
docker images nginx

导出镜像并导入到node1,node2镜像仓库中

docker save -o nginx.tar nginx:latest
scp nginx.tar root@node1:/root
scp nginx.tar root@node2:/root

在node1 和node2 执行镜像导入操作,应用容器一般都会调度到work节点,所以要保证work节点上有nginx镜像

# 在work导入镜像 (node1 ,node2)
ctr -n k8s.io image import nginx.tar
crictl -r unix:///var/run/containerd/containerd.sock images

在工作节点上导入完毕镜像,就可以回到控制节点上,进行应用的调度

# 更新资源
kubectl apply -f my_nginx.yml
# 查看Kubernetes 集群中 Pod 的状态和信息
kubectl get pods

在这里插入图片描述

# 查看pod分到的IP地址,并尝试访问运行在pod中的nginx服务
kubectl get pods -l run=my-nginx -o custom-columns=POD_IP:.status.podIPs

在这里插入图片描述

# 访问可以成功 省略输出
curl 10.244.1.2
curl 10.244.2.2

或者在控制节点上打开火狐浏览器进行访问
在这里插入图片描述
在这里插入图片描述

# 两个pod 一个在node1  一个在node2
kubectl get pods -o wide   

在这里插入图片描述

四、疑惑

(1). kubectl get pods -o wide -A 是什么意思?

kubectl get pods -o wide -A 是一个 Kubernetes 命令,用于列出集群中所有命名空间的 Pod 的详细信息。下面是这个命令中各个部分的含义:

  • kubectl: 这是 Kubernetes 的命令行工具,用于与 Kubernetes 集群进行交互。
  • get pods: 这是一个子命令,用于获取 Pod 的信息。Pod 是 Kubernetes 中的基本运行单元,通常包含一个或多个容器。
  • -o wide: 这个选项用于指定输出格式为“宽格式”。与默认的输出相比,宽格式会提供更多的信息,比如 Pod 的节点名称、IP 地址和容器状态等。
  • -A: 这个选项表示“所有命名空间”(All Namespaces)。默认情况下,kubectl get pods 只会显示当前命名空间中的 Pod。使用 -A 后,它将列出集群中所有命名空间的 Pod。

因此,运行这个命令后,你将看到一个表格,列出所有 Pod 的名称、状态、节点、IP 地址、容器的状态等信息,适用于监控和管理 Kubernetes 集群中的 Pod。

(2). kubectl apply -f kube-flannel.yml 是什么意思?

kubectl apply -f kube-flannel.yml 命令的主要作用是应用指定的 YAML 配置文件,以便在 Kubernetes 集群中创建或更新资源。在部署 Flannel 等网络插件时,它是一个非常有用的命令。通过使用 apply,你可以简化资源的管理,确保集群中的配置始终保持最新。

  1. kubectl:

    • 这是 Kubernetes 的命令行工具,用于与 Kubernetes API 进行交互。它允许用户管理集群资源、部署应用程序、查看日志等。
  2. apply:

    • 这是 kubectl 的一个子命令,用于创建或更新资源。
    • 使用 apply 命令时,如果资源已经存在,Kubernetes 会对其进行更新;如果资源不存在,则会创建新资源。这种方式很方便,因为它能够自动处理资源的更新而不需要先删除再创建。
  3. -f:

    • 这个选项指定要应用的文件。它后面通常跟一个文件名、目录名或 URL。
    • -f 的全称是 --filename,表示你想要应用的资源定义文件。
  4. kube-flannel.yml:

    • 这是一个 YAML 格式的文件,定义了要在 Kubernetes 中创建或更新的资源。具体内容通常包括以下几种类型的 Kubernetes 资源:
      • Namespaces: 用于组织资源的命名空间。
      • ConfigMaps: 配置文件。
      • Deployments: 应用的部署策略。
      • Services: 服务定义,确保 Pod 能被访问。
      • DaemonSets: 确保在每个节点上运行 Pod。

使用场景

  • 网络插件: Flannel 是 Kubernetes 中的一个流行的网络插件,它允许 Pod 之间的通信。使用 kubectl apply -f kube-flannel.yml 可以方便地在集群中部署 Flannel 网络插件。
  • 资源管理: 通过 YAML 文件定义的所有 Kubernetes 资源(如 Deployment、Service、ConfigMap 等),可以通过这个命令统一管理和版本控制。

(3). k8s 中 node 和 pod 的区别?

  1. 定义
  • Node:

    • Node 是 Kubernetes 集群中的一台机器(可以是物理机或虚拟机),用于运行容器化的应用程序。
    • 每个 Node 都运行一个 Kubernetes 代理(Kubelet),负责与 Kubernetes 控制平面进行通信,管理 Pod 的生命周期,并提供容器运行环境。
    • Nodes 还可以运行其他必要的服务,比如 Kube-proxy,用于网络代理和负载均衡。
  • Pod:

    • Pod 是 Kubernetes 中的基本执行单元,它可以包含一个或多个紧密关联的容器。这些容器共享存储、网络和运行环境。
    • Pod 是运行在 Node 上的,容器在同一个 Pod 中可以互相访问,通常它们共同工作来提供某个功能或服务。
    • Pod 具有自己的网络地址(IP),并能够通过该地址与其他 Pod 或服务通信。
  1. 作用
  • Node:

    • 负责提供计算资源和网络连接。
    • 可以运行多个 Pod,每个 Node 的资源(如 CPU、内存等)是有限的。
    • Nodes 由 Kubernetes 控制平面进行管理和调度,确保 Pod 在集群中合理分布。
  • Pod:

    • 负责运行应用程序或服务的实例。
    • 可以被扩展或缩减,Kubernetes 根据需求动态调整 Pod 的数量(如通过部署、ReplicaSet 等)。
    • Pod 是无状态或有状态的,可以通过 Kubernetes 的状态管理功能来保持应用的状态。
  1. 关系
  • Node 与 Pod 的关系:
    • 每个 Pod 必须运行在一个 Node 上。Node 是 Pod 的宿主,Pod 依赖于 Node 的资源来执行容器。
    • 一个 Node 上可以运行多个 Pod,但通常受限于 Node 的资源(CPU、内存、存储等)。
    • Kubernetes 使用调度器(Scheduler)决定将 Pod 安排到哪个 Node 上。
  1. 生命周期
  • Node:

    • Node 的生命周期包括添加到集群、运行状态、维护状态和从集群中删除。
    • Node 可能会由于硬件故障、维护、升级等原因而下线。
  • Pod:

    • Pod 的生命周期包括创建、运行、就绪、终止等状态。
    • Pod 可以在 Node 故障时被重新调度到其他 Node 上,Kubernetes 会负责恢复 Pod 的状态。
  1. 使用场景
  • Node:

    • 适用于基础设施层面的管理,比如监控节点的状态、资源利用率、故障转移等。
    • 可以根据负载水平进行 Node 的扩展(如增加新 Node)。
  • Pod:

    • 适用于应用层面的管理,运行特定的应用或服务。
    • 可以用于分布式应用程序的管理,像微服务架构中每个服务可以在不同的 Pod 中运行。

总结

  • Node 是 Kubernetes 集群的计算资源单元,提供运行环境和资源。
  • Pod 是运行在 Node 上的基本应用单元,负责承载容器化的应用程序。

(4). sysctl -f /etc/sysctl.d/k8s.conf 什么意思?

sysctl -f /etc/sysctl.d/k8s.conf 的作用是从 k8s.conf 文件中读取并应用内核参数,以优化系统的行为,特别是针对 Kubernetes 的性能和稳定性。这通常在安装或配置 Kubernetes 集群时使用,以确保系统设置符合 Kubernetes 的要求。

  1. sysctl

sysctl 是一个用于在 Linux 系统中查看和修改内核参数的命令行工具。通过 sysctl,管理员可以动态地调整内核的行为,而无需重启系统。

  1. -f 选项

-f 选项表示“强制(force)”,用于强制加载指定文件中的参数设置,而忽略任何错误。如果该选项未指定,sysctl 在遇到错误时会停止执行。

(5). containerd config dumpcontainerd config default有什么区别?

  1. containerd config dump
  • 功能: 此命令会输出当前运行的 Containerd 实例的完整配置,包括所有自定义的设置以及默认值。如果你对 Containerd 进行了任何修改或者自定义配置,使用这个命令可以获取到这些信息。
  • 输出内容: 生成的 config.toml 文件包含了所有有效的配置项,反映了当前系统中 Containerd 的状态和配置。
  1. containerd config default
  • 功能: 此命令用于生成一个包含所有默认设置的 Containerd 配置文件,不考虑当前运行实例的配置。它提供的是 Containerd 的“出厂设置”,即在没有任何用户自定义配置的情况下的配置。
  • 输出内容: 生成的 config.toml 文件包含了所有可以用的默认参数和选项,这些参数是在默认情况下 Containerd 会使用的。

主要区别

  • 内容来源:

    • config dump 反映的是当前 Containerd 实例的实际配置,包括任何手动修改的设置。
    • config default 则是一个全新的配置文件,包含了所有的默认值,不包含任何修改。
  • 用途:

    • config dump 更适合用于调试和排查问题,因为它提供了实际运行时的配置细节。
    • config default 则适用于希望从默认配置开始重新配置 Containerd 的场景。

如果你希望恢复到默认配置,或者了解默认可用的配置项,使用 containerd config default 是合适的。如果你想要保存当前的配置状态,便于将来参考或者调试,则应使用 containerd config dump

(6). kubectl kubelet kubeadm 这几个的区别?

  • kubectl: 用于与 Kubernetes API 交互和管理集群资源。
  • kubelet: 负责在每个节点上管理和运行容器。
  • kubeadm: 用于安装和配置 Kubernetes 集群。

kubectl 是 Kubernetes 的命令行工具,用于与 Kubernetes API 进行交互。它允许用户管理 Kubernetes 集群中的各种资源。

kubelet 是 Kubernetes 的一个主要组件,作为集群中的每个节点的代理,负责管理和运行容器。

kubeadm 是用于简化 Kubernetes 集群的安装和管理的工具。提供集群初始化 (kubeadm init) 和加入节点 (kubeadm join) 的功能。

(7). kubeadm config images pull --config init.ymlcrictl -r unix:///var/run/containerd/containerd.sock pull [registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8](http://registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8) 的区别?

  1. kubeadm config images pull --config init.yml

这个命令用于根据指定的配置文件 init.yml 拉取 Kubernetes 所需的镜像。

  1. crictl -r unix:///var/run/containerd/containerd.sock pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8

这个命令使用 crictl 工具从指定的容器镜像仓库拉取 pause:3.8 镜像。

  • 真正执行拉取操作的命令:
    • 如果你是通过 kubeadm 进行镜像拉取,kubeadm 会调用底层的容器运行时来执行拉取,但实际的拉取操作是由运行时(如 Docker 或 containerd)处理的。
    • crictl 的情况下,它直接与容器运行时进行交互,因此它自己也执行了拉取操作。

所以,kubeadm 依赖于底层容器运行时来完成实际的拉取操作,而 crictl 则直接调用容器运行时来执行拉取操作

(8). containerd的命名空间和Kubernetes命名空间有什么区别?

  • Containerd 命名空间 主要关注底层容器的管理与隔离,适用于容器的生命周期管理。容器资源隔离
  • Kubernetes 命名空间 则用于资源的逻辑分组和管理,适合更复杂的应用架构和多租户环境。集群资源隔离

(9). kubectl get pods 是什么意思?

kubectl get pods 是 Kubernetes 的一个命令,用于列出当前 Kubernetes 集群中所有 Pod 的状态和信息。

Pod 的概念

是 Kubernetes 中的基本部署单位,一个 Pod 可以包含一个或多个紧密关联的容器。它们共享存储、网络,并且作为一个单元被调度。

输出内容

当你执行 kubectl get pods 命令时,通常会看到如下格式的输出:

NAME              READY   STATUS    RESTARTS   AGE
my-app-1         1/1     Running   0          2d
my-app-2         1/1     Running   0          2d
my-app-3         0/1     CrashLoopBackOff   3          5m
  • NAME: Pod 的名称。
  • READY: 显示 Pod 中容器的就绪状态,例如 1/1 表示 Pod 中有一个容器,并且它已经准备好处理请求。
  • STATUS: Pod 的当前状态,包括:
    • Running: Pod 正在运行。
    • Pending: Pod 正在等待被调度或容器正在创建。
    • Succeeded: Pod 中的所有容器都已成功终止。
    • Failed: Pod 中的容器已终止,并且未成功运行。
    • CrashLoopBackOff: 容器因为错误崩溃并在重启时受到限制。
  • RESTARTS: Pod 中容器的重启次数。
  • AGE: Pod 已经存在的时间。

用途

  • 监控 Pod 状态: 通过该命令,你可以快速查看集群中 Pod 的状态,方便运维和故障排查。
  • 调试问题: 如果某个 Pod 处于错误状态(如 CrashLoopBackOff),可以根据输出信息进行进一步的调试。
  • 获取详细信息: 可以与其他命令结合使用,比如 kubectl describe pod <pod-name> 来获取特定 Pod 的详细信息。

示例

  • 列出特定命名空间中的 Pod:

    kubectl get pods -n my-namespace
    
  • 以更详细的格式显示 Pod 信息:

    kubectl get pods -o wide
    

(10). containerddocker的区别?

  • Docker 是一个完整的容器化平台,提供从构建到运行的全面功能,适合开发和小型应用的管理。
  • containerd 是一个轻量级的容器运行时,专注于容器的生命周期管理,通常用于 Kubernetes 等高级容器管理工具中。

定义与组成

  • Docker:
    • Docker 是一个开源的容器化平台,提供了完整的工具链来构建、运行和管理容器化应用程序。它包含多个组件,包括 Docker CLI、Docker Daemon、Docker Hub 和 Docker Compose。
    • Docker 主要面向开发者,提供了用户友好的命令行界面和图形界面,简化了容器的管理。
  • containerd:
    • containerd 是一个容器运行时,用于管理容器的生命周期,包括镜像拉取、容器创建、启动、停止和删除等。
    • 它是一个更底层的组件,专注于容器的运行,通常被 Docker 这样的更高层工具使用。containerd 是 CNCF(Cloud Native Computing Foundation)的一部分。

功能范围

  • Docker:

    • 提供完整的容器管理解决方案,包括构建镜像、管理网络、存储和日志等功能。
    • Docker 可以直接在开发和生产环境中使用,适合快速开发和部署应用程序。
  • containerd:

    • 专注于容器的运行时功能,主要负责容器的创建、调度、生命周期管理等。
    • 不提供镜像构建、网络管理等功能,通常与其他工具(如 Kubernetes)结合使用,以实现更高级的容器管理。

架构与组件

  • Docker:

    • 由多个组件组成,包括:
      • Docker CLI: 命令行工具,用于与 Docker Daemon 进行交互。
      • Docker Daemon: 负责管理容器和镜像的后台服务。
      • Docker Registry: 存储和分发容器镜像的服务。
  • containerd:

    • 作为一个容器运行时,它提供了以下主要功能:
      • 镜像管理: 支持镜像的拉取和管理。
      • 容器管理: 提供容器的创建、启动、停止和删除等功能。
      • 运行时管理: 支持 OCI(Open Container Initiative)标准的容器运行。

依赖关系

  • Docker:

    • Docker 依赖于 containerd 作为其容器运行时,因此 Docker 可以看作是建立在 containerd 之上的更高层抽象。
  • containerd:

    • 可以独立使用,也可以作为其他容器管理工具(如 Kubernetes)的基础组件。

性能与资源占用

  • Docker:

    • 由于包含了多个组件和功能,Docker 的资源占用相对较高,但提供了更友好的用户体验。
  • containerd:

    • 由于其简化的功能集和专注于容器运行,containerd 通常占用更少的资源,适合高效的生产环境。
      管理。

架构与组件

  • Docker:

    • 由多个组件组成,包括:
      • Docker CLI: 命令行工具,用于与 Docker Daemon 进行交互。
      • Docker Daemon: 负责管理容器和镜像的后台服务。
      • Docker Registry: 存储和分发容器镜像的服务。
  • containerd:

    • 作为一个容器运行时,它提供了以下主要功能:
      • 镜像管理: 支持镜像的拉取和管理。
      • 容器管理: 提供容器的创建、启动、停止和删除等功能。
      • 运行时管理: 支持 OCI(Open Container Initiative)标准的容器运行。

依赖关系

  • Docker:

    • Docker 依赖于 containerd 作为其容器运行时,因此 Docker 可以看作是建立在 containerd 之上的更高层抽象。
  • containerd:

    • 可以独立使用,也可以作为其他容器管理工具(如 Kubernetes)的基础组件。

性能与资源占用

  • Docker:

    • 由于包含了多个组件和功能,Docker 的资源占用相对较高,但提供了更友好的用户体验。
  • containerd:

    • 由于其简化的功能集和专注于容器运行,containerd 通常占用更少的资源,适合高效的生产环境。

标签:容器,Kubernetes,kubectl,containerd,集群,Pod,搭建
From: https://blog.csdn.net/qq_42853133/article/details/142915831

相关文章

  • ‌集群与集中式部署的主要区别,集群、分布式、集中式、伪分布式的概念与区别
    主要区别在于它们对资源的利用方式和系统架构的不同。‌集中式部署将所有计算资源和数据集中在一台或多台服务器上,而集群则是将多个服务器联合起来共同工作,以提高系统的可靠性、扩展性和性能。在集中式部署中,所有计算资源和数据都集中在一台或多台服务器上,通常是一台主机带多个......
  • Linux集群架构搭载高可用负载均衡集群
    一.Linux集群概述•根据功能划分为两大类:高可用和负载均衡•高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务•实现高可用的开源软件有:heartbeat、keepalived•负载均衡集群,需要有一台服务器作为分发器,它负责把用......
  • 什么是矩阵系统,怎么选择矩阵系统,怎么oem贴牌,怎么源码搭建
    一、架构设计方面采用微服务架构将矩阵系统拆分为多个小型的、独立的服务模块。每个微服务专注于特定的业务功能,如用户管理、内容发布、数据分析等。这样可以独立地开发、部署和扩展每个服务,而不会影响整个系统。例如,当用户量增加导致用户管理服务压力增大时,可以单独为该服......
  • Nuxt3+PM2集群模式启动及勘误
    起因之前写过一篇Nuxt3的文章,Nuxt3环境变量配置,用到了PM2,但是里面的一些配置存在问题,最近有空又验证了一下,这里做一个勘误。问题PM2的启动配置中有一项是exec_mode,默认是fork,另一个可选值是cluster,fork是单进程模式,cluster是多进程模式,也就是常说的集群模式。最早开始......
  • k8s环境搭建
    k8s环境搭建有一台以上虚拟或者真机就可以搭建。cat/proc/version#查看系统版本,此次使用的是ubuntu20.0,docker版本是27.2.1意味着,k8s版本必须在1.20以上安装docker运行时#选择对应系统的deb安装包进行下载wgethttps://https://github.com/Mirantis/cri-dockerd/rel......
  • 简单快速搭建文件共享服务Samba(最后有企业实践综合案例)
    1Samba服务基本概念1.1什么是Samba服务Samba是一个用于在Linux/Unix系统上实现与MicrosoftWindows系统之间文件和打印共享的开源软件Samba由服务器及客户端程序构成。SMB(ServerMessagesBlock,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的......
  • Centos7---k8s集群 20241013
    目录一、硬件准备(虚拟主机)二、环境准备1、所有机器关闭防火墙2、所有机器关闭selinux3、所有机器关闭swap4、所有机器上添加主机名与ip的对应关系5、在所有主机上将桥接的ipv4流量传递到iptables的链三、为所有节点安装docker四、集群部署1、为所有节点修改仓库,安......
  • 如何从零开始搭建自己的博客(基于flask架构)
    互联网是一片浩瀚的汪洋,但是我已经有了属于自己的岛屿1.前置资源:1.物色好一个令自己满意的服务器(系统选择Ubuntu20.04)2.准备好一个域名(访问ip+端口也可行,但是丑且不安全)3.能够在本地正常运行的项目2.搭建1.不借助宝塔页面笔者一开始是直接用Finalshell连接服务器搭建的......
  • nginx搭建视频下载站
    目录1.前言与介绍 2.atuoindex模块介绍 3.主要的功能 4.下载站基本要求5.具体配置6.做完如上的配置重载服务 7.创建密码文件 8.在windows主机上做域名解析 9.查看统计结果1.前言与介绍 前面的学习中根据nginx的简单的配置实现了根据IP端口和域名实现......
  • 如何在kubernetes环境中共享GPU
    随着人工智能和大模型的快速发展,云上GPU资源共享变得必要,因为它可以降低硬件成本,提升资源利用效率,并满足模型训练和推理对大规模并行计算的需求。在kubernetes内置的资源调度功能中,GPU调度只能根据“核数”进行调度,但是深度学习等算法程序执行过程中,资源占用比较高的是显存,这样就......