实战Kubernetes之快速部署 K8s 集群 v1.28.0

news2024/12/23 20:37:48

文章目录

  • 一、前言
  • 二、主机准备
  • 三、系统配置
    • 3.1. 关闭防火墙及相关配置
    • 3.2. 修改主机名
    • 3.3. 主机名DNS解析
    • 3.4. 时间同步
    • 3.5. 配置网络
    • 3.6. 重启服务器
  • 四、安装软件
    • 4.1. 安装 Docker
    • 4.2. 安装 cri-dockerd
    • 4.3. 添加国内YUM源
    • 4.4. 安装 kubeadm、kubelet 和 kubectl
  • 五、Master 节点初始化 K8s
  • 六、Worker 节点加入 K8s 集群
  • 七、安装 K8s 网络插件
  • 八、小结

一、前言

K8s 集群部署有多种方式,kubeadm 是 K8s 官方提供的集群部署工具,这种方法最为常用,简单快速,适合初学者。本文就使用 kubeadm 搭建集群演示。

二、主机准备

本次我们搭建一套 3 个节点的 K8s 集群,服务器使用个某云厂商的 3 台服务器,配置不高,最小硬件配置:2 核 CPU、2G 内存、50G 硬盘,操作系统需要是 CentOS 7.6。服务器最好设置需要可以访问外网,有些镜像要从网上拉取。以下是我在本次演示中使用的服务器配置。

实例名主机名私网地址主机配置备注
s1k8s-master192.168.9.862核,2GiB,系统盘 40GiB控制节点
s2k8s-worker1192.168.14.1962核,2GiB,系统盘 40GiB工作节点
s3k8s-worker2192.168.8.782核,4GiB,系统盘 50GiB工作节点

控制台截图如下:
在这里插入图片描述

注意:这 3 台服务器需要在同一个内网环境,可以通过内网 IP 相互访问,在集群配置过程中会使用到内网 IP。如果要使用外网 IP 搭建集群,还需要单独配置虚拟网卡以及修改一些配置,可以参考网上相关文章。

三、系统配置

在所有 3 台主机上都完成以下准备工作,逐步执行以下命令。

3.1. 关闭防火墙及相关配置

关闭 Linux 操作系统的防火墙、安全服务和 swap 分区,如果有提示执行命令权限不够,可以切换到 root 用户或者在命令前增加 “sudo” 来提升执行命令的权限。

# 关闭和禁用防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux,selinux 是 Linux 系统下的一个安全服务,需要关闭
setenforce 0  # 临时
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久

# 关闭 Linux 的 swap 分区,提升 k8s 的性能
swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

3.2. 修改主机名

K8s 使用主机名进行节点的通信,所以需要按照表格中的主机名修改 3 台服务器的主机名。注意:K8s 要求主机名使用 “-” 或者 “.” 连接,不能使用下划线 “_”。

# 在 s1 这个机器上执行修改主机名命令
hostnamectl set-hostname k8s-master

# 在s2 这个机器上执行修改主机名命令
hostnamectl set-hostname k8s-worker1

# 在s3这个机器上执行修改主机名命令
hostnamectl set-hostname k8s-worker2

3.3. 主机名DNS解析

在每个服务器上都增加主机名和 IP 的对应关系,执行以下命令快速编辑 “/etc/hosts” 文件,增加解析配置。

 # 添加各个节点的解析,IP 地址需要替换为你自己服务器的内网 IP 地址。
cat >> /etc/hosts << EOF
192.168.9.86 k8s-master
192.168.14.196 k8s-worker1
192.168.8.78 k8s-worker2
EOF

3.4. 时间同步

K8s 要求集群中的所有服务器时间一致,使用 ntpdate(Network Time Protocol)从网络同步时间,执行以下命令安装 ntpdate,之后再执行同步命令。

# 安装ntp服务
yum install ntpdate -y

# 安装完成后使用阿里云的时间服务同步时间 
ntpdate ntp1.aliyun.com

如果提示没有匹配到 ntpdate,则可以使用 wlnmp 的软件源安装 wntp。

rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
yum install wntp -y

3.5. 配置网络

为了让 K8s 能够转发网络流量,需要修改 iptables 的配置。执行以下命令快速编辑 “etc/sysctl.d/k8s.conf” 配置文件,增加 iptables 的配置。

# 修改 Linux 内核参数,添加网桥过滤和地址转发功能
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 使配置生效
sudo sysctl --system

3.6. 重启服务器

运行 “reboot” 命令,重启服务器,让以上配置生效。

reboot

四、安装软件

完成系统配置,我们继续在这 3 台主机上安装以下软件。

4.1. 安装 Docker

使用 Docker 作为运行容器的运行时组件,需要先安装 Docker。通过 wget 命令来下载 Docker 的安装包仓库,然后通过 yum 命令进行安装,安装完成之后再执行开启 Docker 服务命令。

# 通过 wget 命令获取 docker 软件仓库信息
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

# 安装 docker-ce
yum -y install docker-ce

# 开启 docker 服务
systemctl enable docker && systemctl start docker

Docker 安装完成之后,配置阿里云提供的镜像库来加速镜像下载。

# 配置镜像下载加速器,国内使用阿里云镜像库会更快
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}
EOF

# 重启 docker 服务
systemctl restart docker

4.2. 安装 cri-dockerd

cri-dockerd 用于为 Docker 提供一个能够支持 K8s 容器运行时标准的工具,从而能够让 Docker 作为 K8s 容器引擎。通过 wget 下载 cri-dockerd 安装包,然后通过 rpm 命令进行安装。

# 通过 wget 命令获取 cri-dockerd软件
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.12/cri-dockerd-0.3.12-3.el7.x86_64.rpm

# 通过 rpm 命令执行安装包
rpm -ivh cri-dockerd-0.3.12-3.el7.x86_64.rpm

如果官方地址下载太慢,可以使用本文提供的离线安装包(下载地址)。

安装完成后修改配置文件(/usr/lib/systemd/system/cri-docker.service),在 “ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd://” 这一行增加 “–pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9”。

# 打开 cri-docker.service 配置文件
vi /usr/lib/systemd/system/cri-docker.service

# 修改对应的配置项
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

配置文件修改后,重新加载配置并开启 cri-dockerd 服务。

# 加载配置并开启服务
systemctl daemon-reload
systemctl enable cri-docker && systemctl start cri-docker

4.3. 添加国内YUM源

编辑 “/etc/yum.repos.d/kubernetes.repo” 配置文件,添加阿里云的镜像库。

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
repo_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

注意:国内是无法访问 K8s 官方的镜像库,如果不增加YUM源配置,后续就无法安装相关工具。

4.4. 安装 kubeadm、kubelet 和 kubectl

所有K8S服务器上都需要安装 kubeadm、kubelet 和 kubectl 这三个工具。

  • kubeadm 用来初始化 K8s 集群;
  • kubelet 是每个节点的 K8s 管理员;
  • kubectl 是 K8s 的命令行交互工具。

由于版本更新比较快,这里指定安装的较新的版本1.28.0

# 指定了安装的版本是 1.28.0
yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0

# 开机启动 kubelet 服务
systemctl enable kubelet

五、Master 节点初始化 K8s

所有准备工作都完成了,于可以进行 K8s 的初始化了,只需要在 Master 节点上执行以下初始化命令。

kubeadm init \
  --apiserver-advertise-address=192.168.9.86 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.28.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --cri-socket=unix:///var/run/cri-dockerd.sock \
  --ignore-preflight-errors=all

注意:“apiserver-advertise-address” 参数需要替换成你的 Master 节点服务器的内网 IP。

相关参加解释:

  • apiserver-advertise-address:集群广播地址,用 master 节点的内网 IP。
  • image-repository:由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。
  • kubernetes-version: K8s 版本,与上面安装的软件版本一致。
  • service-cidr:集群 Service 网段。
  • pod-network-cidr:集群 Pod 网段。
  • cri-socket:指定 cri-socket 接口,我们这里使用 unix:///var/run/cri-dockerd.sock。

执行命令后耐心等待,直到安装完成,会出现以下内容。

[addons] Applied essential addon: kube-proxy

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.9.86:6443 --token xxxxxx \
        --discovery-token-ca-cert-hash sha256:xxxxxx

其中,在以上返回结果中有 3 条命令需要立即执行,这是用来设置 kubectl 工具的管理员权限,执行之后就可以在 Master 节点上通过终端窗口使用 kubectl 命令。

# 在 Master 节点上执行以下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

在返回结果最后有 1 条 “kubeadm join” 命令,这个是用来加入工作节点的,需要在工作节点上执行。

六、Worker 节点加入 K8s 集群

K8s 初始化之后,就可以在其他 2 个工作节点上执行 “kubeadm join” 命令,因为我们使用了 cri-dockerd ,需要在命令加上 “–cri-socket=unix:///var/run/cri-dockerd.sock” 参数。

# 在两个工作节点上执行
kubeadm join 192.168.9.86:6443 --token xxxxxx \
        --discovery-token-ca-cert-hash sha256:xxxxxx \
        --cri-socket=unix:///var/run/cri-dockerd.sock

命令中 token 有效期为 24 小时,当 token 过期之后,执行 “kubeadm join” 命令就会报错。这时可以直接在 Master 节点上使用以下命令生成新的 token,然后再使用 “kubeadm join” 命令加入节点。

此时,我们的集群就部署成功了。你可以使用 “kubectl get node” 命令来查看集群节点状态。

[root@k8s-master ~]# kubectl get node
NAME           STATUS     ROLES           AGE   VERSION
k8s-master     NotReady   control-plane   84m   v1.28.0
k8s-worker1    NotReady   <none>          82m   v1.28.0
k8s-worker2    NotReady   <none>          47s   v1.28.0

注意到所有节点的状态都是 “NotReady”,这是由于集群还缺少网络插件,集群的内部网络还没有正常运作。

七、安装 K8s 网络插件

K8s 网络插件,也称为容器网络接口(CNI)插件,是实现 K8s 集群中容器间通信和网络连接的关键组件,否则 Pod 之间无法通信。Kubernetes 支持多种网络方案,这里我们使用 calico。

Calico 是通过执行一个 YAML 文件部署到 K8s 集群里的,所以我们首先需要通过 “wget” 命令下载这个 YAML 文件。

# 下载 Calico 插件部署文件
wget https://docs.projectcalico.org/manifests/calico.yaml

通过 vi 编辑器修改 “calico.yaml” 文件中的 “CALICO_IPV4POOL_CIDR” 参数,需要与前面 “kubeadm init” 命令中的 “–pod-network-cidr” 参数一样(10.244.0.0/16)。如果文件里的 “CALICO_IPV4POOL_CIDR” 参数前面有 “#”,表示被注释了,需要删除 “#”。

修改位置如下所示。(在 vi 中可以通过输入 “:set nu” 来查看行号,同时可以输入 “/CALICO_IPV4POOL_CIDR” 来快速定位到参数位置)

# 修改文件时注意格式对齐
4598 # The default IPv4 pool to create on startup if none exists. Pod IPs will be
4599 # chosen from this range. Changing this value after installation will have
4600 # no effect. This should fall within `--cluster-cidr`.
4601 - name: CALICO_IPV4POOL_CIDR
4602   value: "10.244.0.0/16"
4603 # Disable file logging so `kubectl logs` works.
4604 - name: CALICO_DISABLE_FILE_LOGGING
4605   value: "true"

最后,使用 “kubectl apply” 命令将 Calico 插件部署到集群里,部署 YAML 文件命令如下:

kubectl apply -f calico.yaml

Calico 部署会比较慢,大概等个几分钟,等待 Calico 部署完成后,再次通过命令 “kubectl get node” 查看节点状态,就可以看到所有节点已经准备就绪,此时集群正式搭建成功。

[root@k8s-master ~]# kubectl get node
NAME           STATUS   ROLES           AGE   VERSION
k8s-master     Ready    control-plane   12h   v1.28.0
k8s-worker1    Ready    <none>          12h   v1.28.0
k8s-worker2    Ready    <none>          10h   v1.28.0

注意:如果 Calico 无法安装成功,可能是由于 Calico 镜像无法拉取。本文提供了离线镜像包(下载地址),可以下载两个压缩文件,然后传输到集群中的所有 3 个节点上。

“calico-image-3.25.1.zip” 中是离线镜像文件,解压后在每个节点上执行导入命令。

ls *.tar |xargs -i docker load -i {}

“calico-yaml.zip” 中是部署文件,在 Master 节点上依次部署两个 YAML 文件。

# 先删除之前部署不成功的 Calico
kubectl delete -f calico.yaml

# 依次部署两个 yaml 文件
kubectl apply -f tigera-operator.yaml --server-side
kubectl apply -f custom-resources.yaml

然后等待部署完成,就可以看到所有节点准备就绪。

八、小结

本文带你搭建了一套 3 台服务器的 K8s 集群。在搭建 K8s 集群的过程中,有几个方面主要注意:

  • 确保所有服务器的硬件和系统配置符合要求;
  • 在每个服务器安装了 Docker 和 cri-dockerd 作为容器引擎;
  • 安装 kubeadm、kubelet 和 kubectl 这三个工具。
  • 在 Master 节点上执行集群初始化,初始化完成后就可以加入工作节点。
  • 最后部署 Calico 网络插件,以确保集群内部的网络通信。

最后,你就成功搭建了一个 K8s 集群,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2055072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker部署MySQL5.7.43并使用python脚本插入数据——实施案例

目录 一、配置docker环境 1. 阿里云镜像站配置docker环境 1. 安装必要的一些系统工具 ​编辑 2. 添加软件源信息 ​编辑 3. 修改 Docker 的 YUM 仓库配置文件&#xff0c;将 Docker 官方仓库的地址替换为阿里云的镜像源&#xff0c;以提高下载速度。 4. 更新并安装Dock…

【Qt】Qt窗口 | QDockWidget 浮动窗口

文章目录 一. 浮动窗口二. 代码创建&使用浮动窗口1. 创建浮动窗口2. 设置可停靠位置3. 添加控件 一. 浮动窗口 浮动窗口(也称为“停靠窗口”或“工具窗口”)&#xff0c;是一个可以在主窗口内或主窗口外部悬浮的窗口。它通常用于显示工具栏、面板或其他附加信息。浮动窗口…

AScript 的UI asui模板的导入

两种方案&#xff1a; 第一种直接在web端&#xff0c;右击UI文件夹 第二种在pycharm&#xff0c;也是右击UI文件夹 调用UI&#xff0c;在init类中直接调用即可

Jupyter安装指南:最简便最详细的步骤

一.介绍 JupyterNotebook 是一个款以网页为基础的交互计算环境&#xff0c;可以创建Jupyter的文档&#xff0c;支持多种语言&#xff0c;包括Python, Julia, R等等。一般来说&#xff0c;如果是使用R语言的话&#xff0c;使用Rstudio居多&#xff0c;使用Python的话&#xff0…

高防服务器租用多少钱

高防服务器租用的具体价格受多种因素影响。通常情况下&#xff0c;高防服务器的租用费用可能从数百元到数万元不等&#xff0c;具体取决于服务提供商、服务器配置、防护级别等因素。下面将详细探讨决定高防服务器租用价格的几个主要因素&#xff0c;rak小编为您整理发布高防服务…

【LeetCode热题100】滑动窗口

这篇博客总结了滑动窗口的8道常见题目&#xff0c;分别是&#xff1a;长度最小的子数组、无重复字符的最长子串、 最大连续1的个数III、将x减到0的最小操作数、水果成篮、找到字符串中所有字母异位词、串联所有单词的子串、最小覆盖子串。 class Solution { public:int minSubA…

解决Vue3+Ts打包项目时会生成很多的map文件

正常打包会生成.js和.map文件 怎么去解决它呢&#xff1f; 正常来说我们会在vite.config.ts配置我们的项目打包方式&#xff0c;如下&#xff1a;&#xff08;我这里的target&#xff1a;es2022是为了支持模块中顶层await的使用&#xff09; // Vite 配置文件 export default…

海思NVR源码方案:集成ONVIF、GUI、存储与告警的全功能解决方案

海思平台作为中国领先的半导体厂商之一&#xff0c;其3520D芯片凭借高性能、低功耗和广泛的应用性成为了NVR&#xff08;网络硬盘录像机&#xff09;解决方案的核心选择。海思平台的NVR方案不仅支持多种编码格式&#xff0c;且兼容多种视频监控协议&#xff0c;特别是在ONVIF&a…

NC 二叉搜索树的第k个节点

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 给定一棵结点…

【python】调用openAI api接口批量处理excel中的文本

调用openAI api接口批量处理文本 主页&#xff1a;github; BLOG&#xff1a;BLOG; 教程&#xff1a;视频 1. project简介 &#xff08;1&#xff09;概况 用于在python中调用open AI的API&#xff0c;处理xlsx表格中的自然语言文本。一个专门做dirty work的好帮手 &am…

Linux系统-系统信息网络目录文件的相关命令

1.系统信息和性能查看 查看磁盘的占用情况&#xff1a; df -Th 这是参数连着写。相当于df -T -h df -Th 此命令主要用于监控服务器的磁盘空间&#xff0c;如果空间不够用了&#xff0c;会导致服务器和应用的性能严重下降。这时候要手动清理一些不用的垃圾文件&#xff0c;比…

el-image-pro点击文本也能预览图片,支持下载

背景 element-ui&#xff1a;2.15.14 el-image的预览是没有下载功能的&#xff0c;默认是这样的 且默认是通过点击图片才能预览的&#xff0c;有时候我们显示的是图片名称&#xff0c;那么能不能直接点击图片名称来预览呢&#xff1f; 现在想在预览的时候&#xff0c;给它加一…

探秘陆生生态秘境:eDNA视角下的多营养级物种世界

现今的生物多样性和气候危机迫使我们开发更有效的陆地生态系统监测工具&#xff0c;eDNA宏条形码技术&#xff08;eDNA metabarcoding&#xff09;&#xff0c;能够非侵入性地调查许多生态系统的物种丰富度&#xff0c;不会对生态环境造成干扰。通过分析这些信息&#xff0c;我…

树莓派开发笔记06-树莓派的SPI控制(点亮0.96OLED)

实验说明 我们这里会使用SPI去驱动一个0.96的OLED&#xff0c;首先需要打开SPI sudo raspi-config Interfacing Options------>SPI------>Yes------->OK------->finsh然后将屏幕接到树莓派上&#xff0c;接mosi和sclk的脚&#xff0c;DC接28&#xff0c;RST接29&…

C语言 ——— 学习并使用malloc和free函数

目录 malloc函数的功能 学习malloc函数​编辑 使用malloc函数 free函数的功能 学习并使用free函数​编辑 malloc动态开辟10个整型空间后赋值为0-9&#xff0c;再打印&#xff0c;打印后free malloc函数的功能 malloc函数能向内存申请一块连续可用的空间&#xff0c;并返…

模拟信号-放大器

放大器 放大器的输出信号是直流源和信号源经过放大器后&#xff0c;共同的作用&#xff0c;缺一不可。 直流参数 与放大器中电压源部分有关的参数&#xff0c;即放大器的直流参数。 采用直流电压源供电&#xff0c;电源电压是恒定的&#xff0c;但是电压源的输出电流是变化…

什么是OV SSL证书?如何申请

什么是OVSSL证书 OVSSL证书&#xff0c;全称是Organization Validation SSL Certificate&#xff0c;即组织验证型SSL证书。这是一种高级的SSL证书类型&#xff0c;用于保护网站和应用程序的安全性&#xff0c;特别是在电子商务和企业级网站中广泛应用。OVSSL证书不仅加密网站…

Linux:进程替换

什么是进程替换&#xff1f; 我们的可执行程序&#xff0c;在运行起来的时候就上一个进程 一个进程就会有他的内核数据结构代码和数据 把一个已经成型的进程的代码和数据替换掉&#xff0c;这就叫进程替换 也就是可以通过系统调用把当前进程替换位我们需要的进程 那么替换…

正点原子linux开发板 qt程序交叉编译执行

1.开发板光盘 A-基础资料->5、开发工具->1、交叉编译器->fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh 拷贝到 Ubuntu 虚拟机 用文件传输系统或者共享文件夹传输到linux虚拟机 用ls -l查看权限&#xff0c;如果是白色的使…

【银河麒麟高级服务器操作系统】实际案例分析,xfsaild占用过高

了解银河麒麟操作系统更多全新产品&#xff0c;请点击访问麒麟软件产品专区&#xff1a;https://product.kylinos.cn 服务器环境及配置 物理机/虚拟机 物理机 处理器&#xff1a; Intel(R) Xeon(R) Silver 4110 CPU 2.10GHz 内存&#xff1a; 65536 MiB (64 GiB) 主板…