网站建设流程咨询,世界500强企业排名表,怎样搭建电商平台,比价网站源码目录 k8s集群类型
k8s集群规划#xff1a;
1.基础环境准备#xff1a;
#xff08;1#xff09;保证可以连接外网
#xff08;2#xff09;关闭禁用防火墙和selinux
#xff08;3#xff09;同步阿里云服务器时间#xff08;达到集群之间时间同步#xff09; 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?pwdf36s 提取码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.cgroupdriversystemd]
}
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]
nameKubernetes
baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled1
gpgcheck1
repo_gpgcheck1
gpgkeyhttps://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-driversystemd /etc/sysconfig/kubelet
(4)设置kubelet开机自启
5.集群初始化
###master节点配置
(1)查看集群所需镜像文件
[rootmaster ~]# kubeadm config images list (2)创建集群初始化配置文件
[rootmaster ~]# kubeadm config print init-defaults kubeadm-config.yml
(3)配置集群初始化文件
[rootmaster ~]# vim kubeadm-config.ymladvertiseAddress: 192.168.100.101name: masterimageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers (4)集群初始化
[rootmaster ~]# kubeadm init --config kubeadm-config.yml --upload-certs
拉取镜像过程可能会有点长请耐心等待快慢取决于网速
选项说明 --upload-certs //初始化过程将生成证书并将其上传到etcd存储中避免证书被移动或者删除也不会影响集群。 ------------------------------------------------------------------------------- init初始化失败 注意如果初始化环境报错说明前面基础环境有问题请仔细检查如cpu2 内存2使用如下命令进行回退 [rootk8s-master ~]# kubeadm reset -f [rootk8s-master ~]# [rootk8s-master ~]# rm -rf /etc/kubernetes [rootk8s-master ~]# rm -rf /var/lib/etcd/ [rootk8s-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 [rootmaster ~]# kubeadm token create 查看token [rootmaster ~]# kubeadm token create --print-join-command ------------------------------------------------------------------------------------------------------------------- (2)查看节点是否加入成功
[rootmaster ~]# 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文件
[rootmaster ~]#
wget https://calico-v3-25.netlify.app/archive/v3.25/manifests/calico.yaml
(2)创建calico网络
[rootmaster ~]# kubectl apply -f calico.yaml
(3)查看calico的Pod状态
[rootmaster ~]# kubectl get pod -n kube-system
显示镜像正在拉取 等十几分钟再次查看 这种现象就属于镜像没有拉取成功正常的话应该显示Runing状态由于镜像在国外难免会出一些问题所以只能使用离线资源提前下载好的镜像了大家可以看我上一文档 离线部署Calico网络如果拉取不到可使用离线方式部署 k8s离线部署Calico网络2续-CSDN博客 -------------------------------------------------------------------------- 删除calico命令 [rootmaster ~]# kubectl delete pod 节点名称 -n kube-system 使用变量删除所有慎用 [rootmaster ~]# kubectl delete pod $(kubectl get pods -n kube-system|grep calico-node|awk {print $1}) -n kube-system ---------------------------------------------------------------------------------- (4)检查集群状态
[rootmaster ~]# kubectl get nodes 状态显示‘Ready’就说明集群没有问题可以使用了 8.验证使用k8s运行一个nginx容器
(1)简单写一个nginx的yaml文件
[rootmaster ~]# 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容器
[rootmaster ~]# kubectl apply -f nginx.yaml
(3)查看容器状态和映射端口
[rootmaster ~]# kubectl get pod,svc (4)浏览器访问测试
http://192.168.100.103:30003/ 部署成功