kubernetes(k8s)集群部署(2)

news2024/11/8 18:28:37

目录

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)保证可以连接外网

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

3同步阿里云服务器时间(达到集群之间时间同步)
yum install ntpdate -y

ntpdate ntp1.aliyun.com

(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

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

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

(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

(4)关闭禁用swap分区

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

swapoff -a

sed -i '/swap/s/^/#/' /etc/fstab

查看是否关闭

free -h|grep -i swap

为什么要关闭swap分区?

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

 

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

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

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

注意:也是三台服务器都需要安装,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/docker

cat <<EOF>> /etc/docker/daemon.json
{
        "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
(4)启动并查看Docker版本
systemctl enable docker --now
docker -v

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

如果报错:

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

(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

(2)创建集群初始化配置文件
[root@master ~]# kubeadm config print init-defaults > kubeadm-config.yml
(3)配置集群初始化文件
[root@master ~]# vim kubeadm-config.yml
  advertiseAddress: 192.168.100.101

  name: master

imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers

(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

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

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

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

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

#在master主节点执行
mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

6.node节点加入集群

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

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

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

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

重新生成token

[root@master ~]# kubeadm token create

查看token

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

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

(2)查看节点是否加入成功
[root@master ~]# kubectl get nodes

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

显示镜像正在拉取

等十几分钟再次查看

这种现象就属于镜像没有拉取成功,正常的话应该显示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

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

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

(1)简单写一个nginx的yaml文件
[root@master ~]# vim nginx.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
nodePort: 30003
(2)创建nginx容器
[root@master ~]# kubectl apply -f nginx.yaml

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

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

(4)浏览器访问测试:

http://192.168.100.103:30003/

部署成功!!!!

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

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

相关文章

上心师傅的思路分享(三)--Nacos渗透

目录 1. 前言 2. Nacos 2.1 Nacos介绍 2.2 鹰图语法 2.3 fofa语法 2.3 漏洞列表 未授权API接口漏洞 3 环境搭建 3.1 方式一: 3.2 方式二: 3.3 访问方式 4. 工具监测 5. 漏洞复现 5.1 弱口令 5.2 未授权接口 5.3.1 用户信息 API 5.3.2 集群信息 API 5.3.3 配置…

前端开发部署:Visual Studio Code + vue

〇 说明 本教程全部采用默认安装路径&#xff0c;因为在进行自定义路径安装的时候&#xff0c;需要配置各种环境变量&#xff0c;在这个配置过程中&#xff0c;可能出现各种很混乱的问题。 一 安装Node.js 1 下载https://nodejs.org/en 2 按照默认NEXT执行 C:\Program Files…

flutter日历范围选择器

1.传入日期跨度&#xff0c;选择上架日期时&#xff0c;自动显示下架日期 2.手动选择上架日期和下架日期(图中下架日期自动填了只需CalendarDateRangePicker在initState方法中使用_startDate widget.initialStartDate; _endDate widget.initialEndDate;&#xff0c;而不直接…

史上最详细四叉树地图不同技术应用和代码详解

四叉树地图在计算机和机器人领域应用的很广&#xff0c;但是初学者可能会发现四叉树地图有各种不同的实现方式&#xff0c;很多在机器人领域不适用或是在计算机存储领域不适用。今天我就讲解下各类四叉树的实现方式和应用场景。 史上最详细四叉树地图不同技术应用和代码详解 本…

出现 Navicat 和 Cmd 下SQL 版本 | 查询不一致的解决方法

目录 1. 问题所示1.1 查询表格不一致1.2 版本不一致2. 原理分析3. 解决方法1. 问题所示 命令行和数据库使用工具出现不一致的情况,分别有如下情况 1.1 查询表格不一致 使用工具查询当地表格: 使用命令行查询当地表格: 1.2 版本不一致 在cmd命令下mysql --version 查询…

Vue3全局封装dialog弹框

Vue3全局封装modal弹框使用&#xff1a; 应用场景&#xff1a;全局动态form表单弹框 应用Vue3碎片&#xff1a; ref&#xff0c;reactive&#xff0c;app.component&#xff0c;defineExpose&#xff0c;defineProps&#xff0c;defineEmits 应用UI: element-plus dialog form …

【设计模式】结构型设计模式之 适配器模式

介绍 适配器模式&#xff08;Adapter Pattern&#xff09; 是一种结构型设计模式&#xff0c;它的核心目的是使接口不兼容的类能够协同工作。适配器模式通过将一个类的接口转换为客户希望的另一个接口&#xff0c;来解决两个已有接口之间不匹配的问题&#xff0c;从而增加它们…

【Vue】声明式导航-自定义类名(了解)

问题 router-link的两个高亮类名 太长了&#xff0c;我们希望能定制怎么办 解决方案 我们可以在创建路由对象时&#xff0c;额外配置两个配置项即可。 linkActiveClass和linkExactActiveClass const router new VueRouter({routes: [...],linkActiveClass: "类名1&quo…

微信小程序毕业设计-网吧在线选座系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

Hadoop 2.0:主流开源云架构(一)

目录 一、引例&#xff08;一&#xff09;问题概述&#xff08;二&#xff09;常规解决方案&#xff08;三&#xff09;分布式下的解决方案&#xff08;四&#xff09;小结 自从云计算的概念被提出&#xff0c;不断地有IT厂商推出自己的云计算平台&#xff0c;但它们都是商业性…

LeetCode | 997.找到小镇的法官

这道题拿到后很明显是一个图论的简单出度入度问题&#xff0c;法官的标志就是图中出度为0&#xff0c;入度为n-1的结点&#xff0c;而且根据题目条件&#xff0c;满足这一条件的结点有且只有一个 但是我不知道力扣中关于图论的邻接表和邻接矩阵这些数据结构是需要自己写还是已经…

shell编程(三)—— 控制语句

程序的运行除了顺序运行外&#xff0c;还可以通过控制语句来改变执行顺序。本文介绍bash的控制语句用法。 一、条件语句 Bash 中的条件语句让我们可以决定一个操作是否被执行。结果取决于一个包在[[ ]]里的表达式。 bash中的检测命令由[[]]包起来&#xff0c;用于检测一个条…

论文中eps格式图片制作

在提交论文终稿时&#xff0c;有时需要提交论文中图片的eps格式&#xff0c;这里记录一下eps格式图片制作的过程&#xff0c;方便以后查阅。 论文中eps格式图片制作 PPT绘制的图片转换为eps格式使用代码生成的图片Latex中显示的图片大小跟Ai中设定画板的大小不一致 PPT绘制的图…

品牌策划:不只是工作,是一场创意与学习的旅程

你是否认为只有那些经验丰富、手握无数成功案例的高手才能在品牌策划界崭露头角&#xff1f; 今天&#xff0c;我要悄悄告诉你一个行业内的秘密&#xff1a;在品牌策划的世界里&#xff0c;经验虽重要&#xff0c;但绝非唯一。 1️、无止境的学习欲望 品牌策划&#xff0c;这…

智能投顾:重塑金融理财市场,引领行业新潮流

一、引言 在数字化浪潮的推动下,金融行业正经历着前所未有的变革。其中,智能投顾作为金融科技的重要分支,以其高效、便捷和个性化的服务,逐渐成为金融理财市场的新宠。本文旨在探讨智能投顾如何引领金融理财新潮流,通过丰富的案例及解决方案,展示其独特的魅力和价值。 二…

Clearedge3d EdgeWise 5.8 强大的自动化建模软件

EdgeWise是功能强大的建模软件&#xff0c;提供领先的建模功能和先进的技术&#xff0c;让您的整个过程更快更准确&#xff01;您可以获得使用自动特征提取和对象识别的 3D 建模&#xff0c;ClearEdge3D 自动建模和对象识别软件通过创建竣工文档和施工验证完成该过程。拓普康和…

Go singlefight 源码详解|图解

写在前面 通俗的来说就是 singleflight 将相同的并发请求合并成一个请求&#xff0c;进而减少对下层服务的压力&#xff0c;通常用于解决缓存击穿的问题。 详解 基础结构 golang.org/x/sync/singleflight singleflight结构体&#xff1a; type call struct {wg sync.WaitGro…

永磁同步电机双矢量模型预测转矩控制MPTC

导读&#xff1a;本期文章主要介绍永磁同步电机双矢量模型预测转矩控制。由于传统直接转矩控制和单矢量的模型预测转矩控制转矩纹波较大&#xff0c;且在全速范围内的开关频率不固定&#xff0c;针对这一缺陷&#xff0c;引入双矢量MPTC。 如果需要文章中的仿真模型&#xff0…

AI生成个性化壁纸

使用天工AI 将图片设置成桌面壁纸

transformer 位置编码源码解读

import torch import mathdef get_positional_encoding(max_len, d_model):"""计算位置编码参数&#xff1a;max_len -- 序列的最大长度d_model -- 位置编码的维度返回&#xff1a;一个形状为 (max_len, d_model) 的位置编码张量"""positional_e…