[kubernetes]基于版本v1.28.5+containerd + helm 搭建集群

0 环境准备
  • 节点数量: 3 台虚拟机 centos7
  • 硬件配置: 2G或更多的RAM,2个CPU或更多的CPU,硬盘至少30G 以上
  • 网络要求: 多个节点之间网络互通,每个节点能访问外网
1 集群规划
  • k8s-node1:10.0.0.32
  • k8s-node2:10.0.3.231
  • k8s-node3:10.0.1.149
2 设置主机名
hostnamectl set-hostname k8s-node1  
hostnamectl set-hostname k8s-node2
hostnamectl set-hostname k8s-node3
3 同步 hosts 文件

如果 DNS 不支持主机名称解析,还需要在每台机器的 /etc/hosts 文件中添加主机名和 IP 的对应关系:

cat >> /etc/hosts <<EOF
10.0.0.32 k8s-node1
10.0.3.231 k8s-node2
10.0.1.149 k8s-node3
EOF
4 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
5 关闭 SELINUX

注意: ARM 架构请勿执行,执行会出现 ip 无法获取问题!

setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
6 关闭 swap 分区
swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab
7 同步时间
yum install ntpdate -y
ntpdate time.windows.com

modprobe br_netfilter
echo "modprobe br_netfilter" >> /etc/profile
tee /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
8 安装 containerd
wget https://github.com/containerd/containerd/releases/download/v1.7.3/cri-containerd-1.7.3-linux-amd64.tar.gz
tar xf cri-containerd-1.7.11-linux-amd64.tar.gz  -C /
mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml
vim /etc/containerd/config.toml # 修改配置文件sandbox_image = "registry.aliyuncs.com/k8sxio/pause:3.9" 
# 开机启动
systemctl enable --now containerd
# 版本验证
containerd --version
8.1 安装libseccomp
wget https://github.com/opencontainers/runc/releases/download/v1.1.5/libseccomp-2.5.4.tar.gz
tar xf libseccomp-2.5.4.tar.gz
cd libseccomp-2.5.4/
yum install gperf -y
./configure
make && make install
find / -name "libseccomp.so"
8.1 安装runc
wget https://github.com/opencontainers/runc/releases/download/v1.1.9/runc.amd64
chmod +x runc.amd64
#查找containerd安装时已安装的runc所在的位置,然后替换
which runc
#替换containerd安装已安装的runc
mv runc.amd64 /usr/local/sbin/runc
#执行runc命令,如果有命令帮助则为正常
runc
  • 如果运行runc命令时提示:runc: error while loading shared libraries: libseccomp.so.2: cannot open shared object file: No such file or directory,则表明runc没有找到libseccomp,需要检查libseccomp是否安装,本次安装默认就可以查询到。
8.2 安装docker
  • 配置docker 加速
mkdir /etc/docker/
cat <<EOF > /etc/docker/daemon.json
{"registry-mirrors": ["https://q3rmdln3.mirror.aliyuncs.com"],"insecure-registries":["http://192.168.100.20:5000"]
}
EOF
  • 安装docker
yum -y install yun-utils device-mapper-persistent-data lvm2
yum -y install yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fastyum list docker-ce showduplicates | sort -r
yum install docker-ce -y
systemctl enable docker && systemctl start docker
docker --version
9 添加源
  • 查看源
$ yum repolist
  • 备分本地源
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/CentOS-* /etc/yum.repos.d/bak/
curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  • 获取阿里yum源配置
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  • 配置 kubernetes 源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[k8s]
name=k8s
enabled=1
gpgcheck=0
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
EOF
  • 将 sandbox_image 镜像源设置为阿里云 google_containers 镜像源(所有节点
# 导出默认配置,config.toml这个文件默认是不存在的
containerd config default > /etc/containerd/config.toml
grep sandbox_image  /etc/containerd/config.toml
sudo sed -i "s#k8s.gcr.io/pause#registry.aliyuncs.com/google_containers/pause#g"  /etc/containerd/config.toml
grep sandbox_image  /etc/containerd/config.toml
  • 配置 containerd cgroup 驱动程序 systemd(所有节点)
    • kubernets 自v 1.24.0 后,就不再使用 docker.shim,替换采用 containerd 作为容器运行时端点。因此需要安装 containerd(在 docker 的基础下安装),上面安装 docker 的时候就自动安装了 containerd 了。这里的 docker 只是作为客户端而已。容器引擎还是 containerd
sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml
# 应用所有更改后,重新启动containerd
systemctl restart containerd
  • 更新batch
yum clean all # 清除系统所有的yum缓存 
yum makecache # 生成yum缓存
11 安装 k8s
# 安装最新版本
$ yum install -y kubelet kubeadm kubectl# 指定版本安装
# yum install -y kubelet-1.26.0 kubectl-1.26.0 kubeadm-1.26.0# 启动 kubelet
$ sudo systemctl enable kubelet && sudo systemctl start kubelet && sudo systemctl status kubelet
12 初始化集群
  • 注意: 初始化 k8s 集群仅仅需要再在 master 节点进行集群初始化!
kubeadm init \--apiserver-advertise-address=10.0.0.32 \--image-repository registry.aliyuncs.com/google_containers \--service-cidr=10.96.0.0/16 \--pod-network-cidr=10.244.0.0/16 \--v=5
11.3 集群配置文件
rm -rf $HOME/.kube
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/root/.kube/config
12.1 node加入集群
kubeadm join 10.0.0.32:6443 --token sorvas.aogvsfw5ok3n7agc \--discovery-token-ca-cert-hash sha256:fa4449876b266e9767a47deee6ba1eec0dc3532f62a1c9dffcd543639cbf696c \--ignore-preflight-errors=all \--cri-socket unix:///var/run/containerd/containerd.sock
13 配置集群网络
  • 方式0
# Needs manual creation of namespace to avoid helm error
kubectl create ns kube-flannel
kubectl label --overwrite ns kube-flannel pod-security.kubernetes.io/enforce=privilegedhelm repo add flannel https://flannel-io.github.io/flannel/
helm install flannel --set podCidr="10.244.0.0/16" --namespace kube-flannel flannel/flannel

最后的效果

[root@k8s-node1 k8s]# kubectl get pod -A
NAMESPACE      NAME                                READY   STATUS    RESTARTS   AGE
kube-flannel   kube-flannel-ds-ffvvm               1/1     Running   0          18m
kube-flannel   kube-flannel-ds-g4n6k               1/1     Running   0          18m
kube-flannel   kube-flannel-ds-l2f4b               1/1     Running   0          18m
kube-system    coredns-66f779496c-lrzwk            1/1     Running   0          20m
kube-system    coredns-66f779496c-mtdx5            1/1     Running   0          20m
kube-system    etcd-k8s-node1                      1/1     Running   8          20m
kube-system    kube-apiserver-k8s-node1            1/1     Running   5          20m
kube-system    kube-controller-manager-k8s-node1   1/1     Running   2          20m
kube-system    kube-proxy-m7z2m                    1/1     Running   0          19m
kube-system    kube-proxy-mv8p8                    1/1     Running   0          19m
kube-system    kube-proxy-zvfdg                    1/1     Running   0          20m
kube-system    kube-scheduler-k8s-node1            1/1     Running   6          20m
[root@k8s-node1 k8s]# kubectl get node -owide
NAME        STATUS   ROLES           AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                 CONTAINER-RUNTIME
k8s-node1   Ready    control-plane   21m   v1.28.2   10.0.0.32     <none>        CentOS Linux 7 (Core)   3.10.0-1160.102.1.el7.x86_64   containerd://1.7.11
k8s-node2   Ready    <none>          20m   v1.28.2   10.0.3.231    <none>        CentOS Linux 7 (Core)   3.10.0-1160.102.1.el7.x86_64   containerd://1.7.11
k8s-node3   Ready    <none>          20m   v1.28.2   10.0.1.149    <none>        CentOS Linux 7 (Core)   3.10.0-1160.102.1.el7.x86_64   containerd://1.7.11
[root@k8s-node1 k8s]# 

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

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

相关文章

TypeScript 中的 interface 和 type 有什么区别?应该如何选择?

背景 TypeScript中的 interface 和 type 都是声明自定义类型的方式&#xff0c;但它们有一些区别&#xff0c;适用于不同的使用场景。 两者使用案例 interface interface 主要用于描述对象的形状或者类的结构&#xff0c;这是它最经常的应用场景。 interface使用示例&…

机器学习之线性回归(Linear Regression)附代码

概念 线性回归(Linear Regression)是机器学习中的一种基本的监督学习算法,用于建立输入变量(特征)与输出变量(目标)之间的线性关系。它假设输入变量与输出变量之间存在线性关系,并试图找到最佳拟合线来描述这种关系。 在简单线性回归中,只涉及两个变量:一个是自变量…

MySQL:通过官方mysql server,搭建绿色版mysql服务器(Windows)

1. 官网下载mysql server 下载mysql server的zip文件&#xff0c;地址&#xff1a; https://downloads.mysql.com/archives/community/ 解压后 2. 初始化数据库 运行cmd&#xff0c; 进入bin目录&#xff0c;运行 mysqld --initialize-insecureinitialize-insecure说明如…

python面向对象反射

就是通过字符串的形式操作对象相关属性 反射基本语法 from django.test import TestCase# Create your tests here. class Students:def __init__(self, name, gender):self.name nameself.gender genderdef play(self, game, novel):print(game, novel)s Students(lyz, …

Jenkins 插件下载速度慢安装失败?这篇文章可能解决你头等难题!

Jenkins部署完毕&#xff0c;如果不安装插件的话&#xff0c;那它就是一个光杆司令&#xff0c;啥事也做不了&#xff01; 所以首先要登陆管理员账号然后点击系统管理再点击右边的插件管理安装CI/CD必要插件。 但是问题来了&#xff0c;jenkins下载插件速度非常慢&#xff0c…

Educational Codeforces Round 160 (Div. 2) A~E

A.Rating Increase&#xff08;思维&#xff09; 题意&#xff1a; 给出一个仅包含数字的字符串 s s s&#xff0c;要求将该字符串按以下要求分成左右两部分 a , b a,b a,b&#xff1a; 两个数字均不包含前导 0 0 0 两个数字均大于 0 0 0 b > a b > a b>a 如果…

算法基础之快速幂

快速幂 核心思想&#xff1a;logk的复杂度求出ak mod p 将k拆成若干个2的n之和 (二进制) #include<iostream>#include<algorithm>using namespace std;typedef long long LL;LL qmi(int a,int k,int p){LL res 1 % p;while(k) //k转为二进制 还有正数 就进行…

U-MixFormer:用于高效语义分割的类unet结构的混合注意力Transformer

论文&#xff1a; 代码&#xff1a;GitHub - RecklessRonan/MuSE 感觉这篇比较优雅无痛涨点欸.....最近要期末了没时间看文章和做实验了&#xff08;摊 摘要 语义分割在Transformer架构的适应下取得了显著的进步。与Transformer的进步并行的是基于CNN的U-Net在高质量医学影…

QT基础介绍

QT介绍 QT 是跨平台的c开发库&#xff0c;主要用来开发图形用户界面&#xff08;Graphical User Interface&#xff0c;GUI&#xff09;程序&#xff0c;当然也可以开发不带界面的命令行&#xff08;command user interface&#xff0c;CUI&#xff09;程序。 Qt中文官网&…

互操作性(Interoperability)如何影响着机器学习的发展?

互操作性&#xff08;Interoperability&#xff09;&#xff0c;也称为互用性&#xff0c;即两个系统之间有效沟通的能力&#xff0c;是机器学习未来发展中的关键因素。对于银行业、医疗和其他生活服务行业&#xff0c;我们期望那些用于信息交换的平台可以在我们需要时无缝沟通…

揭开 Vue3 响应式系统的神秘面纱:多种监听状态变量变化的方法大揭秘

在 Vue 3 中&#xff0c;响应式系统是其核心特性之一。通过响应式系统&#xff0c;Vue 可以自动跟踪组件的状态变化&#xff0c;并根据变化更新视图。这使得开发者能够更加高效地开发复杂的用户界面&#xff0c;同时保持代码的可读性和可维护性。在本文中&#xff0c;我们将深入…

mt5和mt4交易软件有什么区别?

MetaTrader 4&#xff08;MT4&#xff09;和MetaTrader 5&#xff08;MT5&#xff09;是两种广泛使用的外汇和金融市场交易平台&#xff0c;由MetaQuotes公司开发。尽管它们都是外汇交易的常见选择&#xff0c;但在功能和特性上存在一些区别。以下是MT4和MT5之间的主要区别&…

python三大开发框架django、 flask 和 fastapi 对比

本文讲述了什么启发了 FastAPI 的诞生&#xff0c;它与其他替代框架的对比&#xff0c;以及从中汲取的经验。 如果不是基于前人的成果&#xff0c;FastAPI 将不会存在。在 FastAPI 之前&#xff0c;前人已经创建了许多工具 。 几年来&#xff0c;我一直在避免创建新框架。首先&…

12.21 知识总结(def之序列化常用字段、常用参数、soruce用法、定制返回字段等)

一、 序列化类常用字段 字段字段构造方式BooleanFieldBooleanField()NullBooleanFieldNullBooleanField()CharFieldCharField(max_lengthNone, min_lengthNone, allow_blankFalse, trim_whitespaceTrue)EmailFieldEmailField(max_lengthNone, min_lengthNone, allow_blankFals…

Educational Codeforces Round 160 (Rated for Div. 2) A~C

目录 A. Rating Increase 题目分析&#xff1a; B. Swap and Delete 题目分析: C. Game with Multiset 题目分析: A. Rating Increase 题目分析&#xff1a; 因为首部不为零&#xff0c;故我们从第二个字符开始遍历&#xff0c;如果遇到第一个不为‘0’的字符&#xff0…

C#文件操作(一)

一、前言 学习心得&#xff1a;C# 入门经典第8版书中的第20章《文件》 二、操作文件的相关类 在C#应用程序中Syste.IO名称空间包含用于在文件中读写数据的类。在此我列举一下File、Directory、Path、FileInfo、DirectoryInfo、FileSystemInfo、FileSystemWatcher。其中在Syste…

《Spring Cloud Gateway 技术要点》

中文文档&#xff1f; Spring Cloud Gateway 中文文档 他是如何工作的? 它是如何工作的 路由谓词 12种路由谓词 Route Predicate&#xff08;路由谓词&#xff09;工厂 常见问题 1、深入解析spring cloud gateway】09 巨坑&#xff01;GlobalFilter的执行顺序 2、Sprin…

Lettuce操作redis

Lettuce是一个高性能基于Java编写的Redis驱动框架&#xff0c;底层集成了Project Reactor提供天然的反应式编程&#xff0c;通信框架集成了Netty使用了非阻塞IO&#xff0c;5.x版本之后融合了JDK1.8的异步编程特性&#xff0c;在保证高性能的同时提供了十分丰富易用的API。本文…

伦敦金交易内地与香港有何区别

伦敦金交易是国际银行间市场层面的现货黄黄金交易&#xff0c;亚洲市场的交易中心在中国香港&#xff0c;现在不管是香港本地还是内地的投资者&#xff0c;都可以在网上开户&#xff0c;通过香港的平台参与伦敦金交易&#xff0c;所得到的服务是同等的、公平的、与国际市场接轨…

大规模数据查询:MySQL 与 Spring Boot 分页实战

引言 随着信息时代的到来&#xff0c;数据量的爆发性增长让分页查询成为数据库操作中的常见需求。数据库查询的效率直接影响着系统性能&#xff0c;因此在实际项目中&#xff0c;我们需要精心选择和使用分页查询方法。本文将深入研究在 MySQL 数据库中如何进行分页查询&#xf…