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 -y

ntpdate 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 -a

sed -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/docker

cat <<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.yml
  advertiseAddress: 192.168.100.101

  name: master

imageRepository: 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/.kube

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

sudo 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: 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

f552ca4c979444e5b4fcbb65e20fe0c1.png

(4)浏览器访问测试:

http://192.168.100.103:30003/

6d282ab0f5a44fe39ec28070efd2bf12.png

部署成功!!!!

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AXI 1G/2.5G Ethernet Subsystem IP核使用过程中参数配置全解

AXI 1G/2.5G Ethernet Subsystem 是一个为FPGA设计的以太网子系统&#xff0c;它支持1Gbps和2.5Gbps的数据传输速率&#xff0c;使得FPGA能够直接进行高速以太网通信。这个子系统通常包含以太网MAC控制器、GMII&#xff08;千兆媒体独立接口&#xff09;或RGMII&#xff08;简化…

[word] 怎么给word文档加密? #微信#笔记#微信

怎么给word文档加密&#xff1f; 怎么给word文档加密&#xff1f;工作中&#xff0c;需要对公司的机密文件加密处理&#xff0c;防止信息泄露&#xff0c;这些是基本的操作&#xff0c;保护文档的安全。相信还有不少伙伴不知道怎么样去设置&#xff0c;今天小Q给大家分享设置文…

喜讯 | 爱洁丽攸信技术uMOM制造运营系统项目启动会圆满成功!

2024年6月4日&#xff0c;厦门攸信信息技术有限公司&#xff08;以下简称“攸信技术”&#xff09;与福建爱洁丽日化有限公司&#xff08;以下简称“爱洁丽”&#xff09;uMOM制造运营系统项目启动会圆满成功 01合作客户介绍 Introduction of cooperative customers 福建爱洁…

天锐绿盾 |-设计、制造、研发部门核心文件资料、图档、源代码等数据防泄密系统

#天锐绿盾防泄密软件# 天锐绿盾是一款专为企业设计、制造、研发等部门定制的数据防泄密解决方案。它集成了多种安全技术和管理策略&#xff0c;旨在全方位保护企业的核心文件资料、设计图纸、图档以及软件源代码等敏感数据&#xff0c;防止数据泄露。 PC地址&#xff1a; htt…

Interview preparation--RabbitMQ

AMQP AMQP(Advanced Message Queueing protocol). 高级消息队列协议&#xff0c;是进程之间床底一步新消息的网络协议AMQP工作原理如下&#xff1a; 发布者&#xff08;Publisher&#xff09;发布消息&#xff08;Message&#xff09;经过交换机&#xff08;Exchange&#xff…

git服务器gitblit安装

1、下载 Gitblit 2、下载完后解压&#xff1a; 3、配制&#xff1a; 保存&#xff0c;退出编辑。 4、运行cmd&#xff0c;启用gitblit。 5、根据运行后的提示&#xff0c;也就是我们之间设置的port9990打开&#xff1a; 输入admin,admin就可以登录&#xff0c;这个账号密码&a…

数据可视化如何提升智慧展厅的展示效果

数据可视化是如何在智慧展厅中发挥作用的&#xff1f;随着科技的进步&#xff0c;智慧展厅成为展示信息、互动体验和传递品牌价值的前沿平台。数据可视化作为智慧展厅的重要组成部分&#xff0c;通过将复杂的数据转化为直观的图形、图表和互动界面&#xff0c;极大地提升了展厅…

GitHub工程获取第三方PR操作

GitHub工程获取第三方PR操作 1. 源由2. 获取第三方PRStep 1&#xff1a;安装ghStep 2&#xff1a;获取个人TokenStep 3&#xff1a;通过git协议获取代码Step 4&#xff1a;获取第三方PR分支 3. 总结 1. 源由 通常来说&#xff0c;GitHub上通常有三种场景&#xff1a; 工程管理…

PlantSimulation导入cad图作为背景

PlantSimulation导入cad图作为背景 首先要整理cad文件&#xff0c;正常的工艺规划总图中存在较多杂乱文件&#xff0c;这些信息是不需要的&#xff0c;如果直接导入&#xff0c;会非常卡。 1、打开cad软件&#xff0c;使用layon命令打开所有的隐藏图层&#xff0c;删除不需要…

kubeadm快速部署K8S

目录 一、kubeadm安装K8S 1.1 环境准备 1.2 初始化配置 1.3 所有节点安装docker 1.3.1 安装依赖环境和docker 1.3.2 定义docker 配置文件 1.3.3 重启并开机自启docker 1.3.4 查看docker 是否配置成功 1.4 master、node01 、node02安装kubeadm&#xff0c;kubelet和kub…

【机器学习300问】110、什么是Lasso回归模型?

LASSO回归的全称是Least Absolute Shrinkage and Selection Operator&#xff0c;中文叫“最小绝对收缩和选择算子”&#xff0c;用一个比喻来初步感受一下它的作用&#xff1a; 想象你在整理一个杂乱无章的房间&#xff0c;里面堆满了各种物品&#xff08;代表众多的预测变量&…

「动态规划」如何求粉刷房子的最少花费?

LCR 091. 粉刷房子https://leetcode.cn/problems/JEj789/description/ 假如有一排房子&#xff0c;共n个&#xff0c;每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种&#xff0c;你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。当然&#xff0c;因为市…

应急加固-网站入侵后应急流程

实验需求&#xff1a; bugku的在线实验平台&#xff0c;找到黑客入侵的方式&#xff0c;并确定黑客入侵的ip地址、首次webshell的密码、找到webshell并删除、找到黑客留下的后门中黑客服务器的ip及端口、删除定时任务和脚本、找到黑客添加的账号并删除、修复mysql的getshell漏…

远程咨询的好处都有哪些呢?

随着科技的飞速发展&#xff0c;远程咨询正逐渐成为人们获取医疗服务的一种新方式。那么什么是远程咨询呢&#xff1f;其又有哪些好处呢&#xff1f;下面就给大家详细地说说。 远程咨询的概念 远程咨询&#xff0c;顾名思义&#xff0c;是指通过互联网技术&#xff0c;实现患…

网络安全技术实验一 信息收集和漏洞扫描

一、实验目的和要求 了解信息搜集和漏洞扫描的一般步骤&#xff0c;利用Nmap等工具进行信息搜集并进行综合分析&#xff1b;掌握TCP全连接扫描、TCP SYN扫描的原理,利用Scapy编写网络应用程序&#xff0c;开发端口扫描功能模块&#xff1b;使用漏洞扫描工具发现漏洞并进行渗透测…

Java使用XWPFTemplate将word填充数据,并转pdf

poi-tl poi-tl&#xff08;poi template language&#xff09;是基于Apache POI的Word模板引擎。纯Java组件&#xff0c;跨平台&#xff0c;代码短小精悍&#xff0c;通过插件机制使其具有高度扩展性。 主要处理区域有这么几个模块: 依赖 <dependency><groupId>…

CentOS Stream 9 磁盘扩容

当Linux系统磁盘被占满且资料无法删除&#xff0c;需要新添加磁盘&#xff0c;并将新磁盘扩容到相应的满载磁盘中 查看现有磁盘分区 [rootwcg-lvm-001 ~]# fdisk -l Disk /dev/sda&#xff1a;180 GiB&#xff0c;193273528320 字节&#xff0c;377487360 个扇区 磁盘型号&am…

MySQL—多表查询—小结

一、引言 前面的博客已经全部学习完了关于多表查询。接下来对多表查询进行一个小结。 &#xff08;1&#xff09;多表查询主要是讲了两个方面 多表关系 &#xff08;不管业务关系如何的复杂&#xff0c;最终多表的关系基本上可以分为三类&#xff09; "一对多"、&qu…

【解读】核密度图

def&#xff1a;what 核密度估计&#xff08;Kernel Density Estimation&#xff0c;简称KDE&#xff09;是一种用来估计随机变量概率密度函数的非参数方法 实现&#xff1a;&#xff08;库函数&#xff09;how import seaborn as sns import matplotlib.pyplot as plt# 使用…

[手游] 三色绘恋S Mobile Link

语音合成TTS: 文字转成语音的工具 WPS免登录一键修改器: 去除烦人的登录且能正常使用 故事简介&#xff1a; 深秋的雨季即将到来&#xff0c;正值那个为人所熟知的故事发生的前一年—— 地点&#xff1a;湖北省的重点高中&#xff0c;武汉师贰高校。 新学年开始&#xff0c;各…