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

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
可观测可视化 Grafana 版,10个用户账号 1个月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: docker与kubernetes的区别是:docker是管理当前主机上的容器,k8s是管理多台主机、跨平台的分布式管理系统。Kubernetes的设计初衷是支持可插拔架构,从而利于扩展kubernetes的功能

k8s.jpg


目录描述

  • 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免费资料,持续发布中...

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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7天前
|
人工智能 API 数据库
FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
【9月更文挑战第5天】 FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
 FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
|
3天前
|
Kubernetes Cloud Native 开发者
云原生入门:从Docker到Kubernetes的旅程
【9月更文挑战第16天】 本文将带你进入云原生的世界,从理解Docker容器的基础开始,逐步深入到Kubernetes集群管理。我们将通过简单的代码示例和实际操作,探索这两个关键技术如何协同工作,以实现更高效、灵活的应用程序部署和管理。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供清晰的指导和实用的知识。
29 11
|
5天前
|
Devops jenkins 持续交付
DevOps实践:构建和部署一个Docker化的应用
【9月更文挑战第14天】在当今快节奏的软件开发领域,DevOps已经成为提升效率、加速交付的关键。本文将引导你理解DevOps的核心概念,并通过一个实际的示例—构建和部署一个Docker化的应用—来深入探讨其实践方法。我们将从简单的应用出发,逐步实现Docker容器化,并最终通过CI/CD流水线自动化部署过程。这不仅是对DevOps流程的一次实操演练,也是对现代软件开发理念的一次深刻体验。
|
7天前
|
Kubernetes Docker 微服务
构建高效的微服务架构:基于Docker和Kubernetes的最佳实践
在现代软件开发中,微服务架构因其灵活性和可扩展性而受到广泛青睐。本文探讨了如何利用Docker和Kubernetes来构建高效的微服务架构。我们将深入分析Docker容器的优势、Kubernetes的编排能力,以及它们如何结合实现高可用性、自动扩展和持续部署。通过具体的最佳实践和实际案例,读者将能够理解如何优化微服务的管理和部署过程,从而提高开发效率和系统稳定性。
|
17天前
|
存储 Kubernetes 测试技术
k8s使用pvc,pv,sc关联ceph集群
文章介绍了如何在Kubernetes中使用PersistentVolumeClaim (PVC)、PersistentVolume (PV) 和StorageClass (SC) 来关联Ceph集群,包括创建Ceph镜像、配置访问密钥、删除默认存储类、编写和应用资源清单、创建资源以及进行访问测试的步骤。同时,还提供了如何使用RBD动态存储类来关联Ceph集群的指南。
35 7
|
17天前
|
存储 Kubernetes 数据安全/隐私保护
k8s对接ceph集群的分布式文件系统CephFS
文章介绍了如何在Kubernetes集群中使用CephFS作为持久化存储,包括通过secretFile和secretRef两种方式进行认证和配置。
25 5
|
6天前
|
弹性计算 运维 持续交付
探索Docker容器化技术及其在生产环境中的应用
探索Docker容器化技术及其在生产环境中的应用
36 5
|
1天前
|
负载均衡 网络协议 开发者
掌握 Docker 网络:构建复杂的容器通信
在 Docker 容器化环境中,容器间的通信至关重要。本文详细介绍了 Docker 网络的基本概念和类型,包括桥接网络、宿主网络、覆盖网络和 Macvlan 网络等,并提供了创建、管理和配置自定义网络的实用命令。通过掌握这些知识,开发者可以构建更健壮和灵活的容器化应用,提高应用的可扩展性和安全性。
|
17天前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
17天前
|
NoSQL 应用服务中间件 Redis
Docker跨宿主机容器通信-通过网络跨宿主机互联
这篇文章介绍了Docker容器跨宿主机通信的实现方法,包括Docker的四种网络模式(host、none、container、bridge)以及如何通过修改网络配置和添加路由规则来实现不同宿主机上的容器之间的互联。
51 0
Docker跨宿主机容器通信-通过网络跨宿主机互联

相关产品

  • 容器服务Kubernetes版