Kubernetes集群的搭建与配置

10/20/2024 KubernetesKubeKeyKubeSphere云原生高可用集群

# 1. 基本介绍

# 1.1 Kubernetes简介

# 1.1.1 Kubernetes是什么

Kubernetes,简称k8s,是用8代替中间8个字符“ubernete”而成的缩写。是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效,它提供了应用部署,规划,更新,维护的一种机制。

Kubernetes 构建在 Docker 技术之上,为跨主机的容器化应用提供资源调度、服务发现、高可用管理和弹性伸缩等一整套功能,它提供了完善的管理工具,涵盖开发、部署测试、运维监控等各个环节。它的目标不仅仅是一个编排系统,更是提供一个规范,可以让你来描述集群的架构,定义服务的最终状态,Kubernetes 可以帮你将系统自动达到和维持在这个状态。

k8s简介

# 1.1.2 Kubernetes优势及应用场景

Kubernetes为你提供了一个可弹性运行分布式系统的框架。Kubernetes 会满足你的扩展要求、故障转移、部署模式等。

  • 服务发现和负载均衡:Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大,Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。
  • 存储编排:Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。
  • 自动部署和回滚:你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态更改为期望状态。例如,你可以自动化 Kubernetes 来为你的部署创建新容器,删除现有容器并将它们的所有资源用于新容器。
  • 自动完成装箱计算:Kubernetes 允许你指定每个容器所需 CPU 和内存。当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。
  • 自我修复:Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。
  • 密钥与配置管理:Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 SSH 密钥。你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。
  • 高可扩展性:Kubernetes具体很高的可扩展性,这体现在整个架构的方方面面,包括CRI、CSI、CNI等等。使我们可以更好的扩展Kubernetes,使其更加适应我们的业务需求。

# 1.1.3 Kubernetes基本架构及术语

Kubernetes 由众多组件组成,组件间通过 API 互相通信,归纳起来主要分为三个部分。

  • Controller Manager,即控制平面,用于调度程序以及节点状态检测。
  • Nodes,构成了Kubernetes集群的集体计算能力,实际部署容器运行的地方。
  • Pods,Kubernetes集群中资源的最小单位。
k8s基本架构

下面简单介绍一下Kubernetes的常用术语,完整的详见:K8S术语表 (opens new window)

  • 主机(Master):用于控制 Kubernetes 节点的计算机。所有任务分配都来自于此。

  • 节点(Node):负责执行请求和所分配任务的计算机。由 Kubernetes 主机负责对节点进行控制。

  • 容器集(Pod):被部署在单个节点上的,且包含一个或多个容器的容器组。同一容器集中的所有容器共享同一个 IP 地址、IPC、主机名称及其它资源。容器集会将网络和存储从底层容器中抽象出来。这样,您就能更加轻松地在集群中移动容器。

  • 复制控制器(Replication Controller):用于控制应在集群某处运行的完全相同的容器集副本数量。

  • 服务(Service):将工作内容与容器集分离。Kubernetes 服务代理会自动将服务请求分发到正确的容器集——无论这个容器集会移到集群中的哪个位置,甚至可以被替换掉。

# 1.2 KubeKey简介

# 1.2.1 KubeKey是什么

KubeKey是基于Go语言开发的轻量级安装工具,用于部署Kubernetes集群。它提供了一种灵活、快速、方便的方式来安装Kubernetes、Kubernetes和KubeSphere,以及相关的云原生附加组件,它也是扩展和升级集群的有效工具。此外,KubeKey还支持定制离线包,方便用户在离线环境下快速部署集群。

# 1.2.2 KubeKey技术架构

基于模块化设计思路,KubeKey v2.0.0 实现了通用且规范化的任务编排框架。其中定义了host, pipeline, module, taskaction等对象,实现了模块化的任务调度引擎。基于该框架,用户可根据具体需求及业务逻辑,便捷的开发自定义任务流水线执行程序以及扩展 KubeKey 原有的任务流水线。更多详情见:KubeKey开发者指南 (opens new window)

KubeKey技术架构

# 1.2.3 KubeKey的优势

  • 基于 Ansible 的安装程序具有大量软件依赖性,例如 Python。KubeKey 是使用 Go 语言开发的,可以消除在各种环境中出现的问题,从而提高安装成功率。
  • KubeKey 使用 Kubeadm 在节点上尽可能多地并行安装 K8S 集群,以降低安装复杂性并提高效率。与较早的安装程序相比,它将大大节省安装时间。
  • KubeKey 支持将集群从 all-in-one 扩展到多节点集群甚至 HA 集群。它旨在将集群当作一个对象操作,即 CaaO。

# 1.3 KubeSphere简介

# 1.3.1 KubeSphere是什么

KubeSphere是在Kubernetes之上构建的面向云原生应用的分布式操作系统,完全开源,支持多云与多集群管理,提供全栈的IT自动化运维能力,简化企业的DevOps工作流。它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用的集成。

# 1.3.2 KubeSphere功能介绍

KubeSphere作为企业级的全栈化容器平台,为用户提供了一个 Web 控制台,可以快速上手各项功能与服务。它目前提供了工作负载管理、微服务治理、DevOps工程、将代码打成镜像、多租户管理、多维度监控、日志查询与收集、告警通知、服务与网络、应用管理、基础设施管理、镜像管理、应用配置密钥管理等功能模块,开发了适用于适用于物理机部署 Kubernetes 的 负载均衡器插件 Porter,并支持对接多种开源的存储与网络方案,支持高性能的商业存储与网络服务。

KubeSphere主界面

[1] Kubernetes资源管理

对底层 Kubernetes 中的多种类型的资源提供极简的图形化向导式 UI 实现工作负载管理、镜像管理、服务与应用路由管理、密钥配置管理等,并提供弹性伸缩和容器健康检查支持,支持数万规模的容器资源调度,保证业务在高峰并发情况下的高可用性。

Kubernetes资源管理

[2] 微服务治理

  • 灵活的微服务框架:基于 Istio 微服务框架提供可视化的微服务治理功能,将 Kubernetes 的服务进行更细粒度的拆分。
  • 完善的治理功能:支持熔断、灰度发布、流量管控、限流、链路追踪、智能路由等完善的微服务治理功能,同时,支持代码无侵入的微服务治理。

微服务治理

[3] 多租户管理

  • 多租户:提供基于角色的细粒度多租户统一认证与三层级权限管理。
  • 统一认证:支持与企业基于 LDAP / AD 协议的集中认证系统对接,支持单点登录 (SSO),以实现租户身份的统一认证。
  • 权限管理:权限等级由高至低分为集群、企业空间与项目三个管理层级,保障多层级不同角色间资源共享且互相隔离,充分保障资源安全性。

多租户管理

[4] DevOps工程

  • 开箱即用的 DevOps:基于 Jenkins 的可视化 CI / CD 流水线编辑,无需对 Jenkins 进行配置,同时内置丰富的 CI/CD 流水线插件。
  • CI/CD 图形化流水线提供邮件通知功能,新增多个执行条件。
  • 端到端的流水线设置:支持从仓库 (GitHub / SVN / Git)、代码编译、镜像制作、镜像安全、推送仓库、版本发布、到定时构建的端到端流水线设置。
  • 安全管理:支持代码静态分析扫描以对 DevOps 工程中代码质量进行安全管理。
  • 日志:日志完整记录 CI / CD 流水线运行全过程。

DevOps工程

[5] 将代码打成镜像

从已有的代码仓库中获取代码,并通过 Source to Image 构建镜像的方式来完成部署,并将镜像推送至目标仓库,每次构建镜像的过程将以任务 (Job) 的方式去完成。

将代码打成镜像

[6] 多维度监控

  • KubeSphere 全监控运维功能可通过可视化界面操作,同时,开放标准接口,易于对接企业运维系统,以统一运维入口实现集中化运维。
  • 立体化秒级监控:秒级频率、双重维度、十六项指标立体化监控。
    • 在集群资源维度,提供 CPU 利用率、内存利用率、CPU 平均负载、磁盘使用量、inode 使用率、磁盘吞吐量、IOPS、网卡速率、容器组运行状态、ETCD 监控、API Server 监控等多项指标。
    • 在应用资源维度,提供针对应用的 CPU 用量、内存用量、容器组数量、网络流出速率、网络流入速率等五项监控指标。并支持按用量排序和自定义时间范围查询,快速定位异常。
  • 提供按节点、企业空间、项目等资源用量排行。
  • 提供服务组件监控,快速定位组件故障。

多维度监控

[7] 多租户告警系统

  • 支持基于多租户、多维度的监控指标告警,目前告警策略支持集群管理员对节点级别和租户对工作负载级别等两个层级。
  • 灵活的告警策略:可自定义包含多个告警规则的告警策略,并且可以指定通知规则和重复告警的规则。
  • 丰富的监控告警指标:提供节点级别和工作负载级别的监控告警指标,包括容器组、CPU、内存、磁盘、网络等多个监控告警指标。
  • 灵活的告警规则:可自定义某监控指标的检测周期长度、持续周期次数、告警等级等。
  • 灵活的通知发送规则:可自定义发送通知时间段及通知列表,目前支持邮件通知。
  • 自定义重复告警规则:支持设置重复告警周期、最大重复次数并和告警级别挂钩。

多租户告警系统

[8] 日志查询与收集

  • 提供多租户日志管理,在 KubeSphere 的日志查询系统中,不同的租户只能看到属于自己的日志信息。
  • 多级别的日志查询 (项目/工作负载/容器组/容器以及关键字)、灵活方便的日志收集配置选项等。
  • 支持多种日志收集平台,如 Elasticsearch、Kafka、Fluentd。

日志查询与收集

[9] 应用管理与编排

  • 使用开源的 OpenPitrix 提供应用商店和应用仓库服务,为用户提供应用全生命周期管理功能。
  • 用户基于应用模板可以快速便捷地部署一个完整应用的所有服务。

应用管理与编排

[10] 基础设施管理

提供存储类型管理、主机管理和监控、资源配额管理,并且支持镜像仓库管理、权限管理、镜像安全扫描。内置 Harbor 镜像仓库,支持添加 Docker 或私有的 Harbor 镜像仓库。

基础设施管理

[11] 多存储类型支持

  • 支持 GlusterFS、CephRBD、NFS 等开源存储方案,支持有状态存储。
  • NeonSAN CSI 插件对接 QingStor NeonSAN,以更低时延、更加弹性、更高性能的存储,满足核心业务需求。
  • QingCloud CSI 插件对接 QingCloud 云平台各种性能的块存储服务。

多存储类型支持

[12] 多网络方案支持

  • 支持 Calico、Flannel 等开源网络方案。
  • 开发了适用于适用于物理机部署 Kubernetes 的负载均衡器插件 Porter。

# 1.3.3 KubeSphere架构与术语

KubeSphere 采用了前后端分离的架构,实现了面向云原生的设计,后端的各个功能组件可通过 REST API 对接外部系统。KubeSphere 无底层的基础设施依赖,可以运行在任何 Kubernetes、私有云、公有云、虚拟机或物理环境之上。

KubeSphere架构

KubeSphere后端组件:

后端组件 功能说明
ks-apiserver 整个集群管理的 API 接口和集群内部各个模块之间通信的枢纽,以及集群安全控制。
ks-console 提供 KubeSphere 的控制台服务。
ks-controller-manager 实现业务逻辑的,例如创建企业空间时,为其创建对应的权限;或创建服务策略时,生成对应的 Istio 配置等。
metrics-server Kubernetes 的监控组件,从每个节点的 Kubelet 采集指标信息。
Prometheus 提供集群,节点,工作负载,API对象的监视指标和服务。
Elasticsearch 提供集群的日志索引、查询、数据管理等服务,在安装时也可对接您已有的 ES 减少资源消耗。
Fluent Bit 提供日志接收与转发,可将采集到的⽇志信息发送到 ElasticSearch、Kafka。
Jenkins 提供 CI/CD 流水线服务。
Source-to-Image 将源代码自动将编译并打包成 Docker 镜像,方便快速构建镜像。
Istio 提供微服务治理与流量管控,如灰度发布、金丝雀发布、熔断、流量镜像等。
Jaeger 收集 Sidecar 数据,提供分布式 Tracing 服务。
OpenPitrix 提供应用程序生命周期管理,例如应用模板、应用部署与管理的服务等。
Alert 提供集群、Workload、Pod、容器级别的自定义告警服务。
Notification 是一项综合通知服务; 它当前支持邮件传递方法。
Redis 将 ks-console 与 ks-account 的数据存储在内存中的存储系统。
OpenLDAP 负责集中存储和管理用户帐户信息与对接外部的 LDAP。
Storage 内置 CSI 插件对接云平台存储服务,可选安装开源的 NFS/Ceph/Gluster 的客户端。
Network 可选安装 Calico/Flannel 等开源的网络插件,支持对接云平台 SDN。

KubeSphere名词解释:

KubeSphere Kubernetes 对照释义
项目 Namespace, 为 Kubernetes 集群提供虚拟的隔离作用,详见 Namespace (opens new window)
容器组 Pod,是 Kubernetes 进行资源调度的最小单位,每个 Pod 中运行着一个或多个密切相关的业务容器
部署 Deployments,表示用户对 Kubernetes 集群的一次更新操作,详见 Deployment (opens new window)
有状态副本集 StatefulSets,用来管理有状态应用,可以保证部署和 scale 的顺序,详见 StatefulSet (opens new window)
守护进程集 DaemonSets,保证在每个 Node 上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用,详见 Daemonset (opens new window)
任务 Jobs,在 Kubernetes 中用来控制批处理型任务的资源对象,即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束。任务管理的 Pod 根据用户的设置将任务成功完成就自动退出了。比如在创建工作负载前,执行任务,将镜像上传至镜像仓库。详见 Job (opens new window)
定时任务 CronJob,是基于时间的 Job,就类似于 Linux 系统的 crontab,在指定的时间周期运行指定的 Job,在给定时间点只运行一次或周期性地运行。详见 CronJob (opens new window)
服务 Service, 一个 Kubernete 服务是一个最小的对象,类似 Pod,和其它的终端对象一样,详见 Service (opens new window)
应用路由 Ingress,是授权入站连接到达集群服务的规则集合。可通过 Ingress 配置提供外部可访问的 URL、负载均衡、SSL、基于名称的虚拟主机等,详见 Ingress (opens new window)
镜像仓库 Image Registries,镜像仓库用于存放 Docker 镜像,Docker 镜像用于部署容器服务, 详见 Images (opens new window)
存储卷 PersistentVolumeClaim(PVC),满足用户对于持久化存储的需求,用户将 Pod 内需要持久化的数据挂载至存储卷,实现删除 Pod 后,数据仍保留在存储卷内。Kubesphere 推荐使用动态分配存储,当集群管理员配置存储类型后,集群用户可一键式分配和回收存储卷,无需关心存储底层细节。详见 Volume (opens new window)
存储类型 StorageClass,为管理员提供了描述存储 “Class(类)” 的方法,包含 Provisioner、 ReclaimPolicy 和 Parameters 。详见 StorageClass (opens new window)
流水线 Pipeline,简单来说就是一套运行在 Jenkins 上的 CI/CD 工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。
企业空间 Workspace,是 KubeSphere 实现多租户模式的基础,是您管理项目、 DevOps 工程和企业成员的基本单位。

# 1.4 云原生简介

# 1.4.1 云原生是什么

云原生(CloudNative)指的是基于在云中构建、运行应用程序的理念,而打造的一套技术体系。 不同于传统数据中心的软件开发、构建模式,云原生包含有“原生为云而设计”的含义,能够有效提升云上资源利用率、缩短开发周期。

云原生的组成

Kubernetes作为云原生技术的代表,是目前最流行的容器编排系统,负责自动化容器化应用的部署、扩展和管理。 Kubernetes具备高效的资源调度能力,可以支撑大规模分布式系统,实现了应用的高可用性与高伸缩性。

# 1.4.2 云原生优缺点

云原生优点:

  • 快速迭代:借助于云原生的微服务技术,在应用程序开发时,IT 技术人员能够将代码,解耦成独立的模块单元,以敏捷的开发周期和单体的独立功能,提升拓展性、降低互联性,加快项目交付节奏。
  • 自动部署:相比传统开发模式,云原生技术能够有效解决代码质量低、发布流程长等难题,以自动化部署、模块单元组合的方式,构建编译、测试、部署等环节一体化的高效能流程,推进智能化开发。
  • 独立高效:在开发创新的思路跃迁上,云原生的微服务化框架,完全突破旧有开发模式瓶颈,聚焦打造可独立发布单体应用目标,全方位解构僵化的传统 IT 架构系统,助力不同团队优化协作流程。

云原生缺点:

  • 安全隐患:云原生因应用容器技术,容易对数据安全造成一定程度的安全隐患。攻击者如果从某个容器链接至主机,有可能在下一步攻击行动中,入侵更多非授权容器,导致大规模数据风险。

# 2. 部署方案及服务器准备

# 2.1 部署方案及配置要求

下面将使用KubeSphere项目里的KubeKey工具一键部署Docker、Kubernetes环境。

# 2.1.1 集群节点要求

[1] 至少1台Linux服务器作为集群节点,在生产环境中,建议准备至少5台Linux服务器。

  • 最低资源要求:2 个 CPU 核心、4 GB 内存、20 GB 存储。
  • 建议资源要求:8 个 CPU 核心、16 GB 内存、200 GB 存储。

注:生产环境建议在每台集群节点的 /var/lib/docker 目录额外挂载至少 200 GB 磁盘空间用于存储容器运行时数据。

[2] SSH可以访问所有节点,所有节点的时间同步。

注:默认情况下,KubeKey将安装OpenEBS来为开发和测试环境配置LocalPV,这对新用户来说非常方便。对于生产环境,请使用 NFS/Ceph/GlusterFS 或商业化存储作为持久化存储,并在所有节点中安装相关的客户端。

# 2.1.2 端口放行要求

需要放行以下端口和协议用于服务之间的通信。如果基础设施环境已启用防火墙,需要在防火墙设置中放行所需的端口和协议,如果未启用防火墙,可以跳过此步骤。

服务 协议 起始端口 结束端口 备注
ssh TCP 22
etcd TCP 2379 2380
apiserver TCP 6443
calico TCP 9099 9100
bgp TCP 179
nodeport TCP 30000 32767
master TCP 10250 10258
dns TCP 53
dns UDP 53
metrics-server TCP 8443
local-registry TCP 5000 离线环境需要
local-apt TCP 5080 离线环境需要
rpcbind TCP 111 使用 NFS 作为持久化存储时需要
ipip IPENCAP/IPIP 使用 Calico 时需要

可以通过以下命令一键检查端口占用情况(其中无需检查的端口可以将其移除):

$ lsof -nP -sTCP:LISTEN \
     -iTCP:22 -iTCP:2379 -iTCP:2380 -iTCP:6443 \
     -iTCP:9099 -iTCP:9100 -iTCP:179 -iTCP:30000-32767 \
     -iTCP:10250 -iTCP:10258 -iTCP:53 -iTCP:8443 \
     -iTCP:5000 -iTCP:5080 -iTCP:111 \
     -iUDP:53
1
2
3
4
5
6

# 2.2 准备服务器并安装依赖

# 2.2.1 准备实验服务器

准备了3台环境纯净的内网服务器节点用于实验,都是境内服务器,能够联网但无法访问被墙地址,节点之间的网络是互通的。

服务器IP 服务器厂商 CPU核心 CPU架构 内存 存储 操作系统 主机名 角色
192.168.32.70 Inspur 20 x86_64 256GB 256TB Debian12 master master, etcd
192.168.32.69 Inspur 20 x86_64 256GB 256TB Debian12 node1 worker
192.168.32.68 Supermicro 20 x86_64 256GB 256TB Debian12 node2 worker

# 2.2.2 安装基础依赖项

需要为所有集群节点安装 socat、conntrack、ebtables 和 ipset。如果上述依赖项在各集群节点上已存在,可以跳过此步骤。

$ sudo apt install socat conntrack ebtables ipset -y
1

# 3. KubeKey搭建Kubernetes集群

# 3.1 下载KubeKey工具

由于集群节点访问 GitHub 受限,因此执行以下命令设置下载区域:

$ export KKZONE=cn
1

执行以下命令下载 KubeKey 工具的最新版:

$ curl -sfL https://get-kk.kubesphere.io | sh -
1

下载完成后当前目录下将生成 KubeKey 二进制文件 kk,然后给它添加执行权限:

$ sudo chmod +x kk
1

# 3.2 准备安装配置文件

# 3.2.1 生成安装配置文件

查看Kubekey支持的Kubernetes版本。

$ ./kk version --show-supported-k8s
1

执行以下命令生成安装配置文件 config-sample.yaml:

$ ./kk create config --with-kubernetes v1.28.12
1

初始化生成的安装配置文件 config-sample.yaml 内容如下:

apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
  name: sample
spec:
  hosts:
  - {name: node1, address: 172.16.0.2, internalAddress: 172.16.0.2, user: ubuntu, password: "Qcloud@123"}
  - {name: node2, address: 172.16.0.3, internalAddress: 172.16.0.3, user: ubuntu, password: "Qcloud@123"}
  roleGroups:
    etcd:
    - node1
    control-plane: 
    - node1
    worker:
    - node1
    - node2
  controlPlaneEndpoint:
    ## Internal loadbalancer for apiservers 
    # internalLoadbalancer: haproxy

    domain: lb.kubesphere.local
    address: ""
    port: 6443
  kubernetes:
    version: v1.28.12
    clusterName: cluster.local
    autoRenewCerts: true
    containerManager: containerd
  etcd:
    type: kubekey
  network:
    plugin: calico
    kubePodsCIDR: 10.233.64.0/18
    kubeServiceCIDR: 10.233.0.0/18
    ## multus support. https://github.com/k8snetworkplumbingwg/multus-cni
    multusCNI:
      enabled: false
  registry:
    privateRegistry: ""
    namespaceOverride: ""
    registryMirrors: []
    insecureRegistries: []
  addons: []
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

注:安装完成后,请勿删除安装配置文件 config-sample.yaml,后续进行节点添加等操作时仍需要使用该文件。如果该文件丢失,需要重新创建安装配置文件。

# 3.2.2 修改安装配置文件

修改安装配置文件 config-sample.yaml:

$ vim config-sample.yaml
1

修改后的配置文件内容如下:

apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
  name: sample
spec:
  hosts:
    - {name: master, address: 192.168.32.70, internalAddress: 192.168.32.70, user: root, privateKeyPath: "/root/.ssh/id_rsa"}
    - {name: node1, address: 192.168.32.69, internalAddress: 192.168.32.69, user: root, privateKeyPath: "/root/.ssh/id_rsa"}
    - {name: node2, address: 192.168.32.68, internalAddress: 192.168.32.68, user: root, privateKeyPath: "/root/.ssh/id_rsa"}
  roleGroups:
    etcd:
    - master
    control-plane: 
    - master
    worker:
    - node1
    - node2
  controlPlaneEndpoint:
    # internalLoadbalancer: haproxy
    domain: lb.kubesphere.local
    address: ""
    port: 6443
  kubernetes:
    version: v1.28.12
    clusterName: cluster.local
    autoRenewCerts: true
    containerManager: docker
  network:
    plugin: calico
    kubePodsCIDR: 10.233.64.0/18
    kubeServiceCIDR: 10.233.0.0/18
    multusCNI:
      enabled: false
  registry:
    privateRegistry: ""
    namespaceOverride: ""
    registryMirrors: []
    insecureRegistries: []
  addons: []
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

由于我们服务器出于安全性考虑均禁止了root用户的密码登录,因此这里采用配置密钥访问的方式来实现。

// 在192.168.32.70主节点生成密钥(若已存在,则不必重新生成)
$ ssh-keygen -t rsa -b 4096 -f /root/.ssh/id_rsa
$ cat /root/.ssh/id_rsa.pub

// 分别在这3个节点的authorized_keys文件里写入主节点的公钥
$ vim /root/.ssh/authorized_keys
写入刚刚查出来的公钥信息
$ chmod 600 /root/.ssh/authorized_keys

// 在主节点验证能否免密登录(若无需输入密码,则已经配置成功)
$ ssh [email protected]
$ ssh [email protected]
$ ssh [email protected]
1
2
3
4
5
6
7
8
9
10
11
12
13

配置说明:

[1] 在 config-sample.yaml 配置文件的 spec:hosts 参数下设置各服务器的信息。

参数 描述
name 用户自定义的服务器名称。
address 服务器的 SSH 登录 IP 地址。
internalAddress 服务器在子网内部的 IP 地址。
port 服务器的 SSH 端口号。如果使用默认端口 22 可不设置此参数。
user 服务器的 SSH 登录用户名,该用户必须为 root 用户或其他具有 sudo 命令执行权限的用户。如果使用 root 用户可不设置此参数。
password 服务器的 SSH 登录密码。如果已经设置 privateKeyPath 可不设置此参数。
privateKeyPath 服务器的 SSH 登录密钥的路径。如果已经设置 password 可不设置此参数。
arch 服务器的硬件架构。如果服务器的硬件架构为 Arm64,请将此参数设置为 arm64,否则请勿设置此参数。安装包默认仅支持所有集群节点都为 x86_64 或 arm64 架构的场景。如果各集群节点的硬件架构不完全相同,请联系 KubeSphere 技术支持团队。

[2] 在 config-sample.yaml 配置文件的 spec:roleGroups 参数下设置服务器的角色:

参数 描述
etcd 安装 etcd 数据库的节点。请在此参数下设置集群控制平面节点。
control-plane 集群控制平面节点。如果您已经为集群配置了高可用性,您可以设置多个控制平面节点。
worker 集群工作节点。
registry 用于创建私有镜像服务的服务器。该服务器不会用作集群节点。 安装、升级 KubeSphere 时,如果集群节点无法连接互联网,需要在此参数下设置用于创建私有镜像服务的服务器。其他情况下请将此参数注释掉。

# 3.3 创建Kubernetes集群

执行以下命令创建Kubernetes集群:

$ export KKZONE=cn
$ ./kk create cluster -f config-sample.yaml
1
2

注:因为涉及的组件很多,安装过程有不少坑儿,配置稍有写错就会出问题,如果已经报错了,先执行如下命令删除集群再重装。

$ ./kk delete cluster -f config-sample.yaml
$ rm -rf kubekey
1
2

若日志里显示如下信息,则表明Kubernetes集群创建成功。

Pipeline[CreateclusterPipeline] execute successfully
1

成功创建Kubernetes集群

获取集群中所有命名空间的Pod列表。

获取集群中所有命名空间的Pod列表

查看Kubernetes的版本信息。

$ kubectl version

Client Version: v1.28.12
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.28.12
1
2
3
4
5

# 4. 参考资料

[1] kubernetes官方文档 from kubernetes官网 (opens new window)

[2] Kubernetes 是什么? from redhat (opens new window)

[3] awesome-kubernetes-notes from sphinx (opens new window)

[4] k8s教程 from GIthub (opens new window)

[5] Kubernetes中文文档 from Kubernetes中文社区 (opens new window)

[6] Kubernetes 基础教程 from 云原生资料库 (opens new window)

[7] 云原生架构概述 from dockone (opens new window)

[8] Kubernetes 介绍篇:是什么?为什么要用?from InfoQ (opens new window)

[9] Docker不香吗?为什么还要用K8s from 51CTO (opens new window)

[10] 安装 Kubernetes Dashboard from k8s折腾笔记 (opens new window)

[11] 面向云原生应用的容器混合云 from KubeSphere官网 (opens new window)

[12] KubeSphere简介,功能介绍,优势,架构说明及应用场景 from CSDN (opens new window)

[13] KubeSphere简介 from Cloudpods (opens new window)

[14] kubeadm init 报错E0613解决办法 from CSDN (opens new window)

[15] k8s Failed to create pod sandbox错误处理 from CSDN (opens new window)

[16] 麒麟系统离线安装kubernetes,kubesphere from Datehoer's Blog (opens new window)

[17] 在 Linux 上安装 Kubernetes 和 KubeSphere from KubeSphere官方文档 (opens new window)

[18] 在 Linux 上以 All-in-One 模式安装 KubeSphere from KubeSphere官方文档 (opens new window)

Last Updated: 1/28/2025, 10:30:59 AM