基于Kubernetes v1.25.0和Docker部署高可用集群(说明篇)

目录描述

  • Kubernetes组件说明

  • 特定接口CRI、CNI、CSI

  • Kubernetes v1.25集群创建方案选择

一、Kubernetes组件说明

Docker 的运行机制

运行机制详解:
  • docker client:命令行输入的docker命令就是一个docker客户端

  • docker Engine:Engine也就是引擎,client与Engine间有一定的连接接口

  • containterd:docker引擎去调用containterd,再去连接到containterd-shim(中间的一个切片/垫片类似),再去连接到runC,再去运行containter(也就起容器)

  • 其中containterd和runC组成了docker的运行环境,叫做容器运行时,以上是docker运行的基本框架

补充说明:docker与kubernetes的区别是:docker是管理当前主机上的容器,k8s是管理多台主机、跨平台的分布式管理系统。Kubernetes的设计初衷是支持可插拔架构,从而利于扩展kubernetes的功能。

kubernetes核心组件:

k8s master节点:提供控制功能,完成领导性的任务
  • kube-APIserver:相当于对外的总联络中心,对外提供一个总的接口,所以外部访问都要通过apiserver

  • etcd:数据库,存储相关的k8s资源

  • kub-Scheduler:计划调度器,把k8s的各种工作下发给具体来完成任务的node节点

  • kub-controller-Manager:控制器,网络控制器、卷控制器、服务控制器、node控制器等,来管理各种资源

k8s node节点:提供工作能力,来执行实际的工作任务
  • kubelet:作为连接master和node间的桥梁,接受来自master的下发任务,负责维护pod和容器的生命周期

  • kub-proxy:实现pod网络代理,是service的透明代理兼四层负载均衡功能,核心能力将service的访问请求转发到后端多个pod实例上

二、特定接口CRI、CNI、CSI

Kubernetes提供了三个特定功能的接口,kubernetes通过调用这几个接口,来完成相应的功能。

1. 容器运行时接口CRI: Container Runtime Interface

kubernetes 对于容器的解决方案,只是预留了容器接口,只要符合CRI标准的解决方案都可以使用。CRI容器运行时,早期和主流的是docker,后经生态发展,目前其他的也有多种了,比如containerd,dokcer不再是唯一选择

2. 容器网络接口CNI: Container Network Interface

kubernetes 对于网络的解决方案,只是预留了网络接口,只要符合CNI标准的解决方案都可以使用。CNI容器网络接口:通过跨网络与容器进行通信,依赖于网络插件实现能力,如Flannel、calico

3. 容器存储接口CSI: Container Storage Interface

kubernetes 对于存储的解决方案,只是预留了存储接口,只要符合CSI标准的解决方案都可以使用此接口非必须。应对不同的存储类型提供接口,让工作节点把数据在某个地方做持久化保存

补充说明:容器运行时接口(CRI),是kubernetes定义的一组gRPC服务。Kubelet作为客户端,基于gRPC协议通过Socket和容器运行时通信。CRI 是一个插件接口,它使 kubelet 能够使用各种容器运行时,无需重新编译集群组件。Kubernetes 集群中需要在每个节点上都有一个可以正常工作的容器运行时, 这样 kubelet 能启动 Pod 及其容器。容器运行时接口(CRI)是 kubelet 和容器运行时之间通信的主要协议。

CRI包括两类服务:镜像服务(Image Service)和运行时服务(Runtime Service)

  • 镜像服务提供下载、检查和删除镜像的远程程序调用

  • 运行时服务包含用于管理容器生命周期,以及与容器交互的调用的远程程序调用。

OCI(Open Container Initiative,开放容器计划)定义了创建容器的格式和运行时的开源行业标准,包 括镜像规范(Image Specification)和运行时规范(Runtime Specification)

市面上常用的容器引擎有很多,dockershim, containerd 和cri-o都是遵循CRI的容器运行时

补充说明:什么是容器运行时:如下

简单来说,就是一个程序运行的集合,程序运行都需要一套环境,例如Java要运行,就需要台Jvm,Jvm就提供了Java程序运行的环境;

所对应的还有"编译时",和"运行时"不在一个阶段。比如某程序开发出来是源码,要将其编译成可以执行的二进制,这称为"编译时";最终将二进制运行起来,这叫做"运行时"

三、Kubernetes v1.25集群创建方案选择

方式1: Docker

Docker使用的普及率较高,虽然Kubernetes-v1.24 默认情况下废弃了kubelet对于Docker的支持,但是我们还可以借助于Mirantis维护的cri-dockerd插件方式来实现Kubernetes集群的创建。

Docker Engine 没有实现 CRI, 而这是容器运行时在 Kubernetes 中工作所需要的。为此,必须安装一个额外的服务 cri-dockerd。 cri-dockerd 是一个基于传统的内置 Docker 引擎支持的项目, 它在 1.24 版本从 kubelet 中移除

项目站点: https://github.com/Mirantis/cri-dockerd

方式2: Containerd

默认情况下,Kubernetes在创建集群的时候,使用的就是Containerd 方式。

方式3: CRI-O

CRI-O的方式是Kubernetes创建容器最直接的一种方式,在创建集群的时候,需要借助于cri-o插件的方式来实现Kubernetes集群的创建。


最后~欢迎关注我! @Linux学习的那些事儿

我的个人资源整理,满满都是干货:可按需访问领取

200T免费资料,持续发布中...

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

相关推荐
别挡4 小时前
CentOS Stream 8中安装和使用 Docker
linux·docker·centos
愤怒的代码5 小时前
Centos使用阿里云镜像安装docker
linux·docker·centos
汪公子4925 小时前
使用docker部署考试系统
docker
大江东去了吗6 小时前
k8s HPA
云原生·容器·kubernetes
好奇的菜鸟7 小时前
如何使用Docker快速启动Nginx服务器
服务器·nginx·docker
花菜回锅肉7 小时前
开源可视化大屏superset Docker环境部署
数据仓库·docker·容器·开源·superset
wd5205217 小时前
常用环境部署(十七)——Docker安装pritunl+openvpn
运维·docker·容器
Watermelo6179 小时前
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
java·spring boot·docker·微服务·云原生·容器·devops
摸鱼的张三10 小时前
Docker的基本概念和优势
docker
Richardlygo10 小时前
编写Dockerfile第二版
docker·容器