Kubernetes 一主多从集群从 0 到 1 部署

简介: Kubernetes 一主多从集群从 0 到 1 部署

前言

在本实战指南中,我们将使用 kubeadm 工具来安装和部署Kubernetes 1.24.9版本的一主多从环境。因为 Kubesphere 的版本兼容 的原因这里并没有选择最新版本的 K8S,不过好在不同版本安装和部署的过程差异并不大。


前置准备

安装虚拟机

K8S 一主两从的3 台 Linux 系统服务器配置如下:


主机名 K8S角色 IP 配置 操作系统

k8s-master Master节点 192.168.179.21 4核CPU 8G内存 20G硬盘 CentOS 7.9

k8s-node1 Worker节点 192.168.179.22 4核CPU 8G内存 20G硬盘 CentOS 7.9

k8s-node2 Worker节点 192.168.179.23 4核CPU 8G内存 20G硬盘 CentOS 7.9

❗️ 如果你没有安装虚拟机,你可以按照这篇文章 VMware 基于CentOS 7.9 镜像搭建 K8S 一主多从本地虚拟服务器 的步骤来完成搭建。


关闭防火墙

💥 所有节点均要执行


# 关闭防火墙

systemctl stop firewalld

# 重启禁用防火墙    

systemctl disable firewalld

# 查看防火墙状态

systemctl status firewalld

1

2

3

4

5

6

禁用 SELinux

💥 所有节点均要执行


sed -i 's/enforcing/disabled/' /etc/selinux/config

1

关闭 Swap 分区

💥 所有节点均要执行


swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

1

时区设置和时间同步

# 时区设置

sed -i '$a\export TZ=Asia/Shanghai' /etc/profile && source /etc/profile && date

# 时间校准(阿里云 ntp 时间服务器)

yum -y install ntpdate

ntpdate time1.aliyun.com


主机名和域名解析配置

192.168.179.21 主机执行


# 192.168.179.21 设置主机名 k8s-master

hostnamectl set-hostname k8s-master

# 立即生效设置

exec bash


192.168.179.22 主机执行

# 192.168.179.22 设置主机名 k8s-node1

hostnamectl set-hostname k8s-node1

# 立即生效设置

exec bash


192.168.179.23 主机执行


# 192.168.179.23 设置主机名 k8s-node2

hostnamectl set-hostname k8s-node2

# 立即生效设置

exec bash


配置域名解析 (💥 所有节点机器均要执行💥 )


cat >> /etc/hosts << EOF

192.168.179.21  k8s-master

192.168.179.22  k8s-node1

192.168.179.23  k8s-node2

EOF


转发 IPv4 并让 iptables 看到桥接流量

💥 所有节点机器均要执行💥


官方文档:转发 IPv4 并让 iptables 看到桥接流量


执行下述指令:


#

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf

overlay

br_netfilter

EOF

modprobe overlay

modprobe br_netfilter

# 设置所需的 sysctl 参数,参数在重新启动后保持不变

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-iptables  = 1

net.bridge.bridge-nf-call-ip6tables = 1

net.ipv4.ip_forward                 = 1

EOF

# 应用 sysctl 参数而不重新启动

sudo sysctl --system


通过运行以下指令确认 br_netfilter 和 overlay 模块被加载:


lsmod | grep br_netfilter

lsmod | grep overlay

1

2

通过运行以下指令确认 net.bridge.bridge-nf-call-iptables、net.bridge.bridge-nf-call-ip6tables 和 net.ipv4.ip_forward 系统变量在你的 sysctl 配置中被设置为 1:


sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

1

Docker 安装

💥 所有节点机器均要执行💥


安装依赖包


yum install -y yum-utils device-mapper-persistent-data lvm2

1

配置 Docker 阿里云 yum 源


yum-config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1

安装 docker-ce


yum install -y docker-ce

1

配置 Docker 阿里云镜像加速


sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{

 "registry-mirrors": ["https://g6jp4cfd.mirror.aliyuncs.com"],

 "exec-opts": ["native.cgroupdriver=systemd"],

 "log-driver": "json-file",

 "log-opts": {

   "max-size": "100m"

 }  

}

EOF

sudo systemctl daemon-reload


启动 Docker


# 启动 Docker & 开机自启  

systemctl enable --now docker

1

2

cri-docker 安装

自 Kubernetes v1.24 版本开始,已移除了 Dockershim。然而,Docker Engine 默认不支持 CRI 规范,这导致无法直接集成两者。为了解决这个问题,Mirantis 和 Docker 共同创建了 cri-dockerd 项目,它提供了一个适配器来支持 CRI 规范,使得 Kubernetes 可以通过 CRI 控制 Docker Engine。


💥 所有节点机器均要执行💥


下载 cri-dockerd


⬇️下载地址 (无法访问请移步 百度网盘)


# 网络不好可多尝试几次,实在不行从网盘下载再上传文件至服务器安装

wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1-3.el7.x86_64.rpm

1

2

安装 cri-dockerd


rpm -ivh cri-dockerd-0.3.1-3.el7.x86_64.rpm

1

配置 cri-dockerd


vi /usr/lib/systemd/system/cri-docker.service

1

# ExecStart=/usr/bin/cri-dockerd 追加配置

--network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.8

微信图片_20230710111216.png


启动 cri-dockerd


# 设置 cri-docker 开机自启 & 立即启动

systemctl enable --now cri-docker

# 查看 cri-docker 状态

systemctl status cri-docker

微信图片_20230710111221.png

Kubernetes 部署

配置 Kubernetes 镜像源

💥 所有节点机器均要执行💥


cat > /etc/yum.repos.d/kubernetes.repo << EOF

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=0

gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF


Kubernetes 组件安装

kubeadm、kubelet 和 kubectl 是 Kubernetes 生态系统中的三个重要组件:


组件                         说 明

kubeadm kubeadm 是一个命令行工具,用于初始化和管理 Kubernetes 集群的引导工具。

kubelet kubelet 是运行在每个 Kubernetes 节点,负责管理节点上的容器运行时,并与 Kubernetes 控制平面通信。

kubectl kubectl 是 Kubernetes 的命令行工具,可以执行各种操作,如创建、删除和管理 Kubernetes 资源

💥 所有节点机器均要执行💥


# 查看版本

yum list kubeadm --showduplicates | sort -r

# 安装

yum install -y kubelet-1.24.9-0 kubeadm-1.24.9-0 kubectl-1.24.9-0

# 启动 & 开机自启

systemctl enable --now kubelet

# 查看状态

systemctl status kubelet

Master 节点初始化

💥 Master 节点机器执行💥


kubeadm init\

   --apiserver-advertise-address=192.168.179.21 \

   --image-repository registry.aliyuncs.com/google_containers \

   --kubernetes-version v1.24.9 \

   --service-cidr=10.96.0.0/12 \

   --pod-network-cidr=10.244.0.0/16  \

   --cri-socket unix:///var/run/cri-dockerd.sock


初始化成功提示信息如下(重要):

微信图片_20230710111254.png


根据提示执行以下命令来配置 kubectl


mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config


复制 Node 节点加入集群命令(下文用)


Node 节点加入集群

💥 Node节点机器执行💥


kubeadm join 192.168.179.21:6443 --token 2gu3ls.e1l6gdi97o92zxlr \

       --discovery-token-ca-cert-hash sha256:280e47038be497d46c065cbcef5212918d93910642e5ea808e79944340cb6a8b \

--cri-socket unix:///var/run/cri-dockerd.sock

Calico 网络插件安装

💥 Master 节点机器安装💥


Calico 是一个强大的容器网络插件,为 Kubernetes 提供 IP 网络互连、网络策略和跨主机网络连接等功能,实现高性能和安全的容器通信。


🚀🚀 官方:Calico 安装和配置


微信图片_20230710111321.png


下载配置


curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico.yaml -O

1

修改配置


在上节「Master 节点初始化」 Pod 分配的 IP 地址范围 --pod-network-cidr=10.244.0.0/16 ,而非 192.168.0.0/16 ,根据官网安装步骤2需要将配置中的 CALICO_IPV4POOL_CIDR 变量设置为 10.244.0.0/16。


vi calico.yaml

1

微信图片_20230710111921.png


安装 Calico


sudo kubectl apply -f calico.yaml

1

稍等片刻…


K8S 部署成功验证

在 Master 节点执行 kubectl get nodes 命令查看各个节点状态为 Ready 表示 Kubernetes 安装成功

微信图片_20230710111936.png



结语

至此,我们成功完成了一主多从的Kubernetes环境搭建。后续文章中,我们将进行Kubesphere的安装,以便将前后端分离项目 youlai-boot + vue3-element-admin 和微服务项目 youlai-mall 部署到Kubernetes集群上。


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
5月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
474 2
|
5月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
328 89
|
10月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
565 9
|
10月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
12月前
|
存储 Kubernetes 开发工具
使用ArgoCD管理Kubernetes部署指南
ArgoCD 是一款基于 Kubernetes 的声明式 GitOps 持续交付工具,通过自动同步 Git 存储库中的配置与 Kubernetes 集群状态,确保一致性与可靠性。它支持实时同步、声明式设置、自动修复和丰富的用户界面,极大简化了复杂应用的部署管理。结合 Helm Charts,ArgoCD 提供模块化、可重用的部署流程,显著减少人工开销和配置错误。对于云原生企业,ArgoCD 能优化部署策略,提升效率与安全性,是实现自动化与一致性的理想选择。
776 0
|
11月前
|
存储 Kubernetes 异构计算
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
|
12月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
1045 33
|
12月前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
646 19
|
12月前
|
人工智能 分布式计算 调度
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
|
12月前
|
存储 测试技术 对象存储
使用容器服务ACK快速部署QwQ-32B模型并实现推理智能路由
阿里云最新发布的QwQ-32B模型,通过强化学习大幅度提升了模型推理能力。QwQ-32B模型拥有320亿参数,其性能可以与DeepSeek-R1 671B媲美。

推荐镜像

更多