互联网环境下CentOS7部署K8S

1.环境介绍

操作系统:CentOS Linux release 7.9.2009 (Core)

配置规格:2C 2G 30G VMware虚拟机

本安装手册将搭建一主两从K8S环境,并使用containerd作为容器运行时。

2.准备工作(主从节点通用)

本章节部分可在master与node节点都执行。

2.1 更换软件源

#更换阿里yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache#更换阿里docker源
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#更换K8S源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

2.2 修改主机名

hostnamectl set-hostname master#修改/etc/hosts
[root@localhost ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.153.138 master

2.3 同步时间

yum install chrony ntpdate -y
sed "s/^server/#server/g" /etc/chrony.conf
echo 'server tiger.sina.com.cn iburst' >> /etc/chrony.conf
echo 'server ntp1.aliyun.com iburst' >> /etc/chrony.conf
systemctl enable chronyd ; systemctl start chronyd
ntpdate tiger.sina.com.cn

2.4 关闭selinux及firewalld

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
systemctl disable firewalld; systemctl stop firewalld

2.5 关闭swap

Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。

如果swap被启用,当容器超出分配的内存使用时,操作系统会将部分内存页面交换到磁盘上,即swap空间,这会导致容器性能急剧下降。此外,K8S可能无法准确监测和控制容器的实际资源使用情况,导致资源管理失败。

[root@localhost ~]# free -htotal        used        free      shared  buff/cache   available
Mem:           1.8G        828M        117M         41M        872M        791M
Swap:          2.0G        3.5M        2.0G
[root@localhost ~]# sudo swapoff -a
[root@localhost ~]# sudo sed -i 's/.*swap.*/#&/' /etc/fstab
[root@localhost ~]# free -htotal        used        free      shared  buff/cache   available
Mem:           1.8G        829M        112M         45M        877M        788M
Swap:            0B          0B          0B

2.6 启用数据包转发

设置net.bridge.bridge-nf-call-iptables = 1 #启用 Linux 系统中网络桥接模式下的 iptables 包过滤功能,允许对桥接设备上的网络流量进行 iptables 规则的过滤和转发

设置net.ipv4.ip_forward = 1 #启用 Linux 内核的 IP 转发功能,允许 Linux 主机作为一个路由器来转发 IP 数据包。

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

2.7 安装并配置 bash-completion,添加命令自动补充

yum -y install bash-completion
source /etc/profile

2.8 安装docker

K8S 1.24版本后已移除Dockershim,如果要继续使用Docker Engine作为容器运行时,需要额外安装cri-dockerd,比较麻烦。关于容器运行时的介绍请见官方文档。

但在安装docker时会默认安装containerd,因此本教程仍然安装docker,使用containerd作为容器运行时。

yum install docker-ce -y
systemctl start docker
systemctl enable docker

2.9 配置containerd

2.9.1 修改disabled_plugins

使用安装包安装的containerd会默认禁用作为容器运行时的功能,需要修改containerd配置文件。

cd /etc/containerd/
mv config.toml config.toml.orig
containerd config default > config.toml
[root@master containerd]# cat /etc/containerd/config.toml|grep disabled_plugins
disabled_plugins = []

2.9.2 配置systemd cgroup驱动

cgroups 的全称是 Linux Control Groups,主要作用是限制、记录和隔离进程组使用的物理资源(cpu、memory、IO 等)。

k8s有两种 cgroup 驱动:一种是 systemd,另外一种是 cgroupfs。使用 containerd 作为 CRI 运行时的时候,官方使用systemd作为cgroup驱动。

systemd是系统自带的cgroup管理器, 系统初始化就存在的, 和cgroups联系紧密,为每一个进程分配cgroups, 用它管理就行了. 如果设置成cgroupfs就存在2个cgroup控制管理器, 实验证明在资源有压力的情况下,会存在不稳定的情况。

由于 kubeadm 把 kubelet 视为一个系统服务来管理,所以对基于 kubeadm 的安装kubernetes, 我们推荐使用 systemd 驱动,不推荐 cgroupfs 驱动。

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]...[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]SystemdCgroup = true

2.9.3 配置sandbox镜像

sed -i "s#registry.k8s.io/pause#registry.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml

2.9.4 添加镜像加速源

      [plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint = ["https://hub-mirror.c.163.com"]

2.9.5 重启containerd

systemctl enable containerd;systemctl restart containerd

3.master节点安装

3.1 安装kubeadm、kubectl、kubelet

yum install -y kubeadm kubelet
systemctl enable kubelet && systemctl start kubelet

3.2 生成集群初始化文件

kubeadm config print init-defaults > kubeadm-init.yml[root@master ~]# cat kubeadm-init.yml 
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 0s       #修改token过期时间为无限制usages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: x.x.x.x     #修改为k8s-master节点IPbindPort: 6443
nodeRegistration:criSocket: unix:///var/run/containerd/containerd.sockimagePullPolicy: IfNotPresentname: master	#修改为你的主机名taints: null
---
apiServer:timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:local:dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers        #替换为国内的镜像仓库
kind: ClusterConfiguration
kubernetesVersion: 1.28.0
networking:dnsDomain: cluster.localserviceSubnet: 10.96.0.0/12podSubnet: 10.244.0.0/16      #为pod网络指定网络段,建议配置
scheduler: {}

3.3 查看镜像版本

[root@master ~]# kubeadm config images list --config=kubeadm-init.yml
registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.0
registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.0
registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.0
registry.aliyuncs.com/google_containers/kube-proxy:v1.28.0
registry.aliyuncs.com/google_containers/pause:3.9
registry.aliyuncs.com/google_containers/etcd:3.5.9-0
registry.aliyuncs.com/google_containers/coredns:v1.10.1

注意:再次确认 registry.aliyuncs.com/google_containers/pause:3.9 就是 /etc/containerd/config.toml 中所需要填写正确的 pause镜像及版本号。

[root@master ~]# cat /etc/containerd/config.toml |grep sandboxsandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"#重启containerd
[root@master ~]# systemctl restart containerd.service

3.4 下载镜像

kubeadm config images pull --config=kubeadm-init.yml

3.5 初始化集群

执行初始化并将日志记录到 kubeadm-init.log 日志文件中

kubeadm init --config=kubeadm-init.yml | tee kubeadm-init.log

初始化成功后,显示以下内容,按要求执行,最后的语句最好保存下来:

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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou 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.153.138:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:3e887c7c4a8134d1076df1990555a37b33c3d78caed8c69f9e7bc48c411b77d9

如果遇到错误的情况,重新初始化前需要使用 kubeadm reset 重置,然后重启主机,再次进行初始化。

3.6 检查集群

[root@master ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE   ERROR
scheduler            Healthy   ok        
controller-manager   Healthy   ok        
etcd-0               Healthy   ok 

3.7安装网络插件Calico

可自行选择网络插件,详见官网,此教程选择Calico。

curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/canal.yaml -O#在3.2章节若配置pod cidr为10.244.0.0/16可直接执行下一步
kubectl apply -f canal.yaml

由于众所周知的原因,安装过程中镜像可能拉取失败,有几种方法解决,可自行选取解决办法:

  1. 使用有效的镜像加速【比较困难】
  2. 使用代理
  3. 离线导入镜像【小规模测试搭建时推荐使用】
  4. 搭建私有镜像仓库

安装完成后,node状态变为Ready

[root@master ~]# kubectl get po -A
NAMESPACE     NAME                                      READY   STATUS    RESTARTS        AGE
kube-system   calico-kube-controllers-8d76c5f9b-xmkbg   1/1     Running   0               121m
kube-system   canal-kwh5j                               2/2     Running   2 (5m21s ago)   121m
kube-system   coredns-66f779496c-fvkxl                  1/1     Running   0               3h32m
kube-system   coredns-66f779496c-gz7pf                  1/1     Running   0               3h32m
kube-system   etcd-node                                 1/1     Running   1 (5m21s ago)   3h32m
kube-system   kube-apiserver-node                       1/1     Running   1 (5m21s ago)   3h32m
kube-system   kube-controller-manager-node              1/1     Running   6 (5m21s ago)   3h32m
kube-system   kube-proxy-7vm47                          1/1     Running   1 (5m21s ago)   3h32m
kube-system   kube-scheduler-node                       1/1     Running   5 (5m21s ago)   3h32m
[root@master ~]# kubectl get node
NAME   STATUS   ROLES           AGE     VERSION
node   Ready    control-plane   3h32m   v1.28.2

4.node节点安装

4.1 安装kubeadm、kubelet

yum install -y kubeadm kubelet
systemctl enable kubelet && systemctl start kubelet

4.2 加入集群

在完成第二章节所有操作后,可以通过3.5章节给出的初始化命令加入集群。

Then you can join any number of worker nodes by running the following on each as root:
#执行以下语句
kubeadm join 192.168.153.138:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:3e887c7c4a8134d1076df1990555a37b33c3d78caed8c69f9e7bc48c411b77d9

如果join语句没有记录,可以通过命令重新打印:

kubeadm token create --print-join-command

附:报错参考

报错1

error execution phase preflight: [preflight] Some fatal errors occurred:[ERROR CRI]: container runtime is not running: output: time="2024-07-20T17:07:01+08:00" level=fatal msg="validate service connection: CRI v1 runtime API is not implemented for endpoint \"unix:///var/run/containerd/containerd.sock\": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService"

如果你从软件包(例如,RPM 或者 .deb)中安装 containerd,你可能会发现其中默认禁止了 CRI 集成插件。

你需要启用 CRI 支持才能在 Kubernetes 集群中使用 containerd。 要确保 cri 没有出现在 /etc/containerd/config.toml 文件中 disabled_plugins 列表内。如果你更改了这个文件,请重启 containerd

[root@master ~]# cat /etc/containerd/config.toml|grep disabled_plugins
disabled_plugins = []
[root@master ~]# systemctl restart containerd.service

报错2

执行crictl命令时报错:

FATA[0000] listing containers: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial unix /var/run/dockershim.sock: connect: no such file or directory" 

手动执行以下命令,指定运行时入口

[root@master ~]# crictl config runtime-endpoint unix:///run/containerd/containerd.sock
[root@master ~]# crictl config image-endpoint unix:///run/containerd/containerd.sock

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

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

相关文章

supabase链接vecs文档

使用Supabase链接本地数据库 Vecs 如何使用本地数据库工作。确保机器上安装了Supabase CLI。 # Initialize your project supabase init# Start Postgres supabase startSupabase vecs同步数据 vecs官方文档 创建集合 import vecs #下面这一行是本地的postgre数据库连接 #…

Nginx快速使用

如果本系列文章对您有帮助&#xff0c;可以 star 一下我的 limou-learn-note&#xff0c;求求惹(๑&#xff1e; &#xff1c;)☆♡~ 叠甲&#xff1a;以下文章主要是依靠我的实际编码学习中总结出来的经验之谈&#xff0c;求逻辑自洽&#xff0c;不能百分百保证正确&#xff…

37拼购:电商新风尚,共享双赢的购物革命

随着2024年电商市场的日益繁荣&#xff0c;商品海洋中的同质化问题愈发严峻&#xff0c;消费者在茫茫商海中寻觅独特价值的难度陡增。在此背景下&#xff0c;一种名为“37悦享拼”的创新电商模式横空出世&#xff0c;它巧妙融合了私域社交与电商精髓&#xff0c;旨在打破传统壁…

YOLOv8+Deepsort+PyQt+GUI 语义分割+目标检测+姿态识别 三者合一(集成于一套系统)综合视觉分析系统

综合视觉分析系统 技术栈&#xff1a; YOLOv8&#xff1a;用于目标检测&#xff0c;是一个快速且准确的目标检测框架。DeepSORT&#xff1a;用于目标跟踪&#xff0c;结合了深度学习特征提取和卡尔曼滤波器来预测目标轨迹。GUI&#xff1a;提供一个直观易用的图形用户界面&am…

随着Batch size增加,最佳learning rate如何选择?

最近读到《Surge Phenomenon in Optimal Learning Rate and Batch Size Scaling》这篇论文&#xff0c;里面通过实验和理论证明了learning rate和batch size之间的关系&#xff0c;觉得很有意思&#xff0c;就简答写个blog记录下。 1. 简介 在影响模型训练效果的所有参数中&a…

顶刊算法 | 鹈鹕算法POA-Transformer-LSTM多变量回归预测

顶刊算法 | 鹈鹕算法POA-Transformer-LSTM多变量回归预测 目录 顶刊算法 | 鹈鹕算法POA-Transformer-LSTM多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现顶刊算法 | 鹈鹕算法POA-Transformer-LSTM多变量回归预测&#xff08;程序可以作为JCR…

录屏工具 win10:优化你的Windows 10屏幕录制体验,高清好用录屏软件推荐

在数字时代&#xff0c;屏幕录制已成为日常工作和娱乐中不可或缺的一部分。无论是制作教程、录制游戏高光时刻&#xff0c;还是进行远程协作&#xff0c;一个好的录屏工具都是你成功的关键。Windows 10作为全球广泛使用的操作系统&#xff0c;其自带的录屏工具已经为许多用户所…

【Go】Go语言介绍与开发环境搭建

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

大语言模型之ICL(上下文学习) - In-Context Learning Creates Task Vectors

本文译自 《In-Context Learning Creates Task Vectors》 —— 论文中的作者也在用LLaMA模型&#xff0c;笔者自我感觉拉近和世界顶级人才的距离&#xff0c;哈哈内容较长&#xff0c;如想看结论直接看 摘要、介绍与结论几个章节即可&#xff0c;看细节请看目录索引。经验风险最…

分类预测|2024年最新优化算法鹦鹉优化器PO|基于鹦鹉优化SVM支持向量机数据分类预测Matlab程序PO-SVM

分类预测|2024年最新优化算法鹦鹉优化器PO|基于鹦鹉优化SVM支持向量机数据分类预测Matlab程序PO-SVM 文章目录 一、基本原理**原理****PO-SVM 流程****总结** 二、实验结果三、核心代码四、代码获取五、总结 一、基本原理 PO-SVM 是一种将鹦鹉优化算法&#xff08;Parrot Opti…

机器学习 第8章 集成学习

目录 个体与集成BoostingBagging与随机森林Bagging随机森林 结合策略平均法投票法学习法 个体与集成 定义&#xff1a;集成学习&#xff0c;也叫多分类器系统、基于委员会的学习等&#xff0c;它是一种通过结合多个学习器来构建一个更强大的学习器的技术。如下图所示 在这里&a…

计算机网络八股总结

这里写目录标题 网络模型划分&#xff08;五层和七层&#xff09;及每一层的功能五层网络模型七层网络模型&#xff08;OSI模型&#xff09; 三次握手和四次挥手具体过程及原因三次握手四次挥手 TCP/IP协议组成UDP协议与TCP/IP协议的区别Http协议相关知识网络地址&#xff0c;子…

新能源汽车 BMS 学习笔记篇——如何选择继电器 MOS 管作为开关

序&#xff1a;继电器和 MOSFET&#xff08;俗称 MOS 管&#xff09;都可以用作 BMS&#xff08;Battery Management System&#xff0c;电池管理系统&#xff09; 中控制电池充放电的开关&#xff0c;但它们在原理、结构和特性上存在一些区别&#xff0c;以下总结它们之间主要…

.net core 通过Sqlsugar生成实体

通过替换字符串的方式生成代码&#xff0c;其他代码也可以通这种方式生成 直接上代码 设置模板 将这几个模板文件设置为&#xff1a;嵌入资源 模板内容&#xff1a; using SqlSugar;namespace {Namespace}.Domain.Admin.{ModelName}; /// <summary> /// {TableDisplay…

重学SpringBoot3-SpringApplicationRunListener

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-SpringApplicationRunListener 1. 基本作用2. 如何实现2.1. 创建SpringApplicationRunListener2.2. 注册SpringApplicationRunListener2.3. 完整示例 3.…

跨国公司撤出背后的启示:中国IT产业的挑战与机遇

目录 前言 1. 全球化背景下的战略调整 2. 中国IT人才的应对之策 3. 中国IT产业的机遇与挑战 4. 未来的中国IT产业&#xff1a;自主创新与全球化并行 5. 结语 相关推荐 前言 IBM中国近日宣布撤出其在华两大研发中心&#xff0c;这一决定在IT行业内引发了广泛的讨论和思考…

iceoryx共享内存通信

共享内存原理 当POSIX系统中的进程启动时,它会被赋予自己的虚拟地址空间。 虚拟地址空间跨越的范围对于不同的进程可能是相同的,但是在特定地址可访问的数据对于每个进程可能是不同的。 在进程的虚拟地址空间内,有许多“内存区域”用于加载或映射数据。这些内存区域通常是…

MacBook上怎么查找历史复制记录?

你是否经常遇到这样的情况:做内容或方案时,需要用到素材就去找,找到后回来粘贴,然后再去找,再回来粘贴?这个过程是不是很繁琐? 那么找到的素材要不要保存下来呢?每个都存成文件似乎太麻烦了。但如果不单独保存,过两天想再利用又找不到了,怎么办? 在网上看到的一段好文案、…

Centos入门必备基础知识

CentOS&#xff08;Community ENTerprise Operating System&#xff09;是一个开源的Linux发行版&#xff0c;基于Red Hat Enterprise Linux&#xff08;RHEL&#xff09;源代码构建。以下是CentOS入门必备的一些基础知识&#xff1a; 前言 本文由浪浪云赞助发布&#xff0c;…

JavaScript 将 json 美化输出

https://andi.cn/page/621741.html