Ubuntu22.04部署K8s集群

Ubuntu22.04部署K8s集群

  • 一、基础环境准备
    • 1.1 VMware Workstation Pro 17.0
    • 1.2 Ubuntu22.04
  • 二、系统环境配置
    • 2.1 设置Master与工作节点的机器名称及配置
    • 2.2 解析主机
    • 2.3 虚拟内存swap分区关闭
    • 2.4 开启IPv4转发
    • 2.5 设置时间同步
    • 2.6 开启防火墙的端口(可选)
  • 三、安装集群所需软件
    • 3.1 安装 docker
    • 3.2 安装 cri-dockerd 组件
    • 3.3 安装 Kubernetes
  • 四、单实例K8s集群部署
    • 4.1 Master节点初始化
    • 4.2 Worker节点加入集群
    • 4.3 安装网络插件flannel

一、基础环境准备

你好! 本文实验在Windows11安装的VMware Workstation Pro 17.0上,建立3台带Ubuntu22.04操作系统的虚拟机(master-100, k8s_worker1, k8s_worker2)为环境。

1.1 VMware Workstation Pro 17.0

官网下载:
https://www.vmware.com/cn/products/workstation-pro.html
有30天免费试用、度娘或者一键三连+评论我给你发许可证

1.2 Ubuntu22.04

https://ubuntu.com/download/desktop
虚拟机配置:2核CPU,4G内存,40G系统盘

安装步骤可以看我的另一篇文章


二、系统环境配置

2.1 设置Master与工作节点的机器名称及配置

##查ubuntu版本
lsb_release -a#IP地址和主机名称修改
hostname $hostname
sudo hostnamectl set-hostname master-100

如果在VMware新建虚拟机时设置好了,不设也没什么关系。名字也是由你自己改,改个不一样的就知道自己在干嘛了。

2.2 解析主机

sudo gedit /etc/hosts
#写入以下内容
192.168.159.129 master-100
192.168.159.130 k8s-worker1
192.168.159.131 k8s-worker2#或者,使用这种方式追加
cat >> /etc/hosts << EOF
192.168.159.129 master-100
192.168.159.130 k8s-worker1
192.168.159.131 k8s-worker2
EOF

记得换成自己机子IP地址和主机名

2.3 虚拟内存swap分区关闭

# 临时/永久关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
#检查
free -m

#这一步可能会影响kubeadm init,如果后面初始化失败了,可以再检查一下分区是否关闭。Swap total是0才对。

2.4 开启IPv4转发

sudo cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOFmodprobe overlay
modprobe br_netfiltersudo cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOFsudo sysctl --system

有什么作用?
开启这些设置使通过网桥的数据包由主机系统上的iptables规则处理,默认关闭,设置为1则开启

2.5 设置时间同步

sudo apt install -y chrony
sudo systemctl restart chrony
sudo systemctl status chrony
chronyc sources

chrony是一个开源自由的网络时间协议 NTP 的客户端和服务器软软件。它能让计算机保持系统时钟与时钟服务器(NTP)同步,因此让你的计算机保持精确的时间,chrony也可以作为服务端软件为其他计算机提供时间同步服务。

2.6 开启防火墙的端口(可选)

# kube-apiserver的安全端口6443
# 用于接收认证授权的HTTPS请求,对外服务
sudo ufw enable
sudo ufw allow 6443
sudo ufw status

enable做完需要重启ubuntu,建议先不做。
ubuntu的ufw默认是disable的,网上有教程直接关闭整个防火墙
我看到有教程说:关闭防火墙会在kubeadm过程中出现超时现象(但我没遇到)
如果enable了想要远程连接ssh,记得把22端口也allow一下


三、安装集群所需软件

上面初始化配置完成后,下面开始安装docker

3.1 安装 docker

#1.卸载旧版本(if need)
sudo apt-get remove docker docker-engine docker.io containerd runc#2.更新apt包索引并安装包以允许apt在HTTPS上使用存储库
sudo apt-get install -y \apt-transport-https \ca-certificates \
curl \gnupg-agent \software-properties-common#3.添加Docker官方GPG密钥 # -fsSL(apt-key list可以查看已安装的密钥)
curl https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -#4.设置稳定存储库
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \stable"#5.安装特定版本的Docker引擎,请在repo中列出可用的版本
apt-cache madison docker-ce#6.如果想要跟我的版本就在这一步装对应的,一般来说直接装最新的问题不大,遇到问题再解决
sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io#7.修改仓库镜像以及docker启动项---docker的cgroup在这里设置成了systemd
mkdir -vp /etc/docker/
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://reg-mirror.qiniu.com",
"https://registry.docker-cn.com"
],
"exec-opts": ["native.cgroupdriver=systemd"]
}#8.保存退出,更新设置
sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker#9.查看docker版本和状态
sudo docker version
sudo systemctl status docker

3.2 安装 cri-dockerd 组件

Docker 本身是一个容器运行时(Container Runtime),它负责管理容器的生命周期,包括创建、启动、停止和销毁等操作。然而,Docker 运行时在设计上并不符合 K8s 等容器编排工具的要求,因此需要使用 CRI (Container Runtime Interface) 来与容器编排工具进行交互。

组件地址:https://github.com/Mirantis/cri-dockerd/releases,下载本文对应的版本或者最新版本,虚拟机网络好的可以直接在系统里面下。或者主机下载好用winSCP传进去。
注意:Ubuntu应该下载deb包,CentOS是rpm包。

#1. 安装cri-dockerd
sudo dpkg -i cri-dockerd_0.3.4.3-0.ubuntu-jammy_amd64.deb
#2. 调整启动参数
sudo sed -i -e 's#ExecStart=.*#ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7#g' /lib/systemd/system/cri-docker.service

实验时两个worker从节点的cri-docker启动后日志一直都有输出报错,所以这个参数我查了很久很多资料,也有建议–network-plugin=可以先不写cni的,也没说原因…

#3. 设置开机自启动和查看cri-docker状态
sudo systemctl daemon-reload
sudo systemctl enable cri-dockersudo systemctl status cri-docker

报错提示:
使用sudo systemctl status cri-docker 查看状态的时候,不止要留意是否running,还要下面最新的输出日志有没有报错。
请添加图片描述
启动之后的此报错可能要把master的flanned复制过去,原因未知。
https://blog.csdn.net/qq_45323089/article/details/129626414

请添加图片描述

3.3 安装 Kubernetes

#1.安装依赖
sudo apt-get install -y apt-transport-https ca-certificates curl
#2.安装GPG密匙
#参考一
# 阿里云
# 下载 gpg 密钥   这个需要root用户否则会报错
sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - 
# 添加 k8s 镜像源 这个需要root用户否则会报错
sudo cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
# 华为云(和阿里云二选一)
# 下载 gpg 密钥(华为云)
curl http://mirrors.huaweicloud.com/kubernetes/yum/doc/apt-key.gpg | apt-key add -
# 添加 k8s 镜像源(华为云)
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://mirrors.huaweicloud.com/kubernetes/apt/ kubernetes-xenial main
EOF

记录一下:参考二这个是官网给的命令换成aliyun的,也是我参考教程里提供的,但是在第3步执行更新的时候会报错,说我的the public key is not available: NO_PUBKEY XXXXXXXX,然后我参考网上各种解决这个问题的办法尝试了都还是不行。主要也是看到官网给的命令格式就是这样的,完全没怀疑过是写进去的配置文件的内容有问题。后面我改了发现可以之后也很惊讶,可能是这个sign by的问题,也可能是没有完全按照官网给的命令。
官网手册链接:https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

#参考二
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg  https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpgsudo echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] http://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
#3. 更新软件源
sudo apt-get update#4. 查看Kubernetes可用版本
apt-cache madison kubeadm#5. 安装三件套
sudo apt-get install -y kubelet=1.27.0-00 kubeadm=1.27.0-00 kubectl=1.27.0-00
# Ubuntu使用不同的软件源,对软件版本的命名会有所不同,aliyun的源在结尾会有 -00下载对应版本的kubernetes组件#6. 标记软件包,防止自动更新
sudo apt-mark hold kubelet kubeadm kubectl#7. 配置kubelet
mkdir /etc/sysconfig
sudo gedit /etc/sysconfig/kubelet
#复制以下内容,保存退出
KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=/run/cri-dockerd.sock“#8. 启动kubelet
systemctl enable --now kubelet#9. 如果这个时候手贱想看一下kubelet的状态
systemctl status kubelet

结果显示如下:
3月 25 14:32:19 westwell systemd[1]: kubelet.service: Main process exited, code=exited, status=255/n/a
3月 25 14:32:19 westwell systemd[1]: kubelet.service: Unit entered failed state.
3月 25 14:32:19 westwell systemd[1]: kubelet.service: Failed with result ‘exit-code’.

经网上查阅,重新安装(或第一次安装)k8s,未经过kubeadm init 或者 kubeadm join后,kubelet会不断重启,这个是正常现象……,执行init或join后问题会自动解决,对此官网有如下描述,也就是此时不用理会kubelet.service。

“The kubelet is now restarting every few seconds, as it waits in a crashloop for kubeadm to tell it what to do. This crashloop is expected and normal, please proceed with the next step and the kubelet will start running normally.”

备注:journalctl -xefu kubelet 可查看systemd 日志查看具体报错信息。
参考链接:https://blog.csdn.net/u010420283/article/details/105095811


以上内容是所有节点都要执行的,下面的操作步骤会分master节点和Node节点


四、单实例K8s集群部署

4.1 Master节点初始化

#1. 查看初始化需要的镜像
sudo kubeadm config images list --image-repository registry.aliyuncs.com/google_containers#2. 拉取镜像
sudo kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers --cri-socket unix:///run/cri-dockerd.sock#3.初始化节点,注意endpoint要写你自己的master机子的IP
sudo su
sudo kubeadm init --control-plane-endpoint=192.168.159.129 --kubernetes-version=v1.27.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --token-ttl=0 --cri-socket unix:///run/cri-dockerd.sock --upload-certs --image-repository registry.aliyuncs.com/google_containers

一般有问题都集中在这一步了体现的
如果你init失败后想再尝试,需要reset一下,或者你把它报错说already的文件都删了再重启一下

kubeadm reset --cri-socket unix:///run/cri-dockerd.sock

报错提示:
kubernetes failed to create kubelet: misconfiguration: kubelet cgroup driver: “cgroupfs” is differen…

看下docker和k8s用的是不是同一个。前面安装docker有设置cgroups是systemd

kubelet修改方法:
方法一:修改下面的文件(我用的)

vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
#添加新字符串
#Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
#将 $KUBELET_CGROUP_ARGS 变量添加到 ExecStart 部分
#无论哪个方法改完记得重启
systemctl daemon-reload
systemctl restart kubelet

改好之后长这样,可以参考一下:
请添加图片描述
参考资料:https://www.javaroad.cn/questions/33906

方法二,我没试过

/etc/sysconfig/kubelet 文件中,修改 --cgroup-driver= 参数。
例如修改为 --cgroup-driver=systemd


还有你们遇到报错网上找资料的时候,要认真看下别人用的是不是cri-docker,还是用的containerd 作为CRI,自己用containerd的可以参考一下
https://www.cnblogs.com/wod-Y/p/17043985.html
http://tihar-tech.cn/?p=2675#qi_yongcontainerd_zuo_weiCRI


当你成功后,记住最后kubeadm join那条指令,后续用于node节点加入集群。

#4.配置环境变量,在su环境下
export KUBECONFIG=/etc/kubernetes/admin.conf
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#这个环境变量如果我没理解错是用来使用kubectl指令的,如果你要worker节点也可以用,就把admin.conf弄过去

还有一步是安装网络插件flannel或者一众你在网上搜到的,不过我经验之谈,最后再做,就是先把集群搭好。

#5.查看master节点状态,如果你没装flannel现在就是NotReady的状态
kubectl get nodes

4.2 Worker节点加入集群

#利用前面保存的命令加入集群
#末尾加上–cri-socket unix:///run/cri-dockerd.sock
kubeadm join 192.168.159.129:6443 --token 4pbkph.rlxyn0okw1x90k1v \--discovery-token-ca-cert-hash sha256:b61fdd230becdda0ead34d861e857836c91494a68fee00a24c6eca993767896a--cri-socket unix:///run/cri-dockerd.sock

如果你前面搞了那个admin.conf,不然就回master节点查,可以看到集群已经搭好,只是都是Not Ready的

kubectl get nodes

4.3 安装网络插件flannel

#这一步所有机子都要
wget https://github.com/flannel-io/flannel/releases/download/v0.20.1/flanneld-amd64
sudo mkdir /opt/bin
sudo cp flanneld-amd64 /opt/bin/flanneld
sudo chmod +x /opt/bin/flanneld
#这一步只需要主机执行
sudo kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml# 或者,建议分成几步做# 下载flannel插件的yml
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml# 修改kube-flannel.yml中的镜像仓库地址为国内源
sed -i 's/quay.io/quay-mirror.qiniu.com/g' kube-flannel.yml# 安装网络插件
kubectl apply -f kube-flannel.yml

如果发现执行的时候报错,可以配置一下hostname。

最后见证奇迹的时候,打完收工!可能要等几分钟,如果你等了5分钟以上都没好,恭喜你!可以到最下面找答案了

kubectl get nodes

请添加图片描述


常见错误:(网上整理的,有点旧了,可以参考一下,不保真)
https://blog.csdn.net/qq_34857250/article/details/82562514

  1. “command failed” err=“failed to load kubelet config file, error: failed to load Kubelet config file /var/lib/kubelet/config.yaml, error failed to read kubelet config file “/var/lib/kubelet/config.yaml”, error: open /var/lib/kubelet/config.yaml: no such file or directory, path: /var/lib/kubelet/config.yaml”
    解决办法:执行kubeadm init就会生成相应的配置文件

  2. Found multiple CRI endpoints on the host. Please define which one do you wish to use by setting the ‘criSocket’ field in the kubeadm configuration file: unix:///var/run/containerd/containerd.sock, unix:///var/run/cri-dockerd.sock
    To see the stack trace of this error execute with --v=5 or higher
    解决办法:加选项指定使用的CRI

  3. Error getting node" err=“node “k8s-master01” not found”
    解决办法:这种情况是apiserver-advertise-address地址有误
    kubeadm config print init-defaults > kubenetes-init-config
    vim kubenetes-init-config

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

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

相关文章

linux下 UART串口相关

RS232的串口设备在linux 上会被识别为 /dev/ttyS* 或者 ttymxc* 一、串口简介 操作串口我们一般通过以下指令&#xff1a; 1、查看串口波特率等信息&#xff1a; stty -F /dev/ttyS0 -a #ttyS0为要查看的串口 2、设置串口参数&#xff1a; stty -F /dev/ttyS0 ispeed 115…

微信小游戏个人开发者上架:从注册到上线的详细步骤

微信小游戏个人开发者上架&#xff1a;从注册到上线的详细步骤 一&#xff0c;注册小程序账号1.1 微信公众平台1.2 填写信息1.3 绑定管理 二&#xff0c;打包步骤2.1 工具准备2.2 关于Unity版本2.3 打包详解 三&#xff0c;提包步骤3.1 填写用户隐私3.2 完善开发者自查3.3 游戏…

5.string变量-读取一行

C里面的读一行的用法。getline&#xff08;cin,addr&#xff09;; 从标准输入设备cin&#xff0c;读取一行字符串保存到字符串变量addr中 如果用户直接回车什么都不读取就没有任何数据输入 读一行直到遇到回车符&#xff0c;注意不包括回车符。 判断字符串是不是空的 addr.em…

Cron 选择器

// 定义一个名为 cron 的新组件 Vue.component(cron, {name: cron,props: [data],data() {return {second: {cronEvery: ,incrementStart: 3,incrementIncrement: 5,rangeStart: ,rangeEnd: ,specificSpecific: [],},minute: {cronEvery: ,incrementStart: 3,incrementIncremen…

2023年一建学霸笔记

考点:单方取消或辞去委托承担的民事责任女《民法典》规定&#xff0c;因解除合同造成对方损失的&#xff0c;除不可归责于该当事人的事由外&#xff0c;无偿委托合同的解除方应当赔偿因解除时间不当造成的直接损失&#xff0c;有偿委托合同的解除方应当赔偿对方的直接损失和合同…

简单理解TCP,UDP,HTTP

我们都知道TCP、UDP、HTTP内部有很复杂的过程&#xff0c;很多人没办法理解的那么深&#xff0c;只想知道这是个什么鬼。 1、TCP、UDP、HTTP 是什么? TCP/IP是个协议组&#xff0c;可分为三个层次&#xff1a;网络层、传输层和应用层。在网络层有IP协议、ICMP协议、ARP协议、…

关于云服务器ECS、宝塔的安装配置以及图床的使用

一、阿里云服务器的申请以及宝塔的安装 安装配置服务器的原理&#xff1a; step1&#xff1a;地址栏输入阿里云服务器官网地址 step2&#xff1a;在首页依次点击以下内容&#xff1a; step3&#xff1a;选择立即购买&#xff0c;并填写以下内容&#xff1a; step4&#xff1a…

Postman和Jmeter做接口测试的区别

1. 用例组织方式 Jmeter的组织方式相对比较扁平&#xff0c;它首先没有WorkSpace的概念&#xff0c;直接是TestPlan&#xff0c;TestPlan下创建的Threads Group就相当于TestCase&#xff0c;并没有TestSuite的层级。 Postman功能上更简单&#xff0c;组织方式也更轻量级&#…

opencv 之 外接多边形(矩形、圆、三角形、椭圆、多边形)使用详解

opencv 之 外接多边形&#xff08;矩形、圆、三角形、椭圆、多边形&#xff09;使用详解 本文主要讲述opencv中的外接多边形的使用&#xff1a; 多边形近似外接矩形、最小外接矩形最小外接圆外接三角形椭圆拟合凸包 将重点讲述最小外接矩形的使用 1. API介绍 #多边形近似 v…

Redisson实现简单消息队列:优雅解决缓存清理冲突

在项目中&#xff0c;缓存是提高应用性能和响应速度的关键手段之一。然而&#xff0c;当多个模块在短时间内发布工单并且需要清理同一个接口的缓存时&#xff0c;容易引发缓存清理冲突&#xff0c;导致缓存失效的问题。为了解决这一难题&#xff0c;我们采用Redisson的消息队列…

带你体验stable discussion文生图,实现自己的真人写真工具

前言 Midjourney 由于精致的画图风格备受好评&#xff0c;但由于其网络环境以及会员费&#xff0c;导致入门门槛过高&#xff0c;拦住了很多对AIGC感兴趣的小伙伴。今天带大家体验一下最近很火的Stable Diffusion&#xff0c;满足大家的AI爱好,无需科学上网&#xff0c;本地部…

数据分析系统中的六边形战士——奥威BI系统

数据分析软件可以对收集的数据进行分析和报告&#xff0c;帮助企业获得更深入的数据洞察力&#xff0c;从而推动企业数字化运营决策&#xff0c;提高决策效率与质量。进入大数据时代&#xff0c;企业对数据分析软件的要求也在水涨船高&#xff0c;传统的数据分析软件显然已不能…

Git 学习笔记

Git 仓库中的提交记录保存的是你的目录下所有文件的快照&#xff0c;就像是把整个目录复制&#xff0c;然后再粘贴一样&#xff0c;但比复制粘贴优雅许多&#xff01; Git 希望提交记录尽可能地轻量&#xff0c;因此在你每次进行提交时&#xff0c;它并不会盲目地复制整个目录。…

华为盘古大模型:能源领域的颠覆性突破

近日&#xff0c;华为盘古大模型在能源领域横空出世&#xff0c;引发了广泛关注和期待。作为一项具有颠覆性影响的技术创新&#xff0c;华为盘古大模型在能源行业中展现出巨大的潜力和前景。其优质的计算能力和智能优化算法&#xff0c;将为能源产业带来翻天覆地的变革。 盘古大…

一篇文章搞定数据同步工具SeaTunnel

文章目录 前言第 1 章 Seatunnel 概述第 2 章 Seatunnel 安装和使用第 3 章 SeaTunnel 基本原理第 4章应用案例后记 前言 SeaTunnel安装包及代码&#xff1a; 链接: https://pan.baidu.com/s/1JvgAZpqoOPJ0ecfxUbLo4Q 提取码: pur8 –来自百度网盘超级会员v4的分享 第 1 章 …

成为一名数字IC后端工程师需要掌握哪些技能?(内附学习视频)

众所周知&#xff0c;数字后端设计是IC设计中必不可少的一个环节&#xff0c;数字后端工程师是将门级网表转换成标准的GDS文件&#xff0c;又称为设计实现或物理设计。正所谓前端保证功能正确&#xff0c;后端保证芯片的实现正确。 数字后端工程师是做什么的&#xff1f; 数字…

多线程(JavaEE初阶系列3)

目录 前言&#xff1a; 1.中断一个线程 2.等待一个线程-join() 2.1join()无参调用的使用 2.2join()有参调用的使用 3.线程的状态 3.1观察线程的所有状态 4.多线程带来的风险—线程安全 4.1观察线程不安全 4.2该问题出现的原因 4.3线程不安全问题的解决 4.3.1synchro…

解决JMeter+Grafana+influxdb 配置出现transaction无数据情形

问题描述 JMeterGrafanainfluxdb 配置时&#xff0c;Darren洋发现jmeter中明明已经配置好了事务条件以及接口实例信息&#xff0c;但就是在grafana的头部导航栏中的transaction按钮下来没有相应事务数据信息&#xff0c;经过相关资料查询&#xff0c;Darren洋发现执行以下两个步…

搭建基于Nginx+Keepalived的高可用web集群并实现监控告警

目录 搭建相关服务器DNS服务器配置WEB服务器配置配置静态IP编译安装nginx 负载均衡器配置lb1lb2高可用配置 NFS服务器配置配置静态IP安装软件包新建共享目录web服务器挂载 监控服务器配置安装node-exporter编写prometheus.yml安装alertmanager和钉钉插件获取机器人webhook编写a…

Python实战之数据挖掘详解

一、Python数据挖掘 1.1 数据挖掘是什么&#xff1f; 数据挖掘是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中&#xff0c;通过算法&#xff0c;找出其中的规律、知识、信息的过程。Python作为一门广泛应用的编程语言&#xff0c;拥有丰富的数据挖掘库&#…