Kubernetes----基于kubeadm工具在CentOS7.9虚拟机上部署一主两从类型的1.26版本的Kubernetes集群环境

【原文链接】Kubernetes----基于kubeadm工具在CentOS7.9虚拟机上部署一主两从类型的1.26版本的Kubernetes集群环境

文章目录

  • 一、虚拟机环境准备
    • 1.1 准备三台CentOS操作系统的虚拟机
    • 1.2 修改主机名
    • 1.3 确认CentOS的版本符合要求
    • 1.4 配置地址解析
    • 1.5 配置时间同步
    • 1.6 关闭防火墙
    • 1.7 禁用selinux
    • 1.8 禁用swap分区
    • 1.9 修改Linux内核参数
    • 1.10 配置ipvs功能
    • 1.11 重启三台服务器
  • 二、安装Docker
    • 2.1 配置Docker镜像源
    • 2.2 安装Docker
    • 2.3 配置 daemon.json
    • 2.4 启动Docker并设置开机自启动
    • 2.5 启用CRI
    • 2.6 安装 cri-dockerd
  • 三、部署Kubernetes
    • 3.1 配置Kubernetes的的阿里云的源
    • 3.2 安装 kubeadm、kubelet、kubectl
    • 3.3 配置 kubelet
    • 3.4 准备k8s集群环境需要的镜像
    • 3.5 k8s集群初始化
    • 3.6 安装网络插件

一、虚拟机环境准备

1.1 准备三台CentOS操作系统的虚拟机

环境规划信息如下,准备三台虚拟机,虚拟机的资源配置根据自身资源情况配置,最好设置2核以上,内存4G以上,磁盘50G以上,当然资源越多越好。

|主机名|ip地址|cpu|内存|磁盘|
|:—😐:—😐:—😐:—😐
|master|192.168.116.40|8核|32G|120G|
|node1|192.168.116.41|8核|32G|120G|
|node2|192.168.116.42|8核|32G|120G|

1.2 修改主机名

按照1.1中的主机名称的规划设置主机名,设置命令如下

hostnamectl set-hostname master  # 在192.168.116.40 上执行
hostnamectl set-hostname node1   # 在192.168.116.41 上执行
hostnamectl set-hostname node2   # 在192.168.116.42 上执行

设置完成后,可以通过执行 hostname 命令查看主机名称是否正确配置。

1.3 确认CentOS的版本符合要求

使用CentOS操作系统要求版本要大于等于7.5 ,可通过如下命令查看,确认CentOS操作系统的版本符合要求

cat /etc/redhat-release

1.4 配置地址解析

在三台虚拟机中分别编辑 /etc/hosts 文件,增加如下内容

192.168.116.40    master
192.168.116.41    node1
192.168.116.42    node2

配置完成后,分别在master节点上ping node1和node2,在node1节点上ping master和node2,在node2节点上ping master和node1节点,若均能ping通,则表示地址解析配置成功。

1.5 配置时间同步

在三台虚拟机上均执行如下命令

systemctl start chronyd
systemctl enable chronyd

配置完成后,可分别在三台虚拟机上执行date命令,大概确认时间是否已保持一致。如时间已保持一致,表明配置成功。

1.6 关闭防火墙

在三台虚拟机上均执行如下命令,关闭防火墙(测试环境可以直接关闭,生产环境则需要谨慎考虑)

systemctl stop firewalld
systemctl disable firewalld
systemctl stop iptables
systemctl disable iptables

1.7 禁用selinux

在三台虚拟机上分别编辑 /etc/selinux/config 文件,然后将 SELINUX=enforcing 修改为 SELINUX=disabled,如下为修改后的配置

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

修改后需要重启才会生效,这里暂时先不重启,待后续配置都配置完成后统一重启。

1.8 禁用swap分区

在三台服务器编辑 /etc/fstab 文件,然后将 /dev/mapper/centos-swap swap 一行注释,比如这里编辑后的配置如下所示

/dev/mapper/centos-root /       xfs     defaults        0       0
UUID=d2b7d48e-aec4-42ab-926a-6531422bd16e       /boot   xfs     defaults        0       0
#/dev/mapper/centos-swap        swap    swap    defaults        0       0

同样这里暂时也先不重启,待后续配置完成后统一重启。

1.9 修改Linux内核参数

在三台服务器上创建 /etc/sysctl.d/kubernetes.conf 文件,文件中增加如下内容

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip.forward = 1

然后分别在三台服务器上执行如下命令,使配置生效

sysctl -p

然后分别在三台服务器上执行如下命令加载 br_netfilter 模块

modprobe br_netfilter

然后执行如下命令查看模块是否已被加载

lsmod | grep br_netfilter

当显示结果如下所示,则表示模块已被正确加载

[root@k8s-3 ~]# lsmod | grep br_netfilter
br_netfilter           22256  0
bridge                151336  1 br_netfilter
[root@k8s-3 ~]#

1.10 配置ipvs功能

在三台服务器上执行如下命令安装软件包 ipset和ipvsadm

yum install -y ipset ipvsadm

然后在三台服务器上分别创建 /etc/sysconfig/modules/ipvs.modules 文件,文件内容如下:

#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4

然后执行如下命令为文件增加可执行权限

chmod +x /etc/sysconfig/modules/ipvs.modules

然后执行如下命令,即执行上述文件

bash /etc/sysconfig/modules/ipvs.modules

执行完成后,通过执行 lsmod|grep ip_vs 命令查看结果,如下所示则表示配置成功

[root@k8s-3 ~]# lsmod|grep ip_vs
ip_vs_sh               12688  0
ip_vs_wrr              12697  0
ip_vs_rr               12600  0
ip_vs                 145458  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack          139264  2 ip_vs,nf_conntrack_ipv4
libcrc32c              12644  3 xfs,ip_vs,nf_conntrack
[root@k8s-3 ~]#

1.11 重启三台服务器

至此,服务器的基础配置已经配置完成,此时可以重启三台服务器了。

二、安装Docker

2.1 配置Docker镜像源

wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum clean all
yum makecache

2.2 安装Docker

首先执行如下命令查看Docker的版本

yum list docker-ce --showduplicates

然后选择一个版本,比如这里选择 20.10.16-3.el7 版本,分别在三台服务器上执行如下命令安装Docker

yum install -y --setopt=obsolutes=0 docker-ce-20.10.16-3.el7

2.3 配置 daemon.json

在三台服务器上编辑 /etc/docker/daemon.json 文件,配置如下内容

{"exec-opts":["native.cgroupdriver=systemd"],"registry-mirrors":["https://ooe7wn09.mirror.aliyuncs.com"]
}

2.4 启动Docker并设置开机自启动

执行如下命令即可启动Docker并设置开机自启动Docker

systemctl start docker
systemctl enable docker

2.5 启用CRI

编辑 /etc/containerd/config.toml 文件,将 disabled_plugins = [“cri”] 一行注释

然后重启 containerd

systemctl restart containerd
systemctl restart docker

2.6 安装 cri-dockerd

下载并安装rpm

wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1-3.el7.x86_64.rpm
rpm -ivh cri-dockerd-0.3.1-3.el7.x86_64.rpm

修改配置 /usr/lib/systemd/system/cri-docker.service, ExecStart 修改为如下内容

ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7

然后启动

systemctl daemon-reload
systemctl enable --now cri-docker

三、部署Kubernetes

3.1 配置Kubernetes的的阿里云的源

在三台服务器上编辑 /etc/yum.repos.d/kubernetes.repo 文件,文件内容如下

[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

然后在三台服务器上执行如下命令更新yum源

yum clean all
yum makecache

3.2 安装 kubeadm、kubelet、kubectl

然后通过如下命令查看可以安装的版本

yum list --showduplicates | grep  kubeadm

比如这里可以安装 1.26.8-0 版本,即在三台服务器上执行如下命令安装 kubeadm,kubelet,kubectl

yum install -y --setopt=obsolutes=0 kubeadm-1.26.8-0 kubelet-1.26.8-0 kubectl-1.26.8-0

3.3 配置 kubelet

在三台服务器上编辑 /etc/sysconfig/kubelet 文件,然后编写如下内容

KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

然后执行如下命令设置 kubelet 开机自启动

systemctl enable kubelet

3.4 准备k8s集群环境需要的镜像

首先通过 kubeadm config images list 命令查看需要的镜像以及tag值,比如这里是

registry.k8s.io/kube-apiserver:v1.26.9
registry.k8s.io/kube-controller-manager:v1.26.9
registry.k8s.io/kube-scheduler:v1.26.9
registry.k8s.io/kube-proxy:v1.26.9
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.6-0
registry.k8s.io/coredns/coredns:v1.9.3

因为k8s官网在国外,这里需要先从阿里云上下载,然后通过修改tag值的方式改为和k8s官网一样的,然后再进行安装
在三台服务器上执行如下命令

images=(kube-apiserver:v1.26.9 kube-controller-manager:v1.26.9 kube-scheduler:v1.26.9 kube-proxy:v1.26.9 pause:3.9 etcd:3.5.6-0 coredns:v1.9.3)
for imageName in ${images[@]} ; dodocker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageNamedocker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageNamedocker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
docker tag k8s.gcr.io/coredns:v1.9.3 k8s.gcr.io/coredns/coredns:v1.9.3

然后通过 docker images 查看镜像,如下所示即此时镜像与k8s需要的官方镜像一致了

[root@master ~]# docker images
REPOSITORY                           TAG        IMAGE ID       CREATED         SIZE
mysql                                5.7        d7b085374dbc   6 weeks ago     581MB
k8s.gcr.io/kube-apiserver            v1.21.14   e58b890e4ab4   14 months ago   126MB
k8s.gcr.io/kube-controller-manager   v1.21.14   454f3565bb8a   14 months ago   120MB
k8s.gcr.io/kube-scheduler            v1.21.14   f1e56fded161   14 months ago   50.9MB
k8s.gcr.io/kube-proxy                v1.21.14   93283b563d47   14 months ago   104MB
k8s.gcr.io/pause                     3.4.1      0f8457a4c2ec   2 years ago     683kB
k8s.gcr.io/coredns/coredns           v1.8.0     296a6d5035e2   2 years ago     42.5MB
k8s.gcr.io/coredns                   v1.8.0     296a6d5035e2   2 years ago     42.5MB
k8s.gcr.io/etcd                      3.4.13-0   0369cf4303ff   3 years ago     253MB
[root@master ~]#

3.5 k8s集群初始化

注意,此时只需在master节点执行如下命令即可

kubeadm init --kubernetes-version=v1.26.9 --pod-network-cidr=10.240.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=192.168.116.40  --cri-socket=unix:///var/run/cri-dockerd.sock --image-repository registry.aliyuncs.com/google_containers

如下图所示,出现 “successfuly” 字样表示部署成功

然后根据回显中的提示,执行如下三条命令

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

根据提示,如下图所示,继续执行如下命令

export KUBECONFIG=/etc/kubernetes/admin.conf

此时通过 kubectl get nodes 命令可以查看当前集群环境的节点信息,如下所示,此时集群环境中只有一个master节点

[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES                  AGE     VERSION
master   NotReady   control-plane,master   8m38s   v1.21.10
[root@master ~]#

在集群初始化的结果回显中如下图所示已经给出提示了,通过在节点服务器上执行如下命令即可增加集群节点,因此此时可以到node1和node2节点上执行此命令。

kubeadm join 192.168.116.40:6443 --token gcd293.mazg2vbx7td1q84g \--discovery-token-ca-cert-hash sha256:f6e8a63c31cf3b6b0e902368992d7358cdbd6de36c3e71bed291fa0ecd64fabd --cri-socket=unix:///var/run/cri-dockerd.sock

然后再次在master节点中查看集群的节点信息,如下所示,此时集群环境中已经存在三个节点了

[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES           AGE     VERSION
master   NotReady   control-plane   6m48s   v1.26.8
node1    NotReady   <none>          26s     v1.26.8
node2    NotReady   <none>          5s      v1.26.8

3.6 安装网络插件

注意,这里只需要在master节点上操作,即在master节点上执行如下命令

cd /opt/
wget  https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

然后编辑配置文件,将配置文件中namespace修改为 kube-system,子网范围也需要配置跟前面k8s初始化的时候一致,比如这里是 10.240.0.0/16,修改完成后,就可以执行如下命令了。

kubectl apply -f kube-flannel.yml

稍微等待一两分钟,再次在master节点上查看集群节点状态,如下所示,此时master、node1、node2节点状态均为Ready状态了

[root@master opt]# kubectl get nodes
NAME     STATUS   ROLES                  AGE     VERSION
master   Ready    control-plane,master   15m     v1.21.10
node1    Ready    <none>                 4m4s    v1.21.10
node2    Ready    <none>                 3m52s   v1.21.10
[root@master opt]#

至此,一主两从的Kubernetes集群环境就搭建完成了。

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

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

相关文章

c++ 学习之 强制类型转换运算符 const_cast

看例子怎么用 int main() {int a 1;int* p a;// 会发生报错// 如果学着 c的风格类型转换int* pp (int*)a;*pp 1; // 编译不报错&#xff0c;但是运行报错// const_castconst int n 5;const std::string s "lalal";// const cast 只针对指针&#xff0c;引用&…

Navicat如何连接远程服务器的MySQL

参考:https://blog.csdn.net/a648119398/article/details/122420906 1.Navicat for Mysql 2.腾讯云轻量级服务器一台&#xff08;Centos 7&#xff09; 3.Mysql 8.0.24&#xff08;远程服务器内安装的&#xff09; 4.Xshell7&#xff08;连接操作远程服务器&#xff09; 一、修…

电子书制作软件Vellum mac中文版特点

Vellum mac是一款专业的电子书制作软件&#xff0c;它可以帮助用户将文本文件转换为高质量的电子书&#xff0c;支持多种格式&#xff0c;包括EPUB、MOBI、PDF等。Vellum具有直观的用户界面和易于使用的工具&#xff0c;可以让用户快速地创建和发布电子书。 Vellum mac软件特点…

FPGA---UDP通信求助

项目场景&#xff1a; 使用UDP进行回环&#xff0c;网络调试助手&#xff0c;发送数据通过UDP接收模块接收&#xff0c;解析出数据&#xff0c;给到UDP发送模块&#xff0c;传回上位机。 问题描述 UDP接收模块中&#xff0c;接收到的CRC校验值与自己计算CRC校验值进行判断&am…

OpenCV实现图像傅里叶变换

傅里叶变换 dftcv.dft(img_float32,flagscv.DFT_COMPLEX_OUTPUT): flags:标志位&#xff0c;指定变换类型&#xff0c;cv.DFT_COMPLEX_OUTPUT会返回复数结果。 傅立叶变换&#xff0c;将输入的图像从空间域转换到频率域。 返回结果: 此函数返回一个复杂数值数组&#xff0c…

c++ 类的特殊成员函数:移动构造函数(五)

1. 简介 移动构造函数是C11中的新特性&#xff0c;它允许对象通过移动而不是复制来传递和初始化。移动构造函数通常用于提高性能&#xff0c;因为它避免了不必要的复制操作&#xff0c;特别是当处理大型对象或使用动态内存分配时。 2. 来源 当拷贝构造函数出现函数返回值 &a…

LeetCode(力扣)416. 分割等和子集Python

LeetCode416. 分割等和子集 题目链接代码 题目链接 https://leetcode.cn/problems/partition-equal-subset-sum/ 代码 class Solution:def canPartition(self, nums: List[int]) -> bool:sum 0dp [0]*10001for num in nums:sum numif sum % 2 1:return Falsetarget …

【Vuex+ElementUI】Vuex中取值存值以及异步加载的使用

一、导言 1、引言 Vuex是一个用于Vue.js应用程序的状态管理模式和库。它建立在Vue.js的响应式系统之上&#xff0c;提供了一种集中管理应用程序状态的方式。使用Vuex&#xff0c;您可以将应用程序的状态存储在一个单一的位置&#xff08;即“存储”&#xff09;中&#xff0c;…

MySQL数据生成工具mysql_random_data_load

在看MySQL文章的时候偶然发现生成数据的工具&#xff0c;此处直接将软件作者的文档贴了过来&#xff0c;说明了使用方式及下载地址 Random data generator for MySQL Many times in my job I need to generate random data for a specific table in order to reproduce an is…

Flutter_Slider_SliderTheme_滑杆/滑块_渐变色

调用示例以及效果 SliderTheme(data: SliderTheme.of(context).copyWith(trackHeight: 3,// 滑杆trackShape: const GradientRectSliderTrackShape(radius: 1.5),// 滑块thumbShape: const GradientSliderComponentShape(rectWH: 14, overlayRectSpace: 4, overlayColor: Colou…

Linux sed命令

在Linux系统中&#xff0c;有许多强大的文本处理工具&#xff0c;其中之一就是sed&#xff08;Stream Editor&#xff09;命令。sed是一个用于对文本进行编辑、替换、删除和过滤操作的命令行工具&#xff0c;一次处理一行内容。它具有强大的正则表达式支持和灵活的文本处理功能…

智能电表线路单回路双回路的区别

随着科技的发展和能源管理的需求&#xff0c;智能电表已经成为电力系统中不可或缺的一部分。智能电表可以通过数据通信网络将用电信息实时传输到电力公司&#xff0c;为电力公司提供更精确、实时的用电数据&#xff0c;同时也可以为用户提供更加智能化的用电服务。 在智能电表…

Peter算法小课堂—DP背包问题

大家好&#xff0c;我是Peter&#xff0c;我又来啦&#x1f388;&#x1f384;✨ &#x1f388;&#x1f9e8;&#x1f389;《动态规划》专栏来啦&#xff0c;目前为止&#xff0c;此专栏已经有四篇文章啦&#x1f381;&#x1f380;&#x1f384; 1.DP概念与编程方法 DP概念…

图扑 HT for Web 风格属性手册教程

图扑软件明星产品 HT for Web 是一套纯国产化独立自主研发的 2D 和 3D 图形界面可视化引擎。HT for Web&#xff08;以下简称 HT&#xff09;图元的样式由其 Style 属性控制&#xff0c;并且不同类型图元的 Style 属性各不相同。为了方便查询和理解图元的 Style 属性&#xff0…

Matlab地理信息绘图—数据诊断

文章目录 数据诊断分析&#xff08;均值方差&#xff09;Matlab代码实现结果展示 数据诊断分析&#xff08;均值方差&#xff09; 均值方差检测是一种简单但有效的异常检测方法&#xff0c;主要基于样本的均值和方差的统计信息。该方法的核心思想是假设正常的样本点应该聚集在…

Python 自定义包和模块随机生成6位验证码(详解版)

一、新建一个包&#xff08;两种方法&#xff09; 方法一&#xff1a;先新建一个空目录命名为"小功能包"&#xff0c;然后在新建的目录下新建一个空__init__.py&#xff08;目的是声明当前目录是一个包&#xff09; 方法二&#xff1a;直接在PyCharm用鼠标依次点击F…

多尺度retinex图像去雾算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 clc; clear; close all; warning off; addpath(genpath(pwd)); rng(default)img_in im2doub…

基于SpringBoot的学院班级回忆录

目录 前言 一、技术栈 二、系统功能介绍 管理员模块的实现 用户信息管理 班委信息管理 班级信息管理 班级相册管理 用户和班委模块的实现 班委注册 班级信息管理 加入班级 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越…

使用c++视觉处理----canny 边缘检测、sobel边缘检测、scharr 滤波边缘检测

使用c视觉处理canny 边缘检测、sobel边缘检测、scharr 滤波边缘检测 #include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat image cv::imread("1.jpg", cv::IMREAD_GRAYSCALE); // 转为灰度图像if (image.empty()) {std::cerr << "无法加…

2023年9月Web3行业月度发展报告区块链篇 | 陀螺科技会员专享

9月是加密市场的活动月&#xff0c;斯坦福区块链周、Token2049等大型活动相继举办&#xff0c;后者更是创下超过1万人的历史最高纪录&#xff0c;成为了全球最大的Web3活动。在本次Token2049上&#xff0c;RWA、支付以及出入金成为了讨论度最多的活动。尽管活动如火如荼&#x…