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

本文涉及的产品
云防火墙,500元 1000GB
简介: 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集群上。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5天前
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
本教程演示如何在ACK中多机分布式部署DeepSeek R1满血版。
|
5天前
|
存储 Kubernetes 对象存储
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
借助阿里云ACK One注册集群,充分利用阿里云强大ACS GPU算力,实现DeepSeek推理模型高效部署。
|
10天前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
本教程演示如何在ACK中使用vLLM框架快速部署DeepSeek R1模型推理服务。
|
11天前
|
存储 人工智能 弹性计算
NVIDIA NIM on ACK:优化生成式AI模型的部署与管理
本文结合NVIDIA NIM和阿里云容器服务,提出了基于ACK的完整服务化管理方案,用于优化生成式AI模型的部署和管理。
|
1月前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。
|
2月前
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
148 12
|
2月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
2月前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
87 2
|
2月前
|
存储 Kubernetes 容器
K8S部署nexus
该配置文件定义了Nexus 3的Kubernetes部署,包括PersistentVolumeClaim、Deployment和服务。PVC请求20Gi存储,使用NFS存储类。Deployment配置了一个Nexus 3容器,内存限制为6G,CPU为1000m,并挂载数据卷。Service类型为NodePort,通过30520端口对外提供服务。所有资源位于`nexus`命名空间中。
|
2月前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。

热门文章

最新文章