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)保证可以连接外网
(2)关闭禁用防火墙和selinux
(3)同步阿里云服务器时间(达到集群之间时间同步)
yum install ntpdate -yntpdate 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 -ased -i '/swap/s/^/#/' /etc/fstab
查看是否关闭
free -h|grep -i swap
为什么要关闭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
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.ymladvertiseAddress: 192.168.100.101name: masterimageRepository: 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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo 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: 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
(4)浏览器访问测试:
http://192.168.100.103:30003/
部署成功!!!!
相关文章:

kubernetes(k8s)集群部署(2)
目录 k8s集群类型 k8s集群规划: 1.基础环境准备: (1)保证可以连接外网 (2)关闭禁用防火墙和selinux (3)同步阿里云服务器时间(达到集群之间时间同步) &…...

Git操作指南
1、提交代码操作 拉取线上分支,防止本地代码提交冲突 git pull origin dev git add . git commit -m “给本次提交添加注释” git push origin dev 2、打分支并切换分支 git checkout -b 新建并切换到新分支 切换到主分支 git checkout main git merge dev git p…...

全域推广和标准推广哪个更好。谁更容易获客?
随着全域概念的兴起,全域推广逐渐走进人们视野,并成为新的互联网热词。在此背景下,与全域推广相关的话题,如全域推广是什么及全域推广和标准推广的区别等成为了许多创业者讨论和搜索的对象。 所谓的全域推广,简单来说…...

首张地下地图!D-Wave 专用量子计算机助力沙特阿美完成地震成像
内容来源:量子前哨(ID:Qforepost) 文丨浪味仙 排版丨沛贤 深度好文:800字丨3分钟阅读 摘要:过去两年中,沙特阿美研究中心一直在使用总部在加拿大的D-Wave 公司的专用量子计算技术,…...

机器学习分类及算法
1. 深度学习 1.1学习算法 1.2基本术语和概念 1.3机器学习分类常用算法 1.3.1线性回归 1.3.2逻辑回归 1.3.3决策树 1.3.4朴素贝叶斯 1.3.5支持向量机SVM 1.3.6K-最近临邻KNN 还有K-均值(k-means)、随机森林、降维、人工神经网络等 1.4超参数和验证集 1.4.…...

电容器连接到 PCB 电源层的过孔配置
为什么我们需要去耦电容器? 时钟数字IC通常需要大的瞬态电源电流。例如,大型微处理器可以在很短的时间内消耗高达 10 A 的电流。随着 IC 输出的上升/下降时间缩短,我们需要以更高的速率提供瞬态能量。PCB 的电源和接地导体确实存在一定的电感…...

springboot+shiro+jwt 兼容session和token
最近和别的软件集成项目,需要提供给别人接口来进行数据传输,发现给他token后并不能访问我的接口,拿postman试了下还真是不行。检查代码发现项目的shiro配置是通过session会话来校验信息的 ,我之前一直是前后端自己写,用…...

CSS Display(显示)
CSS Display(显示) 概述 CSS(层叠样式表)中的display属性是控制元素如何显示的关键属性。它决定了元素的盒模型类型,即元素是块级元素、内联元素还是其他类型的元素。display属性对于网页布局和元素样式的控制至关重要。 基本用法 块级元…...

【PB案例学习笔记】-20制作一个超链接按钮
写在前面 这是PB案例学习笔记系列文章的第19篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上传到了gite…...

Django中使用下拉列表过滤HTML表格数据
在Django中,你可以使用下拉列表(即选择框)来过滤HTML表格中的数据。这通常涉及两个主要步骤:创建过滤表单和处理过滤逻辑。 创建过滤表单 首先,你需要创建一个表单,用于接收用户选择的过滤条件。这个表单可…...

Linux基础 (十五):TCP 协议特点和UDP协议
上一节,我们学习了TCP协议的服务器-客户端的编程流程以及对中间的过程进行了详细的讨论,那么,这一节,我们对于TCP协议的特点进行进一步的分析,这也是面试的重点和难点。 目录 一、TCP 协议特点 1.1 连接的建立与断…...

python替换word文件中的图片
python替换word文件中的图片 模拟鼠标键盘,截屏 import glob import os import timeimport pyautogui import pyautogui as p from PIL import ImageGrab from pynput.keyboard import Controller# -*- coding:utf-8 -*-directory ./directory1 ./outputfor f i…...

Servlet-01
文章目录 Servlet创建Servlet探究Servlet的生命周期 HttpServletWebServlet注解详解 重定向与请求转发ServletContextServletContext中的接口 HttpServletRequestHttpServletResponse状态码解释Cookie Servlet Q:它能做什么呢? A:我们可以通…...

C语言:链表
链表 介绍单向链表节点结构创建节点插入节点删除节点遍历链表尾部插入查找节点链表反转示例程序程序1程序2 介绍 链表是一种常见的数据结构,用于存储一系列线性数据。与数组不同,链表中的元素在内存中不必是连续存放的,而是通过指针将每个元…...

【git使用二】gitee远程仓库创建与本地git命令用法
目录 gitee介绍 管理者注册gitee账号 管理者在gitee网站上创建远程仓库 每个开发者安装git与基本配置 1.git的下载和安装 2.配置SSH公钥 3.开发者信息配置 git命令用法 gitee介绍 Gitee(又称码云)是一个基于Git的代码托管服务,由开源…...

明星百科大全PHP网站源码
源码介绍 明星百科大全网站源码,国内外明星娱乐音乐、新闻八卦、写真照片、相关影视作品等等的明星百科网站源码。 源码截图 源码下载 明星百科大全PHP网站源码...

白酒:茅台镇白酒的品鉴会与文化交流活动
茅台镇,这个位于中国贵州省的小镇,因其与众不同的自然环境和杰出的酿酒工艺而成为世界著名的白酒产区。云仓酒庄豪迈白酒作为茅台镇的品牌,积极参与各种品鉴会和文化交流活动,向世界展示了中国白酒的魅力和文化底蕴。 近年来&…...

python中列表结构在点云数据处理中用法
1、前言 Python中的列表(list)是一种可变的序列类型,用于存储集合数据。列表用途非常广泛,包括但不限于以下几个方面: 存储集合数据:列表用于存储一系列有序的元素,这些元素可以是任何数据类型&…...

土耳其(小亚细亚)历史上的各个阶段
一个国家的历史书写方式有两种,其一是按本国主体民族的渊源,其二是本国国土内发生的都属于本国史。一般来说,这两种方式相当程度上是重合的,但也有例外,比如本文要讲述的土耳其。 土耳其的国土并不辽阔,其…...

Windows下基于Frida查看内存基址和修改寄存器
使用Frida能够方便地获取到DLL基址,还能修改寄存器值。首先要通过任务管理器获得进程的PID,然后写Python脚本把Frida附加到这个PID进程,根据IDA分析出来的函数地址,HOOK到目标函数,修改寄存器的值,最终实现…...

2024中国网络安全产品用户调查报告(发布版)
自2020年始,人类进入了21世纪的第二个十年,全球进入了百年未有之大变局,新十年的开始即被新冠疫情逆转了全球化发展的历程,而至2022年3月俄乌战争又突然爆发,紧接着2023年7月“巴以冲突"皱起,世界快速…...

手写图片懒加载
参考来自前辈 Aidan路修远i 的文章面试官:请你手写一下!懒加载 - 掘金 (juejin.cn) Hello.vue <template><div><!-- src里面为空,data-original里面写图片真正的url(此处省略) --><img src"" data-origina…...

大型语言模型(LLMs)的后门攻击和防御技术
大型语言模型(LLMs)通过训练在大量文本语料库上,展示了在多种自然语言处理(NLP)应用中取得最先进性能的能力。与基础语言模型相比,LLMs在少样本学习和零样本学习场景中取得了显著的性能提升,这得…...

力扣2594.修车的最少时间
力扣2594.修车的最少时间 二分答案 class Solution {public:long long repairCars(vector<int>& ranks, int cars) {ranges::sort(ranks);auto check [&](long long x) -> bool{long long res 0;for(auto v : ranks){long long k sqrt(x/v);res k;if(r…...

攻防演练之-成功的钓鱼邮件溯源
书接上文,《网络安全攻防演练风云》专栏之攻防演练之-网络安全产品大巡礼二,这里。 演练第一天并没有太大的波澜,白天的时间过得很快。夜色降临,攻防演练中心内的灯光依旧明亮。对于网络安全团队来说,夜晚和白天并没有…...

Gi标签管理
文章目录 前言理解标签创建标签操作标签总结 前言 理解标签 标签,可以理解为对某次commit的一次标识,相当于起起了一个别名。 例如,在项目发布某个版本时候,针对最后一次commit起一个v1.0这样的标签来标识里程碑的意义。 这有什…...

2024福建等保测评公司有哪些?分别叫做什么名字?
2024福建等保测评公司有哪些?分别叫做什么名字? 【回答】:2024年具有资质的福建等保测评公司有6家,其名称以及地址如下: 1、福建省网络与信息安全测评中心,福州市鼓楼区东街8号利达大厦A座8层;…...

王先宏老师厉害了,活页笔记版古琴曲谱拆箱图
王先宏老师走心了,活页笔记版古琴曲谱拆箱图,简直是史上最好的古琴学习利器!送的防滑垫还带铝合金夹层的,养弦膏都是市面上没有的的。 这些古琴谱上的笔记就是老师课堂上用的,直接拿来就可以跟着弹,不用您…...

TalkingData 是一家专注于提供数据统计和分析解决方案的独立第三方数据智能服务平台
TalkingData 是一家专注于提供数据统计和分析解决方案的独立第三方数据智能服务平台。通过搜索结果,我们可以了解到 TalkingData 的一些关键特性和市场情况,并将其与同类型产品进行比较。 TalkingData 产品特性 数据统计与分析:提供专业的数…...

Springboot的小型超市商品展销系统-计算机毕业设计源码01635
摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作…...