Kubeadm安装单master多node节点K8S集群

news2024/12/26 0:08:32

kubeadm安装k8s1.25版本集群步骤

  • 环境说明
    • 实验环境规划
    • 集群搭建规划
  • 初始化安装k8s集群的实验环境
    • 安装虚拟机
    • 更新yum源和操作系统
    • 配置机器主机名
    • 配置主机hosts文件,相互之间通过主机名互相访问
    • 配置主机之间无密码登录
    • 关闭交换分区swap,提升性能
    • 修改机器内核参数
    • 关闭firewalld防火墙
    • 配置阿里云的repo源
    • 配置安装k8s组件需要的阿里云的repo源
    • 配置时间同步
    • 安装基础软件包
  • 安装containerd服务
  • 安装docker服务
    • 配置containerd、docker镜像加速器
  • 安装初始化k8s需要的软件包
  • kubeadm初始化k8s集群
  • 基于kubeadm.yaml初始化k8s集群
  • 扩容k8s集群-添加第一个工作节点
  • 安装kubernetes网络组件-Calico

记录在刚搭建的3个虚拟机里成功安装K8S1.25版本集群的步骤

由于是成功创建后才记录的博客,只记录了操作步骤,过程中执行命令后的截图会有部分缺失,或者换成了文字。

环境说明

实验环境规划

操作系统:centos7.9
每个服务器配置: 4Gib内存/4vCPU/80G硬盘
网络:NAT模式

集群搭建规划

K8S集群角色IP主机名安装的组件
控制节点192.168.40.182k8s-master1apiserver、controller-manager、schedule、kubelet、etcd、kube-proxy、containerd、calico
工作节点192.168.40.183k8s-node1Kube-proxy、calico、coredns、containerd、kubelet
工作节点92.168.40.184k8s-node2Kube-proxy、calico、coredns、containerd、kubelet

初始化安装k8s集群的实验环境

安装虚拟机

安装虚拟机步骤见:
链接: Windows安装配置VMware
主要是:
1、修改机器IP,变成静态IP
2、关闭selinux
3、建议:自用的话,3个服务器root的登录密码设置一致,方面后面的操作

更新yum源和操作系统

ps. 3个服务器里都执行

yum update -y

查看操作系统

cat /etc/redhat-release

执行结果显示:CentOS Linux release 7.9.2009 (Core)

配置机器主机名

在192.168.40.182上执行

hostnamectl set-hostname k8s-master1 && bash

在192.168.40.183上执行

hostnamectl set-hostname k8s-node1 && bash

在192.168.40.184上执行

hostnamectl set-hostname k8s-node2 && bash

配置主机hosts文件,相互之间通过主机名互相访问

修改每台服务器的/etc/hosts文件,文件最后增加如下内容:
ps. 文件里原有的配置不要动

192.168.40.182   k8s-master1  
192.168.40.183   k8s-node1  
192.168.40.184   k8s-node2

配置主机之间无密码登录

ps. 以下命令3个服务器里都执行

1、配置到其他机器免密登录

ssh-keygen

ps. 以上命令执行后,一路回车,不输入密码

2、把本地生成的密钥文件和私钥文件拷贝到远程主机

ssh-copy-id k8s-master1

在这里插入图片描述
以上命令执行后,输入“yes”,然后按提示输入k8s-master1服务器的登录密码

ssh-copy-id k8s-node1

在这里插入图片描述
以上命令执行后,输入“yes”,然后按提示输入k8s-node1服务器的登录密码

ssh-copy-id k8s-node2

在这里插入图片描述
以上命令执行后,输入“yes”,然后按提示输入k8s-node2服务器的登录密码

关闭交换分区swap,提升性能

ps. 以下命令3个服务器里都执行

swapoff -a

永久关闭:注释swap挂载,给swap这行开头加一下注释

vi /etc/fstab

在这里插入图片描述

为什么要关闭swap交换分区?
Swap是交换分区,如果机器内存不够,会使用swap分区,但是swap分区的性能较低,k8s设计的时候为了能提升性能,默认是不允许使用交换分区的。Kubeadm初始化的时候会检测swap是否关闭,如果没关闭,那就初始化失败。如果不想要关闭交换分区,安装k8s的时候可以指定–ignore-preflight-errors=Swap来解决。

修改机器内核参数

ps. 以下命令3个服务器里都执行

modprobe br_netfilter
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf

关闭firewalld防火墙

ps. 3个服务器里都执行

systemctl stop firewalld && systemctl disable firewalld

配置阿里云的repo源

ps. 以下命令3个服务器里都执行

yum install yum-utils -y

配置国内安装docker和containerd的阿里云的repo源

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

配置安装k8s组件需要的阿里云的repo源

ps.以下命令 3个服务器里都执行

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
EOF

配置时间同步

ps. 以下命令3个服务器里都执行

安装ntpdate命令

yum install ntpdate -y

跟网络时间做同步

ntpdate cn.pool.ntp.org

把时间同步做成计划任务

crontab -e

写入:

* */1 * * * /usr/sbin/ntpdate   cn.pool.ntp.org

在这里插入图片描述
重启crond服务

service crond restart

安装基础软件包

ps. 3个服务器里都执行

yum install -y device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack telnet ipvsadm

安装containerd服务

ps. 以下命令3个服务器里都执行

yum install -y containerd.io-1.6.6

接下来生成 containerd 的配置文件

mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml

修改配置文件

vim /etc/containerd/config.toml

config.toml文件里的修改点:
1、把SystemdCgroup = false 修改成 = true
2、把sandbox_image = “k8s.gcr.io/pause:3.6” 修改成=“registry.aliyuncs.com/google_containers/pause:3.7”
改后如图(相关文件的片段,非整个文件的内容):
在这里插入图片描述
在这里插入图片描述
配置 containerd 开机启动,并启动 containerd

systemctl enable containerd  --now

修改/etc/crictl.yaml文件

cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
systemctl restart  containerd

安装docker服务

docker跟containerd不冲突,安装docker是为了能基于dockerfile构建镜像
ps. 以下命令3个服务器里都执行

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

配置containerd、docker镜像加速器

ps. 以下命令3个服务器里都执行

vim /etc/containerd/config.toml

config.toml文件里的修改点:找到config_path = “”,修改成
config_path = “/etc/containerd/certs.d”

mkdir /etc/containerd/certs.d/docker.io/ -p
vim /etc/containerd/certs.d/docker.io/hosts.toml

写入如下内容

[host."https://vh3bm52y.mirror.aliyuncs.com",host."https://registry.docker-cn.com"]
  capabilities = ["pull"]

重启containerd

systemctl restart containerd

配置docker镜像加速器

vim /etc/docker/daemon.json

写入如下内容

{
 "registry-mirrors":["https://vh3bm52y.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"]
} 

ps. 也可以在服务器节点上配置好,再远程拷贝到其他服务节点上,如下在k8s-master节点上执行:

scp daemon.json k8s-node1:/etc/docker/
scp daemon.json k8s-node2:/etc/docker/

重启docker

systemctl restart docker

安装初始化k8s需要的软件包

ps. 以下命令3个服务器里都执行

yum install -y kubelet-1.25.0 kubeadm-1.25.0 kubectl-1.25.0
systemctl enable kubelet

注:每个软件包的作用

  • Kubeadm: kubeadm是一个工具,用来初始化k8s集群的
  • kubelet: 安装在集群所有节点上,用于启动Pod,kubeadm安装k8s,控制节点和工作节点的组件
  • kubectl: 通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

kubeadm初始化k8s集群

ps. 仅在master节点的服务器上执行

kubeadm config print init-defaults > kubeadm.yaml

通过kubeadm config print init-defaults命令生成kubeadm.yaml文件,根据自己的需求修改配置,比如修改 imageRepository的值,kube-proxy 的模式为ipvs,需要注意的是由于本次使用的containerd作为运行时,所以在初始化节点的时候需要指定cgroupDriver为systemd

vim kubeadm.yaml

修改配置文件,修改地方用#标注了。仅改动标注部分,其他保持生成后的不变

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.40.182 #控制节点(master节点)的ip
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///run/containerd/containerd.sock  #指定containerd容器运行时,/etc/crictl.yaml里的runtime-endpoint
  imagePullPolicy: IfNotPresent
  name:  k8s-master1 #控制节点主机名
  taints: null
---
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers # 指定阿里云镜像仓库地址
kind: ClusterConfiguration
kubernetesVersion: 1.25.0 #k8s版本
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16    # 新增加的配置,指定pod网段
  serviceSubnet: 10.96.0.0/12 # 指定Service网段
scheduler: {}
#在文件最后,插入以下内容,(复制时,要带着---)
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd

基于kubeadm.yaml初始化k8s集群

k8s镜像下载很慢有时候会失败,提供了镜像的压缩文件,可以通过导入获取镜像。
文件放在了网盘里可自取:

链接: https://pan.baidu.com/s/1uDSPp1AkcvVxBzL57dWeBQ
提取码: ixhg
在这里插入图片描述

以下命令3个服务器里都执行

ctr -n=k8s.io images import k8s_1.25.0.tar.gz

k8s_1.25.0.tar.gz这个文件如何来的?
这个文件把安装k8s需要的镜像都集成好了,通过ctr images export 这个命令把镜像输出到k8s_1.25.0.tar.gz文件。
如: ctr -n=k8s.io images export k8s_1.25.tar.gz docker.io/calico/node:v3.18.0 registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.9.3
以上多个镜像用 空格 隔开

如果需安装其他版本,那就不需要实现解压镜像,可以从网络拉取镜像即可

ctr是containerd自带的工具,有命名空间的概念,若是k8s相关的镜像,都默认在k8s.io这个命名空间,所以导入镜像时需要指定命令空间为k8s.io

查看镜像

ctr -n=k8s.io images ls

ps. 仅在master节点的服务器上执行

kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification

看到类似返回表示执行成功
在这里插入图片描述
配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理

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

在这里插入图片描述

扩容k8s集群-添加第一个工作节点

在k8s-master1上查看加入节点的命令

kubeadm token create --print-join-command

获取到返回的命令,我当时的是:

kubeadm join 192.168.40.182:6443 --token pmm98c.whu5zvft6y1g1e2c --discovery-token-ca-cert-hash sha256:ff5a016ba790353d8d9cf2c46c3d6cbaeeba81c12503fb514f9a7f8ff17667c2

将返回的命令后面加上“–ignore-preflight-errors=SystemVerification” ,分别在node1和node2中执行

我当时执行的是:
[root@k8s-node1~]# kubeadm join 192.168.40.180:6443 --token vulvta.9ns7da3saibv4pg1 --discovery-token-ca-cert-hash sha256:72a0896e27521244850b8f1c3b600087292c2d10f2565adb56381f1f4ba7057a --ignore-preflight-errors=SystemVerification

看到下面图片响应的,说明k8s-node1节点已经加入到集群了,充当工作节点了
在这里插入图片描述
在k8s-master1上执行下面命令,查看集群节点状况

kubectl get nodes

当时返回的如图:
在这里插入图片描述
对k8s-node1打个标签,显示work

kubectl label nodes k8s-node1 node-role.kubernetes.io/work=work

kubectl label nodes k8s-node2 node-role.kubernetes.io/work=work
kubectl get nodes

在这里插入图片描述

为什么在工作节点运行kubectl报错?
[root@k8s-node1 ~]# kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?
因为在工作节点上没有$HOME/.kube/config文件。

在工作节点上执行kubectl的步骤如下:
分别在node1和node2中执行

mkdir $HOME/.kube/

在master节点中执行

scp /root/.kube/config k8s-node1:/root/.kube/

分别在node1和node2中执行

kubectl get nodes

安装kubernetes网络组件-Calico

把安装calico需要的镜像calico.tar.gz(在上面提供的网盘里)传到3个服务器上,上传后执行
ps. 以下命令3个服务器里都执行

ctr -n=k8s.io images import calico.tar.gz

上传calico.yaml(在上面提供的网盘里)到master节点上,使用yaml文件安装calico 网络插件

kubectl apply -f  calico.yaml

注:在线下载配置文件地址是: https://docs.projectcalico.org/manifests/calico.yaml

以上安装结束,最后的截图如下:

kubectl get nodes

在这里插入图片描述

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

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

相关文章

漏洞补丁修复之openssl版本从1.1.1q升级到1.1.1t以及python版本默认2.7.5升级到2.7.18新版本和Nginx版本升级到1.24.0

​ 一、Openssl升级 1、查看Openssl安装的版本 openssl version 2、查看Openssl路径 which openssl 3、上传openssl安装包到服务器:openssl-1.1.1t.tar.gz,并且解压,安装: mv /usr/local/openssl /usr/local/backup_openssl_1.1.1q_20240120 mkdir /usr/local/openssl tar…

LeetCode.2765. 最长交替子数组

题目 2765. 最长交替子数组 分析 为了得到数组 nums 中的最长交替子数组的长度&#xff0c;需要分别计算以每个下标结尾的最长交替子数组的长度。为了方便处理&#xff0c;计算过程中需要考虑长度等于 1 的最长交替子数组&#xff0c;再返回结果时判断最长交替子数组的长度…

【AI视野·今日Robot 机器人论文速览 第七十五期】Thu, 11 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Thu, 11 Jan 2024 Totally 16 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Analytical Model and Experimental Testing of the SoftFoot: an Adaptive Robot Foot for Walking over Obstacles and Irre…

MMagic调试(训练)dreambooth

时间&#xff1a;2024.1.23 1.dreambooth配置文件 dreambooth在mmagic中的路径&#xff1a; configs/dreambooth本文以dreambooth.py 为例 configs/dreambooth/dreambooth.py2.下载数据集 下载数据集并保存至data/dreambooth/&#xff0c;数据集&#xff1a; https://dri…

[BUUCTF]-PWN:babyfengshui_33c3_2016解析

又是一道堆题&#xff0c;先看保护 关键信息是32位&#xff0c;没开pie 直接看ida 大致是alloc创建堆块&#xff0c;free释放堆块&#xff0c;show查看堆块内容&#xff0c;fill填充堆块内容 其他的都没啥关键的要讲&#xff0c;但alloc那里非常需要解析一下 解释如上图 再具…

npm install运行报错npm ERR! gyp ERR! not ok问题解决

执行npm install的时候报错&#xff1a; npm ERR! path D:..\node_modules\\**node-sass** npm ERR! command failed ...npm ERR! gyp ERR! node -v v20.11.0 npm ERR! gyp ERR! node-gyp -v v3.8.0 npm ERR! gyp ERR! not ok根据报错信息&#xff0c;看出时node-sass运行出现…

基于taro搭建小程序多项目框架

前言 为什么需要这样一个框架&#xff0c;以及这个框架带来的好处是什么&#xff1f; 从字面意思上理解&#xff1a;该框架可以用来同时管理多个小程序&#xff0c;并且可以抽离公用组件或业务逻辑供各个小程序使用。当你工作中面临这种同时维护多个小程序的业务场景时&#xf…

前端面试题-(浏览器内核,CSS选择器优先级,盒子模型,CSS硬件加速,CSS扩展)

前端面试题-(浏览器内核&#xff0c;CSS选择器优先级&#xff0c;盒子模型&#xff0c;CSS硬件加速&#xff0c;CSS扩展&#xff09; 常见的浏览器内核CSS选择器优先级盒子模型CSS硬件加速CSS扩展 常见的浏览器内核 内核描述Trident(IE内核)主要用在window系统中的IE浏览器中&…

【论文阅读|2024 WACV 多目标跟踪Deep-EloU】

论文阅读|2024 WACV 多目标跟踪Deep-EloU 摘要1 引言&#xff08;Introduction&#xff09;2 相关工作&#xff08;Related Work&#xff09;2.1 基于卡尔曼滤波器的多目标跟踪算法&#xff08;Multi-Object Tracking using Kalman Filter&#xff09;2.2 基于定位的多目标跟踪…

Elasticsearch:Simulate ingest API

Ingest pipeline 为我们摄入数据提供了极大的方便。在我之前的文章中&#xff0c;有非常多的有关 ingest pipeline 的文章。请详细阅读文章 “Elastic&#xff1a;开发者上手指南”。针对一组提供的文档执行摄取管道&#xff0c;可以选择使用替代管道定义。 Simulate ingest AP…

如何查找SpringBoot应用中的请求路径(不使用idea)

背景 昨天有个同事向我咨询某个接口的物理表是哪个&#xff0c;由于公司业务较多、这块业务的确不是我负责的&#xff0c;也没有使用idea不能全局搜索(eclipse搜不到jar内的字符串)&#xff0c;也就回复了不清楚。 除了自己写代码输出servlet的路径和类外&#xff0c;发现了一…

【C++】list容器功能模拟实现

介绍 上一次介绍了list队容器的迭代器模拟&#xff0c;这次模拟实现list的简单功能&#xff0c;尤其要注意构造函数、析构函数、以及赋值运算符重载的实现。 list容器需要接纳所有类型的数据&#xff0c;因此&#xff0c;结构设置与迭代器设置同理&#xff0c;需要引入结点&…

邮件服务支持Exchange协议,资产历史账号支持设置保留数量,JumpServer堡垒机v3.10.2 LTS版本发布

2024年1月22日&#xff0c;JumpServer开源堡垒机正式发布v3.10.2 LTS版本。JumpServer开源项目组将对v3.10 LTS版本提供长期的支持和维护&#xff0c;并定期迭代发布小版本。欢迎广大社区用户升级至v3.10 LTS版本&#xff0c;以获得更佳的使用体验。 在v3.10.2 LTS版本中&…

LeetCode203 移除链表元素

203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5] 示例 2&#…

简单高效 Learn LaTeX 008 - LaTex Font Color 字体与颜色 (32 mins)

在LaTeX中进行字体和颜色的设置&#xff1a; https://www.ixigua.com/7298100920137548288?id7304094068840071730&logTag3418d8469157c468c60b

开始学习vue2(Vue方法)

一、过滤器 过滤器&#xff08;Filters&#xff09;是 vue 为开发者提供的功能&#xff0c;常用于文本的格式 化。过滤器可以用在两个地方&#xff1a;插值表达式 和 v-bind 属性绑定。 过滤器应该被添加在 JavaScript 表达式的尾部&#xff0c;由“管道符 ”进行 调用&#…

春招冲刺第二天——SQL学习

春招冲刺第二天 前言 MySQL学习&#xff1a;哔哩哔哩参考视频&#xff1a; 【中字】SQL进阶教程 | 史上最易懂SQL教程&#xff01;10小时零基础成长SQL大师 第一章 Mysql安装 视频前三节有教程&#xff0c;或自行查阅&#xff0c;不做赘述 课程资料和数据库数据的网盘&…

苹果眼镜(Vision Pro)的开发者指南(6)-实战应用场景开发 - 游戏、协作、空间音频、WebXR

第一部分:【构建游戏和媒体体验】 了解如何使用visionOS在游戏和媒体体验中创建真正身临其境的时刻。游戏和媒体可以利用全方位的沉浸感来讲述令人难以置信的故事,并以一种新的方式与人们联系。将向你展示可供你入门的visionOS游戏和叙事开发途径。了解如何使用RealityKit有…

windows .vscode的json文件配置 CMake 构建项目 调试窗口中文设置等

一、CMake 和 mingw64的安装和环境配置 二、tasks.json和launch.json文件配置 tasks.json {"version": "2.0.0","options": {"cwd": "${workspaceFolder}/build"},"tasks": [{"type": "shell&q…

V∗: Guided Visual Search as a Core Mechanism in Multimodal LLMs

摘要 当我们环顾四周并执行复杂任务时&#xff0c;我们如何看待和选择性地处理我们所看到的是至关重要的。然而&#xff0c;这种视觉搜索机制的缺乏&#xff0c;在目前的多模态LLM&#xff08;MLLM&#xff09;阻碍了他们的能力&#xff0c;专注于重要的视觉细节&#xff0c;特…