kubernetes(k8s)集群部署(2)

目录

 

k8s集群类型

k8s集群规划:

1.基础环境准备:

(1)保证可以连接外网

(2)关闭禁用防火墙和selinux

(3)同步阿里云服务器时间(达到集群之间时间同步)

(4)主机名规划

2.集群环境部署

(1)配置集群之间本地解析

(2)开启bridge网桥过滤功能

(3)配置ipvs代理功能

(4)关闭禁用swap分区

3.安装Docker(采用离线版部署较快)

如果想直接在线安装Docker可以看我上一章文档

(1)上传离线包并解压

(2)安装Docker

(3)启用 Cgroup 控制组

(4)启动并查看Docker版本

Docker部署成功!!!

4.k8s集群部署

部署方式有哪些:

(1)使用阿里仓库进行安装

(2)安装集群软件

(3)配置 kubelet 启用 Cgroup 控制组

(4)设置kubelet开机自启

5.集群初始化

(1)查看集群所需镜像文件

(2)创建集群初始化配置文件

(3)配置集群初始化文件

(4)集群初始化

(5)根据提示,在master生成集群管理员配置文件

6.node节点加入集群

在master节点重新生成包含新token的完整命令

(2)查看节点是否加入成功

7.部署Calico网络

网络模型的区别:

性能的区别:

(1)在 master节点安装下载 Calico 的yaml文件

(2)创建calico网络

(3)查看calico的Pod状态

离线部署Calico网络(如果拉取不到可使用离线方式部署):

(4)检查集群状态

8.验证:使用k8s运行一个nginx容器

(1)简单写一个nginx的yaml文件

(2)创建nginx容器

(4)浏览器访问测试:

部署成功!!!!


 

k8s集群类型

一主多从集群:由一台Master管理节点和多台Node工作节点组成,生产环境下Master节点存在单点故障的风险,适合学习和测试环境使用;

多主多从集群:由多台Master管理节点和多Node工作节点组成,安全性高,适合生产环境使用;

k8s集群规划:

本章采用一主多从集群进行演示

 

主机名

IP地址

角色

操作系统

硬件最低配置

Master 

192.168.100.101

管理节点

CentOS 7

2Core/4G内存/50G+

node01

192.168.100.102

工作节点

CentOS 7

1Core/2G内存/50G

node02

192.168.100.103

工作节点

CentOS 7

1Core/2G内存/50G+

注意:master节点CPU必须为2核心(不然后续集群初始化会报错),内存2+

 

1.基础环境准备:

(1)保证可以连接外网

2097fb019e4349efa1eab6aa398e7b8c.png

(2)关闭禁用防火墙和selinux

60797484cfb346e5bdc2e47396661487.png

3同步阿里云服务器时间(达到集群之间时间同步)

yum install ntpdate -yntpdate ntp1.aliyun.com

d760960efda54f669f160f1c376aa0ca.png

(4)主机名规划

hostnamectl set-hostname 主机名

2.集群环境部署

提示:以下前期环境准备需要在所有节点都执行可使用Ansible或xshell自带的终端同步

(1)配置集群之间本地解析

集群在初始化时需要能够解析到每个节点的主机名

cat <<END>> /etc/hosts
192.168.100.101 master
192.168.100.102 node01
192.168.100.103 node02
END

(2)开启bridge网桥过滤功能

bridge (桥接网络) 是 Linux 系统中的一种虚拟网络设备,它充当一个虚拟的交换机,为集群内的容器提供网络通信功能,容器就可以通过这个 bridge 与其他容器或外部网络通信了。

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

参数解释: 

net.bridge.bridge-nf-call-ip6tables = 1 //对网桥上的IPv6数据包通过iptables处理

net.bridge.bridge-nf-call-iptables = 1 //对网桥上的IPv4数据包通过iptables处理 net.ipv4.ip_forward = 1 //开启IPv4路由转发,来实现集群中的容器与外部网络的通信

由于开启 bridge 功能,需要加载 br_netfilter 模块来允许在 bridge 设备上的数据包经过 iptables 防火墙处理

modprobe br_netfilter && lsmod | grep br_netfilter

e246dc05beb44dcca1c1692f6bb14608.png

加载配置文件,使上述配置生效

sysctl -p /etc/sysctl.d/k8s.conf

61b24341f1c94ce985c7f2c19d1777aa.png

(3)配置ipvs代理功能

在k8s中 Service 有两种代理模式,一种是基于 iptables 的,一种是基于 ipvs ,两者对比 ipvs 负载均衡算法更加的灵活,且带有健康检查的功能,如果想要使用 ipvs 模式,需要手动载入 ipvs 模块。

ipset 和 ipvsadm 是两个与网络管理和负载均衡相关的软件包,提供多种负载均衡算法,如轮询(Round Robin)、加权轮询(Weighted Round Robin)、最小连接(Least Connection)、加权最小连接(Weighted Least Connection)等;

 

使用yum安装

yum -y install ipset ipvsadm

将需要加载的 ipvs 相关模块写入到文件中

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
EOF

模块介绍: 

ip_vs //提供负载均衡的模块

ip_vs_rr //轮询算法的模块(默认)

ip_vs_wrr //加权轮询算法的模块,根据后端服务器的权重值转发请求

ip_vs_sh //哈希算法的模块,同一客户端的请求始终被分发到相同的后端服务器,保证会话一致性 nf_conntrack //链接跟踪的模块,用于跟踪一个连接的状态,例如 TCP 握手、数据传输和连接关闭等

添加可执行权限执行脚本加载模块

chmod +x /etc/sysconfig/modules/ipvs.modules
/etc/sysconfig/modules/ipvs.modules 
lsmod | grep ip_vs

ac91290919c943fea25a1edb7fa5b0c2.png

(4)关闭禁用swap分区

为了保证 kubelet 正常工作要求禁用SWAP,否则集群初始化失败

swapoff -ased -i '/swap/s/^/#/' /etc/fstab

查看是否关闭

free -h|grep -i swap

88c60ca6fa8d45a3b5274dc036015023.png

 

为什么要关闭swap分区?

swap 启用后,在使用磁盘空间和内存交换数据时,性能表现会较差,会减慢程序执行的速度。有的软件的设计师不想使用交换,例如:kubelet 在 v1.8 版本以后强制要求 swap 必须关闭,否则会报错。

 

3.安装Docker(采用离线版部署较快)

 

Windows和Linux系统部署Docker容器(2)_windows linux如何运行 docker程序-CSDN博客

 

如果想直接在线安装Docker可以看我上一章文档

 

注意:也是三台服务器都需要安装,docker版本不要安装的太新尽量是20.10.0或以下版本不然会与k8s出现不兼容现象(需要另加插件),具体可查看k8s官网详情

 

百度网盘下载离线资源(会有限速现象)

链接:https://pan.baidu.com/s/13es-mHZx7QzYWLpu4V399w?pwd=f36s 
提取码:f36s

(1)上传离线包并解压

tar xfz docker_20.10.0.tar.gz

(2)安装Docker

cd docker_20.10.0/
yum -y install ./*.rpm

(3)启用 Cgroup 控制组

用于限制进程的资源使用量,如CPU、内存资源

mkdir /etc/dockercat <<EOF>> /etc/docker/daemon.json
{"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

(4)启动并查看Docker版本

systemctl enable docker --now
docker -v

cd8cf8b1546442dbae734113fb0c8ffa.png

Docker部署成功!!!

 

4.k8s集群部署

 

部署方式有哪些:

k8s集群有多种部署方式,目前常用的部署方式有如下两种:

kubeadm 部署方式:kubeadm是一个快速搭建kubernetes的集群工具;

二进制包部署方式(对新手不友好):从官网下载每个组件的二进制包,依次去安装,部署麻烦;

其他方式:通过一些开源的工具搭建,例如:sealos;

本章使用Kubeadm方式部署k8s集群,需要配置k8s软件仓库来安装集群所需软件,本实验使用阿里云YUM源

注意:三台服务器都需要配置

(1)使用阿里仓库进行安装

cat <<END>> /etc/yum.repos.d/k8s.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
END

(2)安装集群软件

本实验安装k8s 1.23.0版本软件

yum install -y  kubeadm-1.23.0-0  kubelet-1.23.0-0 kubectl-1.23.0-0

如果报错:

5d4dad2feebe406fbbb69c8444342c27.png

需下载使用公网仓库(例如:阿里公网仓库)下载依赖

(3)配置 kubelet 启用 Cgroup 控制组

用于限制进程的资源使用量,如CPU、内存等

echo 'KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"' >/etc/sysconfig/kubelet

(4)设置kubelet开机自启

5.集群初始化

###master节点配置

(1)查看集群所需镜像文件

[root@master ~]# kubeadm config images list

5dd8087e5dae4e698ee6fa27de7c5d3f.png

(2)创建集群初始化配置文件

[root@master ~]# kubeadm config print init-defaults > kubeadm-config.yml

(3)配置集群初始化文件

[root@master ~]# vim kubeadm-config.ymladvertiseAddress: 192.168.100.101name: masterimageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers

47c5c26da24440728f9b512227c3d553.png

(4)集群初始化

[root@master ~]# kubeadm init --config kubeadm-config.yml --upload-certs

拉取镜像过程可能会有点长请耐心等待(快慢取决于网速)

选项说明: --upload-certs //初始化过程将生成证书,并将其上传到etcd存储中,避免证书被移动或者删除,也不会影响集群。

-------------------------------------------------------------------------------

init初始化失败:

注意:如果初始化环境报错说明前面基础环境有问题请仔细检查如:cpu2+ 内存2+,使用如下命令进行回退

[root@k8s-master ~]# kubeadm reset -f

[root@k8s-master ~]#

[root@k8s-master ~]# rm -rf /etc/kubernetes

[root@k8s-master ~]# rm -rf /var/lib/etcd/

[root@k8s-master ~]# rm -rf $HOME/.kube

----------------------------------------------------------------------------------------

08a780fbba8f410988b2c15ce2846fe5.png

如果显示此信息说明初始化成功!前面的基础环境没有问题

 

(5)根据提示,在master生成集群管理员配置文件

注意:认真查看提示信息,不能装作没看见

d7f9f2a94c6545aea0044a4a40142ce5.png

#在master主节点执行
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config

 

6.node节点加入集群

可根据提示信息加入node节点

3dd4a96868284a709341eed44bba1048.png

---------------------------------------------------------------------------------------------------

token有效期为24小时,如果提示信息失效可重新生成(如果可以看到或找到提示信息就不用生成了):

master节点重新生成包含新token的完整命令

重新生成token

[root@master ~]# kubeadm token create

查看token

[root@master ~]# kubeadm token create --print-join-command

b50194ea3b2c46368203c0e81d3adc07.png

-------------------------------------------------------------------------------------------------------------------

b753d827aff24802814c91886be3909f.png

(2)查看节点是否加入成功

[root@master ~]# kubectl get nodes

208c69a769da477eb224ac2ffb038fe0.png

7.部署Calico网络

Calico 和 Flannel 是两种流行的 k8s 网络插件,它们都为集群中的 Pod 提供网络功能。然而,它们在实现方式和功能上有一些重要区别:

网络模型的区别:

Calico 使用 BGP(边界网关协议)作为其底层网络模型。它利用 BGP 为每个 Pod 分配一个唯一的 IP 地址,并在集群内部进行路由。Calico 支持网络策略,可以对流量进行精细控制,允许或拒绝特定的通信

Flannel 则采用了一个简化的覆盖网络模型。它为每个节点分配一个 IP 地址子网,然后在这些子网之间建立覆盖网络。Flannel 将 Pod 的数据包封装到一个更大的网络数据包中,并在节点之间进行转发。Flannel 更注重简单和易用性,不提供与 Calico 类似的网络策略功能

 

性能的区别:

由于 Calico 使用 BGP 进行路由,其性能通常优于 Flannel。Calico 可以实现直接的 Pod 到 Pod 通信,而无需在节点之间进行额外的封装和解封装操作。这使得 Calico 在大型或高度动态的集群中具有更好的性能。

Flannel 的覆盖网络模型会导致额外的封装和解封装开销,从而影响网络性能。对于较小的集群或对性能要求不高的场景,这可能并不是一个严重的问题。

(1)在 master节点安装下载 Calico 的yaml文件

[root@master ~]# 
wget https://calico-v3-25.netlify.app/archive/v3.25/manifests/calico.yaml

(2)创建calico网络

[root@master ~]# kubectl apply -f calico.yaml

(3)查看calico的Pod状态

[root@master ~]# kubectl get pod -n kube-system

显示镜像正在拉取

ed65ea71e930440395689d5c2b40192f.png

等十几分钟再次查看

b10fa15b2dfc4074bf6d6afa24fb4597.png

这种现象就属于镜像没有拉取成功,正常的话应该显示Runing状态,由于镜像在国外难免会出一些问题,所以只能使用离线资源(提前下载好的镜像)了大家可以看我上一文档

离线部署Calico网络(如果拉取不到可使用离线方式部署):

k8s离线部署Calico网络(2续)-CSDN博客

--------------------------------------------------------------------------

删除calico命令:

[root@master ~]# kubectl delete pod 节点名称 -n kube-system

 

使用变量删除所有:慎用

[root@master ~]#  kubectl delete pod $(kubectl get pods -n kube-system|grep calico-node|awk '{print $1}') -n kube-system

 

----------------------------------------------------------------------------------

(4)检查集群状态

[root@master ~]# kubectl get nodes

bf49699d5433422f97a578d660b381cf.png

状态显示‘Ready’就说明集群没有问题可以使用了!!!

 

8.验证:使用k8s运行一个nginx容器

(1)简单写一个nginx的yaml文件

[root@master ~]# vim nginx.yaml
apiVersion: v1
kind: Pod
metadata:name: nginxlabels:app: nginx
spec:containers:- name: nginximage: nginx:latestports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: nginx-svc
spec:type: NodePortselector:app: nginxports:- port: 80targetPort: 80
nodePort: 30003

(2)创建nginx容器

[root@master ~]# kubectl apply -f nginx.yaml

(3)查看容器状态和映射端口

[root@master ~]# kubectl get pod,svc

f552ca4c979444e5b4fcbb65e20fe0c1.png

(4)浏览器访问测试:

http://192.168.100.103:30003/

6d282ab0f5a44fe39ec28070efd2bf12.png

部署成功!!!!

 

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

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

相关文章

pytest并发执行时token异常处理问题

接前面加入钩子函数处理token复用的问题&#xff0c;只保证了用例的串联执行&#xff0c;我的部分测试用例中接入了通义千问的部分接口生成测试数据&#xff0c;七八个场景跑完差不多快要10分钟。考虑使用并发执行。 http://t.csdnimg.cn/ACexL 使用多线程和不使用耗时差距很大…

HyperBDR新版本上线,自动化容灾兼容再升级!

本次HyperBDR v5.5.0版本新增完成HCS&#xff08;Huawei Cloud Stack&#xff09;8.3.x和HCSO&#xff08;Huawei Cloud Stack Online&#xff09;自动化对接&#xff0c;另外还突破性完成了Oracle云(块存储模式)的自动化对接。 HyperBDR&#xff0c;云原生业务级别容灾工具。支…

Unity资源 之 最受欢迎的三消游戏开发包 - Bubble Shooter Kit 【免费领取】

三消游戏开发包 - Bubble Shooter Kit 免费领取 前言资源包内容领取兑换码 前言 如果你是一名 Unity 游戏开发者&#xff0c;并且正在寻找一种快速、简单的方式来创建自己的三消游戏&#xff0c;那么 Bubble Shooter Kit 就是你所需要的。 资源包内容 Bubble Shooter Kit 是…

代码随想录算法训练营第36期 last day

最后一次更新&#xff0c;之后去复习专业课和简历 583两个字符串的删除操作 自己做出来了&#xff1a; Code: class Solution {public://找到公共子序列的最大长度dp 最小步数串1.size-dp串2.size-dp int minDistance(string word1, string word2) { vector<v…

用智能插件(Fitten Code: Faster and Better AI Assistant)再次修改vue3 <script setup>留言板

<template><div><button class"openForm" click"openForm" v-if"!formVisible">编辑</button><button click"closeForm" v-if"formVisible">取消编辑</button><hr /><formv-i…

基于梯度下降的多元线性回归原理

为了展示多元线性回归的迭代过程&#xff0c;我们可以使用梯度下降算法手动实现多元线性回归。梯度下降是一种迭代优化算法&#xff0c;用于最小化损失函数。 我们将以下步骤进行手动实现&#xff1a; 初始化回归系数。计算预测值和损失函数。计算梯度。更新回归系数。重复步…

高分论文密码---大尺度空间模拟预测与数字制图

大尺度空间模拟预测和数字制图技术和不确定性分析广泛应用于高分SCI论文之中&#xff0c;号称高分论文密码。大尺度模拟技术可以从不同时空尺度阐明农业生态环境领域的内在机理和时空变化规律&#xff0c;又可以为复杂的机理过程模型大尺度模拟提供技术基础。我们将结合一些经典…

制造业几大系统(MES/WMS/QMS/ERP)的集成

制造业的几大系统包括MES&#xff08;制造执行系统&#xff09;、WMS&#xff08;仓库管理系统&#xff09;、QMS&#xff08;质量管理系统&#xff09;和ERP&#xff08;企业资源计划&#xff09;系统。这些系统在制造业中扮演着不同的角色&#xff0c;可以通过集成实现更高效…

Kafka高频面试题整理

文章目录 1、什么是Kafka?2、kafka基本概念3、工作流程4、Kafka的数据模型与消息存储机制1)索引文件2)数据文件 5、ACKS 机制6、生产者重试机制:7、kafka是pull还是push8、kafka高性能高吞吐的原因1&#xff09;磁盘顺序读写&#xff1a;保证了消息的堆积2&#xff09;零拷贝机…

SqlSugar有实体CURD应用-C#

本文所述开发环境&#xff1a;.C#、NET8、Visual Studio2022 SqlSugar有实体查询数据表 首先根据《SqlSugar使用DbFirst对象根据数据库表结构创建实体类-C#》中的描述的表结构创建所有表的实体类如下&#xff1a; 表名创建的实体类名tb_studentStudenttb_teacherTeachertb_c…

linux的UDP广播测试:C语言代码

测试代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h>#…

MyEclipse新手使用介绍

目录 1.MyEclipse诞生背景 2.作用 3.版本历史 4.优缺点 5.应用场景 6.如何使用 6.1.下载与安装 6.2.MyEclipse 菜单及其菜单项 7.创建和发布一个 Java 程序 7.1.创建 Java 程序 7.2.发布 Java 程序 8.示例 8.1. Hello World 示例 8.2. 简单Spring Boot 应用 8.3…

kettle从入门到精通 第六十九课 ETL之kettle kettle cdc mysql,轻松实现增量同步

1、之前kettle cdc mysql的时候使用的方案是canalkafkakettle&#xff0c;今天我们一起学习下使用kettle的插件Debezium直接cdc mysql。 注&#xff1a;CDC (Change Data Capture) 是一种技术&#xff0c;用于捕获和同步数据库中的更改。 1&#xff09;Debezium步骤解析mysql b…

鸿蒙轻内核Kconfig使用笔记

鸿蒙轻内核使用Kconfig进行图形化配置&#xff0c;本文专门讲解下鸿蒙轻内核LiteOS-M和LiteOS-A的图形化配置方法。本文中所涉及的源码&#xff0c;均可以在开源站点 https://gitee.com/openharmony/kernel_liteos_a 、 https://gitee.com/openharmony/kernel_liteos_m 获取。本…

Spring AI 接入OpenAI实现文字生成图片功能

Spring AI 框架集成的图片大模型 2022年出现的三款文生图的现象级产品&#xff0c;DALL-E、Stable Diffusion、Midjourney。 OpenAI dall-e-3dall-e-2 Auzre OpenAI dall-e-3dall-e-2 Stability stable-diffusion-v1-6 ZhiPuAI cogview-3 OpenAI 与 Auzer OpenAI 使用的图片…

【FreeRTOS】创建任务-声光色影

参考《FreeRTOS入门与工程实践(基于DshanMCU-103).pdf》 目录 1 基本概念2 任务创建与删除2.1 什么是任务2.2 创建分配内存2.2.1 动态任务2.2.1 静态分配内存 2.3 示例1: 创建任务2.3.1 声2.3.1.1 music.c2.3.1.2 music.h2.3.1.4 硬件接线 2.3.2 光2.3.3 色2.3.4 影 在本章中&a…

DC12V升压24V/5A电流 布控球产品应用 升压恒压SL4010耐压40V芯片

随着科技的不断发展&#xff0c;布控球作为一种高效、精准的安全监控设备&#xff0c;被广泛应用于公安、消防、交通等多个领域。然而&#xff0c;布控球在工作过程中需要稳定的电源供应&#xff0c;以保证其正常运行和长期稳定性。因此&#xff0c;一款性能优良的升压恒压芯片…

WindTerm使用SSH密钥连接阿里云实例,服务器设置SSH密钥登录

安装Windterm 地址https://github.com/kingToolbox/WindTerm/releases 下载完放到文件夹就可以打开 阿里云开启密钥对 打开阿里云ecs控制台 https://ecs.console.aliyun.com/keyPair/region/cn-wulanchabu 网络与安全->密钥对&#xff0c;创建密钥对&#xff0c;创建成…

《现代通信原理与技术》--数字信号的最佳接收实验报告

《现代通信原理与技术》 数字信号的最佳接收实验报告 实 验&#xff1a;数字信号的最佳接收实验报告 目录 摘要......................................................................................................3 引言........................................…

R语言绘制三变量分区地图

参考资料&#xff1a; https://mp.weixin.qq.com/s/5c7gpO2mJ2BqJevePJz3CQ tricolore包教程&#xff1a;https://github.com/jschoeley/tricolore 学习笔记&#xff1a;Ternary choropleth maps 1、测试实例 代码&#xff1a; library(ggplot2) library(rnaturalearthdata) …