k8s基础环境部署

时间:2024-10-04 10:56:17

什么是k8s

K8s,全称Kubernetes,是一个开源的容器编排平台,由谷歌(Google)开发并开源。Kubernetes这个名字源于希腊语,意为“舵手”或“飞行员”,而“k8s”这个缩写则是因为“k”和“s”之间有八个字符的关系。K8s是云技术最核心的部分,也是构建云原生的基石。以下是对K8s的详细介绍:

一、主要功能
容器编排:K8s的核心功能之一,可以自动管理、协调容器化应用程序的部署、扩展和运行。
弹性伸缩:根据应用程序的需求和负载,K8s可以自动调整运行容器的数量,实现弹性伸缩。
自我修复:当容器或节点故障时,K8s可以自动重启、替换这些组件,确保应用程序的高可用性。
资源管理:K8s能够有效管理、分配和计算资源(如CPU、内存等),从而提高资源利用率。

二、系统架构
K8s采用主从(Master-Node)架构,主要由两大组件组成:Master节点和工作节点(Node)。
Master节点:类似集群的“大脑”,负责管理整个集群的状态和协调所有的工作负载。主要组件包括:
API Server:K8s控制平面的前端,处理所有API请求。所有控制请求都通过API Server处理和转发。
Controller Manager:K8s所有资源对象的自动化控制中心。
Scheduler:负责资源调度(Pod调度)的进程。
工作节点(Node):真正执行工作的节点,通过Kubelet、Kube-proxy和容器运行时等组件,提供了强大的容器运行环境。
Kubelet:每个节点上的主要代理进程,负责管理该节点上的Pod和容器。
Kube-proxy:K8s网络代理,负责维护网络规则以便Pod间通信,并通过iptables管理节点上的网络规则,处理服务的负载均衡和网络转发。
容器运行时:负责拉取镜像并在节点上运行容器的软件,如Docker等。

三、核心概念
Pod:K8s中最小的可部署对象,用于托管容器应用程序。一个Pod可以包含一个或多个容器,这些容器共享网络和存储,并共同部署到同一节点上。
Service:一种抽象,用于定义一组Pod的访问方式。Service拥有一个唯一指定的名字、一个虚拟IP(Cluster IP、Service IP、或VIP)和端口号,能够提供服务,并被映射到提供这种服务能力的一组容器应用上。
Deployment:用于定义Pod如何部署和更新的控制器。它允许用户指定副本数量、升级策略等,并确保指定的Pod始终处于预期状态。

四、应用场景
微服务架构:通过将应用程序拆分为多个小型、独立的服务,K8s可以结合Istio等工具来解决微服务架构中的相关问题。
应用的容器化:将应用容器化后部署在K8s上,可以提升应用的可扩展性和管理效率。
持续集成和持续部署(CI/CD):结合CI/CD工具,K8s可以实现自动化的应用构建、测试和部署等流程。
混合云和多云部署:K8s提供了跨不同云提供商的一致性,使得混合云和多云环境的管理更加方便。

K8S的设计架构

K8S(Kubernetes)的设计架构体现了其作为容器编排引擎的强大功能和灵活性。以下是对K8S设计架构的详细阐述:

一、整体架构
K8S的整体架构由Master节点和Worker节点(或称为Node节点)两大部分组成。这两部分共同协作,实现了对容器化应用程序的自动化部署、扩展和管理。
二、Master节点
Master节点是K8S集群的控制和管理中心,它负责整个集群的状态监控、调度、协调以及配置管理。Master节点上运行着以下关键组件:
API Server:
是K8S集群的前端接口,提供了HTTP/HTTPS RESTful API。
所有外部命令(如通过kubectl发出的命令)都会首先到达API Server。
API Server会验证请求的有效性,将其转换为集群的状态变更,并将其保存到etcd中。
Scheduler:
负责资源调度,即决定将Pod部署到哪个Node节点上。
在调度时,会充分考虑集群的拓扑结构、当前各个节点的负载情况以及高可用性和性能等因素。
Controller Manager:
运行各种控制器,每个控制器都是一个独立的控制循环。
持续监听集群的状态,并根据期望状态和实际状态的差异进行调整。
包括节点控制器、复制控制器、端点控制器和命名空间控制器等。
etcd:
是一个分布式键值存储系统,用于保存整个集群的状态、配置信息和元数据。
它是K8S集群的数据库,提供一致性和高可用性的数据存储服务。
三、Worker节点(Node节点)
Worker节点是K8S集群中的工作节点,主要负责运行实际的应用容器。Node节点上运行着以下关键组件:
Kubelet:
是Worker节点上的核心代理,持续监听来自API Server的指令(如Pod的创建、更新和删除)。
根据这些指令管理容器的生命周期,包括拉取镜像、启动容器、监控运行状况和处理终止等。
Kube-proxy:
负责实现K8S服务的负载均衡和网络代理。
配置网络规则(如iptables或IPVS),以实现服务的负载均衡和路由。
维护本地的网络规则,将外部请求正确地路由到集群内的相应容器。
容器运行时:
负责拉取镜像并在节点上运行容器的软件,如Docker、containerd、CRI-O等。
通过CRI(容器运行时接口)与Kubelet进行通信。
四、关键概念和组件
Pod:
是K8S中最小的可部署对象,用于托管容器应用程序。
一个Pod可以包含一个或多个容器,这些容器共享网络和存储,并共同部署到同一节点上。
Service:
一种抽象,用于定义一组Pod的访问方式。
拥有唯一指定的名字、虚拟IP和端口号,能够提供服务,并被映射到提供这种服务能力的一组容器应用上。
Namespace:
集群内部的逻辑隔离机制,用于鉴权和资源管理。
每个资源都属于一个Namespace,同一个Namespace中资源命名唯一,不同Namespace中资源可重名。
五、高可用架构设计
在设计K8S高可用架构时,需要遵循冗余设计、负载均衡、自动故障转移和数据持久性等基本原则。以下是一些关键组件的高可用设计:
Master节点高可用:
部署多个Master节点,通过负载均衡器将请求分发到不同的Master节点,避免单点故障。
使用自动化工具监控Master节点的状态,发现故障时能自动进行故障转移。
etcd高可用:
将etcd部署为集群模式,至少部署三个节点,确保在一个节点故障时,其他节点仍能正常工作。
定期备份etcd的数据,确保在发生数据丢失时能快速恢复。
监控etcd的状态,发现异常时及时报警,进行故障排除。
Node节点高可用:
部署多个Node节点,通过负载均衡将请求分发到不同的Node节点,避免单点故障。
使用合理的Pod调度策略,确保Pod在不同的Node节点上均匀分布。
使用自动化工具监控Node节点的状态,发现故障时能自动将Pod调度到其他Node节点。
网络插件高可用:
将网络插件部署为多个实例,确保在某个实例故障时,其他实例仍能正常工作。
通过负载均衡技术,将网络请求分发到不同的网络插件实例。
监控网络插件的状态,发现异常时及时报警,进行故障排除。

k8s基础实验环境配置

k8s实验网络环境配置

在虚拟机上安装所需要的实验软件

将所需要的安装包放入虚拟机

下面实验环境需要用到docker,以下是对docker的简单介绍

Docker是一个开源的应用容器引擎,它允许开发人员将应用程序及其所有依赖项打包到一个独立的容器中,从而实现快速部署、可移植性和环境一致性。

一、基本概念
容器:Docker的核心概念是容器,它是一种轻量级、可执行的独立软件包,包含应用运行所需的一切要素,如库、系统工具、代码和运行时。容器化技术将应用程序与底层系统解耦,使得应用可以在几乎任何地方以相同的方式运行。
镜像:Docker镜像是一个只读的模板,包含了运行某个软件所需要的所有内容,包括代码、运行时环境、库文件、环境变量和配置文件等。通过镜像,可以创建多个容器实例。
仓库:Docker仓库用于存储和分发镜像,类似于Git的代码仓库。最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。
二、主要特点
轻量化:Docker容器利用宿主机的操作系统内核,与宿主机共享资源,因此比传统的虚拟机更轻量化。
快速启动:Docker容器可以在几秒钟内启动,而传统虚拟机需要几分钟的时间。
可移植性:Docker容器可以在任何支持Docker的环境中运行,无论是开发环境、测试环境还是生产环境。
隔离性:Docker容器提供了强大的隔离性,不同容器之间互相隔离,互不干扰,保证了应用程序的安全性和稳定性。
易于管理:Docker提供了丰富的管理工具和API,使得容器的管理、监控和扩展变得非常简单和灵活。
三、使用场景
开发环境:为开发团队提供一个一致的开发环境,减少“在我机器上可以运行”的问题。
应用程序部署:简化应用程序的部署过程,将应用程序及其所有依赖项打包到一个可移植的Docker容器中,然后将其部署到任何运行Docker的环境中。
微服务架构:Docker是微服务架构的理想选择,允许开发人员将每个微服务打包成一个独立的容器,实现独立部署和扩展。
持续集成/持续部署(CI/CD):与CI/CD工具紧密集成,实现自动化的构建、测试和部署流程。
混合云/多云管理:为混合云/多云策略提供一个统一的抽象层,简化多云管理并提高应用程序的可移植性。
边缘计算:为边缘计算提供一个轻量级、可移植的运行时环境,降低资源消耗和复杂性。
四、安装与配置
Docker支持多种操作系统,包括Windows、MacOS和各种Linux发行版。用户可以从Docker官方网站下载适合其操作系统的Docker安装程序,并按照提示完成安装过程。安装完成后,用户可以通过Docker命令行工具或图形界面工具来管理容器和镜像。

安装docker

在所要用到的虚拟机上做此设置

下面配置软件仓库,同样需要在实验要用到的虚拟机上设置

然后在虚拟机上做本地解析

在master和node1和node2上安装插件

下面我来介绍一下harbor

Harbor是由VMware公司中国团队为企业用户设计的一个Registry server开源项目。

一、基本功能
Harbor提供了企业级的镜像管理功能,包括权限管理(RBAC)、LDAP、审计、管理界面、自我注册、高可用(HA)等。它还特别针对中国用户的特点,设计了镜像复制和中文支持等功能。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全,提升了用户使用Registry构建和运行环境传输镜像的效率。
二、技术特点
镜像资源复制:Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中,确保数据和知识产权在公司内部网络中管控。
高级安全特性:Harbor提供了用户管理、访问控制和活动审计等高级安全特性,确保镜像的安全性和完整性。
容器化部署:Harbor官方直接把Harbor做成了在容器中运行的应用,这个容器在Harbor中依赖类似redis、mysql、pgsql等存储系统,因此需要编排多个容器协同工作。在部署和使用时,需要借助于Docker的单机编排工具(Docker compose)来实现。
三、架构设计
Harbor的架构设计充分考虑了企业用户的需求,提供了多种灵活的部署和扩展方案。
主从同步架构:Harbor官方默认提供主从复制的方案来解决镜像同步问题。通过复制的方式,可以实时将测试环境Harbor仓库的镜像同步到生产环境Harbor。这种架构适用于需要将镜像发布到多个集群节点的场景,通过配置多个Registry实例做负载均衡,可以高效地满足大量节点的下载需求。
双主复制架构:双主复制其实是复用主从同步实现两个Harbor节点之间的双向同步,以保证数据的一致性。在两台Harbor前端配置一个负载均衡器,将进来的请求分流到不同的实例中去。只要有一个实例中有了新的镜像,就会自动同步复制到另一个实例中去。这种架构实现了负载均衡,避免了单点故障,在一定程度上实现了Harbor的高可用性。但需要注意的是,这种架构可能会出现数据不一致的问题,需要手动同步数据。
共享后端存储架构:多个Harbor实例共享同一个后端存储,任何一个实例持久化到存储的镜像都可被其他实例中读取。通过前置负载均衡器进来的请求可以分流到不同的实例中去处理,实现了负载均衡和避免单点故障。这种架构适用于生产环境集群中服务器较多,依赖做完负载均衡的Harbor也无法完全达到需求的场景。
四、安装与配置
Harbor的安装和配置过程相对简单,但需要遵循一定的步骤。用户可以从Harbor的官方网站下载安装包,并按照官方文档进行安装和配置。在安装过程中,需要关闭防火墙、配置主机名、设置Harbor配置文件等。完成安装后,用户可以通过Web界面或API接口来管理Harbor中的镜像和用户。
五、应用场景
Harbor广泛应用于企业级容器化应用中,特别是在需要高效、安全地管理大量镜像的场景中。例如,在云计算平台、大数据处理平台、微服务架构等场景中,Harbor都能够提供优秀的镜像管理解决方案。
综上所述,Harbor是一个功能强大、安全可靠的企业级镜像管理解决方案。它提供了丰富的功能和灵活的架构设计,能够满足企业用户在不同场景下的需求。

进行harbor认证

docker info 后会报错

给他安装一个插件

给该文件中写

再次docker info 后就不会出现报错

在node1和node2上也做此操作

把master主机docker下的文件复制给node1和node2主机

在master主机上安装

在node1和node2上也要安装

cri-dockerd是一个适配器,由Mirantis和Docker合作维护,旨在让Docker Engine能够继续作为Kubernetes的容器运行时使用。以下是关于cri-dockerd的详细介绍:
一、背景与目的
在Kubernetes的早期版本中,Docker作为容器引擎时依赖一个名为dockershim的内置组件。然而,从Kubernetes v1.24版本开始,dockershim组件被移除。为了保持Docker Engine与Kubernetes的兼容性,cri-dockerd应运而生。它作为一个容器运行时接口(Container Runtime Interface,CRI)的适配器,允许Kubernetes通过CRI接口来控制Docker。
二、工作原理
cri-dockerd的工作原理相对简单。它接收来自Kubernetes的CRI请求,然后将这些请求转换为Docker API调用。通过这种方式,cri-dockerd充当了Kubernetes和Docker之间的桥梁,使得Kubernetes能够继续使用Docker作为容器运行时。
三、主要特点
兼容性:cri-dockerd的主要目的是保持Docker Engine与Kubernetes的兼容性,使得用户可以在不改变现有容器引擎的情况下继续使用Kubernetes。
易用性:cri-dockerd的安装和配置相对简单,用户可以通过克隆项目仓库、编译项目、安装二进制文件等步骤轻松完成安装。
可扩展性:cri-dockerd不仅支持Docker Engine,还可以通过扩展支持其他容器运行时。这使得Kubernetes能够更灵活地选择和管理容器运行时。
四、安装与配置
cri-dockerd的安装和配置过程包括以下几个步骤:
克隆项目仓库:用户需要从GitHub等代码托管平台克隆cri-dockerd的项目仓库。
编译项目:使用Go语言环境编译项目,生成cri-dockerd的二进制文件。
安装二进制文件:将编译好的二进制文件移动到系统的可执行路径中,通常是将cri-dockerd复制到/usr/local/bin/目录下。
配置systemd服务:为了方便管理,用户可以将cri-dockerd配置为systemd服务。这包括创建一个systemd服务文件,并添加必要的配置信息。
启动并启用服务:使用systemctl命令启动cri-dockerd服务,并设置其开机自启动。
验证安装:通过检查cri-dockerd服务的状态来验证其是否正常运行。
五、应用场景
cri-dockerd主要应用于以下场景:
Kubernetes集群:在Kubernetes集群中,cri-dockerd允许用户继续使用Docker Engine作为容器运行时,而无需更改现有的容器引擎配置。
容器化应用部署:对于已经使用Docker进行容器化应用部署的用户来说,cri-dockerd提供了一种无缝迁移到Kubernetes的方法。
混合云/多云环境:在混合云或多云环境中,cri-dockerd可以帮助用户保持不同云平台上容器运行时的一致性。
综上所述,cri-dockerd是一个重要的适配器工具,它使得Kubernetes能够继续使用Docker Engine作为容器运行时。通过简单的安装和配置过程,用户可以轻松地在Kubernetes集群中部署和管理Docker容器。

安装cri-docker

指定网络插件名称及基础容器镜像

然后启动cri-docker

在node1和node2上也做同样的操作然后启动kubelet.service

下载

在master节点拉取k8s所需镜像

在浏览器上输入地址访问harbor仓库

集群初始化

设置开机启动

安装flannel网络插件

上传

再次登录浏览器通过访问地址来进入harbor仓库进行查看

使用kubectl get nodes查看

集群部署完毕