Kubernetes(k8s 1.23.17) 基于docker 一主两从集群环境搭建

news2024/12/23 3:10:50

结合网上资料,利用k8s最后直接支持docker的版本1.23.17搭建,并本地验证完成。

1 虚拟机准备

1.1 规划

系统角色/hostnameIP地址配置
CentOS 7.9 (需要7.5+)master192.168.68.1002Core、4G内存、40GB磁盘
CentOS 7.9 (需要7.5+)node1192.168.68.1012Core、4G内存、40GB磁盘
CentOS 7.9 (需要7.5+)node2192.168.68.1022Core、4G内存、40GB磁盘

1.2 虚拟机安装

使用VMWare Workstation 17

1.1.1 新建虚拟机

选择自定义,稍后安装系统
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.1.2 配置虚拟机

开启虚拟机,选择直接安装,软件选择时,选择 基础设施服务器,安装位置 默认即可

在这里插入图片描述
在这里插入图片描述

接下来是网络设置,设置固定IP,DNS使用阿里云的公共 DNS:223.5.5.5,保存后,同时更改左下角主机名为对应名称即可,对应:master、node1、node2

在这里插入图片描述
在这里插入图片描述

配置完成,即可开始安装,并设置系统密码

2 环境初始化

所有服务器节点都需要执行,使用 xshell 时,可以:工具 --> 发送键输入到所有会话,这样就是同时操作多个服务器

2.1 查看版本

确保版本 >= 7.5,本次使用的是7.9

cat /etc/redhat-release

2.2 配置主机名解析

方便集群间直接调用

cat>>/etc/hosts<<EOF
192.168.68.100 master
192.168.68.101 node1
192.168.68.102 node2
EOF

2.3 时间同步

k8s要求集群内节点时间精确一致。这里使用chronyd进行时间同步,也可以使用 ntp ntpdate

systemctl start chronyd && systemctl enable chronyd

2.4 关闭防火墙

kubernetes和docker在运行中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则

systemctl stop firewalld && systemctl disable firewalld

# 以下在 centos7 上未启用,可不做处理
systemctl stop iptables && systemctl disable iptables

2.5 禁用selinux

selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题

setenforce 0 && sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

2.6 禁用swap分区

swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用

启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备

但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明

swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

2.7 修改内核参数和模块

修改linux的内核参数,添加网桥过滤和地址转发功能

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

重新加载 使内核参数配置生效

sysctl --system  &&  modprobe br_netfilter  && lsmod | grep br_netfilter

2.8 ipset和ipvsadm

在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的

两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块

yum install ipset ipvsadm -y

编辑需要添加的模块脚本

cat <<EOF> /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
EOF

添加执行权限,并执行脚本

# 添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules

# 执行脚本
/bin/bash /etc/sysconfig/modules/ipvs.modules

# 查看是否加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4

2.9 重启服务器

reboot

3 安装docker

在所有服务器节点执行

3.1 准备

# 更新yum
yum update

# 卸载旧版docker
yum remove docker  docker-common docker-selinux docker-engine

# 安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2

# 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 或者使用阿里云的镜像源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

3.2 安装

这里安装的是 20.10.24版本

yum -y install docker-ce-20.10.24-3.el7 docker-ce-cli-20.10.24-3.el7 containerd.io

3.3 配置镜像地址

这里配置的清华镜像

Docker在默认情况下使用的Cgroup Driver为cgroupfs,而kubernetes推荐使用systemd来代替cgroupfs

mkdir /etc/docker && cat <<EOF> /etc/docker/daemon.json
{
	"exec-opts":["native.cgroupdriver=systemd"],
	"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
EOF

3.4 开机自启动

systemctl start docker && systemctl enable docker

4 kubernetes 安装

在所有服务器节点执行

4.1 配置镜像源

由于kubernetes的镜像源在国外,速度比较慢,这里切换成国内的镜像源

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=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

4.2 安装指定版本

安装kubeadm、kubelet和kubectl,这里安装的是1.23.17版本

yum -y install kubelet-1.23.17 kubeadm-1.23.17 kubectl-1.23.17

4.3 配置

配置kubelet的cgroup,与 3.3 配置相同:systemd

cat>/etc/sysconfig/kubelet<<EOF
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
EOF

4.4 开机自启kubelet

启动不先启动,因为后边的安装过程中会自动启动

systemctl enable kubelet

5 集群安装

以下在所有服务器都要执行

kubernetes默认CA证书为10年,其他证书为一年,需要修改可参考:https://blog.csdn.net/bh451326803/article/details/125439466,修改完成再进行以下操作,无需修改可无视

5.1 准备集群镜像

由于网络原因,无法连接,下面提供了一种替代方案,直接使用阿里云镜像

kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers

下面开始对集群进行初始化,并将node节点加入到集群中

以下只在 master 服务器上执行

5.2 创建集群

kubeadm init \
--kubernetes-version=v1.23.17 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=192.168.68.100 --image-repository=registry.aliyuncs.com/google_containers

5.3 创建必要文件

上边集群创建成功后,命令行会提示以下信息

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

以下只在 node 服务器上执行

5.4 node节点加入集群

以下这个命令,是 5.1 创建集群成功后,会提示的一个命令,注意查看提示

kubeadm join 192.168.68.100:6443 --token 8587uc.o8knircuri8etnw2 \
--discovery-token-ca-cert-hash sha256:acc37967fb5b0acf39d7598f8a439cc7de88f439a3f4d0c9cae88e7901b9d3f

6 网络插件安装

以下在 master 节点执行

查看各个节点的状态kubectl get nodes,全部都是notready状态,需要安装网络插件。k8s支持多种网络插件,如flannel,calico,canal等,这里选择flannel。

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

若无法访问,可直接去GitHub下载

https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml

这里放到root目录下,之后再使用配置文件启动fannel

kubectl apply -f kube-flannel.yml 

稍等片刻,再次查看node状态,发现为ready

kubectl get nodes

至此,集群环境搭建完成

7 验证集群

接入master节点,部署一个 nginx 进行测试

#部署nginx
kubectl create deployment nginx  --image=nginx:1.18-alpine

#暴露端口
kubectl expose deployment nginx  --port=80  --type=NodePort

kubectl get pod,svc

获取到部署信息如下

在这里插入图片描述

可以发现port=32673,用浏览器访问master:port 或 node1:port 或 node2:port都可以进入nginx主页

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

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

相关文章

一篇文章告诉你,为什么移动数据捕获对运输物流公司很重要?

随着世界走向数字化和智能手机的使用增加&#xff0c;移动数据采集正在成为大多数行业的新常态。航运物流也不例外。从捕获详细的订单和交付信息到跟踪货运和仓库位置&#xff0c;条形码技术用于运输物流世界的每一步。通过智能数据采集&#xff0c;运输和物流公司可以获得更好…

camunda的service task如何使用

在 Camunda 中&#xff0c;使用 Service Task 节点可以执行各种类型的业务逻辑&#xff0c;例如计算、数据转换、数据格式化等。在 Service Task 节点中&#xff0c;可以使用不同的编程语言来实现业务逻辑&#xff0c;例如 Java、JavaScript、Python 等。 下面是使用 Java 实现…

生产制造企业如何建立适合自身的数字化工厂,实现数字化转型?

“工业4.0”这一全新的术语受到全球的瞩目&#xff0c;它是继机械化、电气化和信息技术之后&#xff0c;以智能制造为核心的第四次工业革命。“工业4.0”最显著的特征是智能工厂的广泛普及。而智能工厂是在数字化工厂的基础上发展而来的&#xff0c;没有数字化就没有智能化。因…

如何在低代码平台上构建ERP软件

ERP软件是企业管理日常运营需求的关键组件。然而&#xff0c;对于许多企业&#xff0c;尤其是资源有限的企业来说&#xff0c;尝试构建和管理ERP平台可能要担负较高的成本的。幸运的是&#xff0c;低代码平台可以使这个过程变得容易得多。今天我们来解释如何在低代码平台上构建…

【IDEA】数据湖 Hudi 0.12.0 基础使用

文章目录 创建 Maven 项目插入数据查询数据更新数据增量查询删除数据 前言 集群系统&#xff1a;CentOS 7.5 服务器信息&#xff1a; 服务器角色IPhadoop104服务器Master192.168.0.104hadoop105服务器Slave1192.168.0.105hadoop106服务器Slave2192.168.0.106 使用的组件版本…

看完这篇文章你就彻底懂啦{保姆级讲解}-----(LeetCode刷题977有序数组的平方) 2023.4.20

目录 前言算法题&#xff08;LeetCode 977有序数组的平方&#xff09;—&#xff08;保姆级别讲解&#xff09;分析题目算法思想&#xff08;重要&#xff09;暴力解法代码&#xff1a;双指针法&#xff08;快慢指针法&#xff09;代码&#xff1a; 结束语 前言 本文章一部分内…

C++ Primer (第五版)-第九章 顺序容器

文章目录 一、概述二、内容9.1、顺序容器概述如何选择合适的容器 9.2、容器库概览迭代器容器类型成员列表初始化赋值和Swap容器的大小关系运算符 9.3 顺序容器操作9.3.1向顺序容器添加元素访问元素删除元素改变容器大小 9.4 Vector 对象如何增长9.5、额外的string 操作9.5.2、改…

【散文诗】单片机运行下和非运行下的 ROM 和 RAM

目录 一、两种处理器的结构体系1. 哈佛结构体系2. 冯诺依曼结构体系3. 两种结构的总结 二、单片机运行下和非运行下的内存分配1. 非运行时的单片机程序在ROM内的分布2. 运行时的单片机程序在RAM内的分布 三、单片机程序和操作系统应用程序的对比四、编译流程 一、两种处理器的结…

Java 8 中使用 Lambda 表达式和 Stream API 解决 LeetCode 的两数之和问题

Java 8 中使用 Lambda 表达式和 Stream API 解决 LeetCode 的两数之和问题 当我们在面对一个数列&#xff0c;需要查找其中两个元素的和为给定目标值时&#xff0c;可以使用两数之和&#xff08;Two Sum&#xff09;问题来解决。这个问题在 LeetCode 上有很高的重要性和普遍性&…

入行IC| 数字IC设计和验证哪个好?(内含薪资对比)

网上有一个很火的问题那就是数字IC设计和验证哪个好&#xff1f;接下来我们从以下几个维度来对比一下这两个岗位。 入行门槛 从上述对比就可以看出&#xff0c;IC设计要比验证门槛高。 具体工作内容有哪些&#xff1f; 数字IC前端设计 1.配合芯片架构的设计&#xff1b;一…

技术干货|直流电源自动测试系统功能介绍

直流电源是一种将交流电转换为恒定电压或电流输出的电子设备。在实际生产生活中&#xff0c;直流电源被广泛应用于各种场合。但由于各种原因&#xff0c;包括工艺、质量等因素&#xff0c;直流电源存在一定的出厂偏差。为了确保直流电源的精度和稳定性&#xff0c;在生产过程中…

layui框架学习(23:代码文本修饰模块)

Layui中的代码文本修饰模块layui.code主要用于修饰代码区域或文本行&#xff0c;其基本用法是使用预设类layui-code标识包含代码或文本的元素&#xff0c;然后调用layui.code函数渲染样式。Layui官网教程及示例中主要使用pre元素包含带修饰的代码或文本&#xff08;pre元素可定…

Myslq架构和原理

这里写自定义目录标题 Myslq体系架构连接层存储引擎 MYSQL原理单表访问连接查询&#xff08;原理&#xff09; Myslq体系架构 连接层 存储引擎 查看日志文件&#xff1a;show variables like ‘log_error’\G; BIN LOG 日志&#xff1a; show variables like ‘log_bin’; MYS…

Leetcode 622. 设计循环队列

文章目录 1.题目描述2.原题链接3.思路分析4.接口实现 &#xff1a;FrontRearenQueue(value):deQueue():isEmpty(): 检查循环队列是否为空isFull():myCircularQueueFree 5.代码实现 1.题目描述 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FI…

16.泛型

泛型 一、什么是泛型 泛型的本质是参数化类型&#xff0c;即给类型指定一个参数&#xff0c;然后在使用时再指定此参数具体的值&#xff0c;那样这个类型就可以在使用时决定了。这种参数类型可以用在类、接口和方法中&#xff0c;分别被称为泛型类、泛型接口、泛型方法。 二…

【ONE·C++ || 模板进阶】

总言 主要介绍模板相关内容&#xff1a;非类型模板参数、类模板特化、模板的分离编译。 文章目录 总言1、非类型模板参数1.1、主要介绍1.2、std::array 简要说明 2、模板的特化2.1、基本介绍2.2、函数模板特化2.3、类模板特化2.3.1、基本说明2.3.2、用途举例2.3.3、分类&#…

统信UOS 20 安装达梦数据库V8

统信UOS 20 安装达梦数据库V8 1、安装教程2、启动数据库实例服务失败解决方法3、使用dm管理工具连接数据库 1、安装教程 https://blog.csdn.net/OceanWaves1993/article/details/129936878 此教程进行到启动数据库实例步骤时 使用下面命令启动数据库实例服务时&#xff0c;报…

找高清图片素材,这8个网站就够了

相信很多设计师、自媒体都为找素材而烦恼&#xff0c;很多朋友不知道去哪里找图片素材&#xff0c;找到了版权还不明确&#xff0c;怕造成侵权&#xff0c;今天我就把我独家珍藏的8个图片素材网站分享给大家&#xff0c;免费下载&#xff0c;还可以商用&#xff0c;建议收藏起来…

APIs -- DOM浏览器

1. Window对象 1.1 BOM&#xff08;浏览器对象模型&#xff09; BOM(Browser Object Model)是浏览器对象模型 window对象是一个全局对象&#xff0c;也可以说是JavaScript中的顶级对象像document、alert()、console.log()这些都是window的属性&#xff0c;基本BOM的属性和方…

crackme例子1

样本 jadx 静态分析 其中v2为查v5表得到&#xff0c;v3为用户输入index 下面就分别分析这几个值是啥 abcdefghddddd 得到v5和v4 解压assets下abcdefghddddd 拖入010 editor查看&#xff0c;实际是一个带相关数据的png文件 v5为图片位置89473开始&#xff0c;长度768字节&am…