kubeadm搭建單master多node的k8s集群--小白文,圖文教程

參考文獻

K8S基礎知識與集群搭建
kubeadm搭建單master多node的k8s集群—主要參考這個博客,但是有坑,故貼出我自己的過程,坑會少很多
注意:

  • 集群配置是:一臺master:zabbixagent-k8smaster,兩臺node:k8snode1和k8snode2
  • 當沒有明說master機器做什么或者node機器做什么時,所有操作步驟默認是三臺機器都要進行配置
  • 操作系統:centos 7,且master的cpu要配置2核及以上,否則跑不動k8s!!!

1.環境準備

a.修改機器的ip地址并設置為靜態ip

  • vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=b841150d-bab6-4e52-802d-83c990f6b00f
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.0.50
NETMASK=255.255.255.0
GATEWAY=192.168.0.2
DNS1=192.168.0.2

上述代碼中主要設置:
BOOTPROTO=static
IPADDR=your ip
NETMASK=your netmask
GATEWAY=your gateway
DNS1=your dns

  • 修改后重啟生效:systemctl restart network

b.修改主機名

  • 修改主機名:hostnamectl set-hostname yournmae && bash
  • master IP:192.168.0.51
    在這里插入圖片描述
  • Node1 IP:192.168.0.52
    在這里插入圖片描述
  • Node2 IP:192.168.0.53
    在這里插入圖片描述

c.關閉selinux和關閉防火墻

  • 關閉selinux:
    • sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config
    • 重啟以生效:reboot
    • 使用getenforce查看selinux的狀態
      在這里插入圖片描述
  • 關閉防火墻
    • systemctl stop firewalld && systemctl disable firewalld

d.修改hosts?件

  • 目的:讓各個節點都能夠通過主機名訪問到其他節點。修改每個機器的/etc/hosts?件
  • 每臺機器執行以下命令:
echo '192.168.0.51 zabbixagent-k8smaster 
192.168.0.52 k8snode1 
192.168.0.53 k8snode2' >> /etc/hosts

其中ip地址及對應的主機名改為你自己對應的。

  • 查看修改后的hosts文件
    在這里插入圖片描述

e.機器上配置 yum 源

  • 刪除原有的yum源:rm -rf /etc/yum.repos.d/*.repo
  • 下載centos7的reposity(因為我的操作系統是centos):wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo (如果沒有wget,去 http://mirrors.aliyun.com/repo/ 下載CentOS-Base.repo,再上傳CentOS-Base.repo文件到/etc/yum.repos.d/目錄下)
  • 清楚緩存:yum clean all && yum makecache
  • 安裝lrzsz、scp、vim、wget、net-tools:yum install -y lrzsz scp vim wget net-tools yum-utils

f.配置國內 docker 的 repo、epel 源

  • 下載repo:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 下載epel源:wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  • 查看文件:ls /etc/yum.repos.d/
    在這里插入圖片描述

g.配置主機間免密登錄-命令按先后步驟執行(注意看本節每個字)

  • 目的:每臺機器設置免密登錄,因為k8s集群中的各個節點之間需要通過 ssh 進行通信
  • 生成密鑰:ssh-keygen(一路回車)–注意:下方圖片橫線處,如果沒有生成這個或者接下來的步驟執行不成功,再次執行“ssh-keygen”命令
    在這里插入圖片描述
  • 將本地生成的密鑰文件和私鑰文件拷貝到zabbixagent-k8smaster節點(此處是你自己的節點名字):ssh-copy-id zabbixagent-k8smaster --注意:下方圖片橫線處,需要輸入zabbixagent-k8smaster的密碼。
    在這里插入圖片描述
  • 將本地生成的密鑰文件和私鑰文件拷貝到k8snode1節點(此處是你自己的的節點):ssh-copy-id k8snode1 --注意:下方圖片橫線處,需要輸入k8snode1的密碼。
    在這里插入圖片描述
  • 將本地生成的密鑰文件和私鑰文件拷貝到k8snode2節點(此處是你自己的節點):ssh-copy-id k8snode2 --注意:下方圖片橫線處,需要輸入k8snode2的密碼。
    在這里插入圖片描述
  • 上面是在zabbixagent-k8smaster執行了“ssh-keygen、ssh-copy-id zabbixagent-k8smaster、ssh-copy-id k8snode1、ssh-copy-id k8snode2”,,這些命令還需要在k8snode1和k8snode2執行一遍

h.關閉 swap 分區

  • 目的:swap交換分區,在機器內存不夠時會使用,但是swap分區的性能較低,k8s設計時為了提升性能,默認不允許使用交換分區。kubeadm初始化的時候會檢查是否開啟了swap分區,如果開啟了,會報錯,所以需要關閉swap分區。如果不想關閉交換分區,可以使用–ignore-preflight-errors=Swap參數忽略檢查。
  • 在master節點上:vim /etc/fstab,然后注釋掉/dev/mapper…
    在這里插入圖片描述
  • 在兩個節點是上:vim /etc/fstab,需要注釋掉/dev/…和uuid
    在這里插入圖片描述

i.修改機器內核參數

  • 目的:k8s需要修改機器內核參數,使其支持路由轉發和橋接,否則會報錯
  • 三臺機器分別執?修改內核參數
  • vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1 
net.bridge.bridge-nf-call-iptables = 1 
net.ipv4.ip_forward = 1
  • modprobe br_netfilter
  • sysctl -p /etc/sysctl.d/k8s.conf
    在這里插入圖片描述

j.配置安裝k8s組件的yum源

  • vim /etc/yum.repos.d/kubernetes.repo
[kubernetes] 
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ 
enabled=1

k.配置時間同步

  • 目的:使ntpdate同步時間
  • 安裝ntpdate:yum install -y ntpdate
  • 與ntp服務器同步時間:ntpdate cn.pool.ntp.org
  • 將時間同步命令寫?:crontab -e
0 2 * * * /usr/sbin/ntpdate cn.pool.ntp.org
  • 重啟crontab服務:systemctl restart crond

m.開啟 ipvs

  • ipvs(IP Vertual Server):實現了傳輸層的負載均衡,是一種高性能、可擴展的負載均衡方案。
    • Linux內核的一部分,承擔著負載均衡的功能。
    • 通過ipvsadm工具來配置ipvs。
    • ipvs可基于TCP和UDP的服務請求轉發到真實服務器上
    • ipvs和iptables的區別:
      • ipvs是在傳輸層工作,iptables是在網絡層工作。
      • ipvs是基于內容的負載均衡,iptables是基于地址的負載均衡。
      • ipvs為大型集群提供了高性能的負載均衡,iptables為小型集群提供了負載均衡。
      • ipvs支持更多的負載均衡算法,iptables只支持輪詢算法。
      • ipvs支持服務器健康檢查、連接重試等功能,iptables不支持。
  • 準備ipvs.modules?件:vim /etc/sysconfig/modules/ipvs.modules
#!/bin/bash 
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack" 
for kernel_module in ${ipvs_modules}; do /sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1 if [ 0 -eq 0 ]; then /sbin/modprobe ${kernel_module} fi 
done
  • 修改ipvs.modules文件權限并執行
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs

在這里插入圖片描述

n.安裝基礎軟件包

yum install -y device-mapper-persistent-data lvm2 net-tools conntrack-tools wget nfs-utils telnet gcc gcc-c++ make cmake libxml2-devel openssl-devel curl-devel unzip sudo ntp libaio-devel ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet

o.安裝 iptables

  • iptables是Linux系統上常用的防火墻軟件,用于設置、審計和檢查IPv4和IPv6數據包過濾規則以及NAT表的工具。
  • 安裝iptables:yum install -y iptables-services
  • 禁?iptables:systemctl stop iptables && systemctl disable iptables
  • 清空防?墻規則:iptables -F

p.安裝docker

  • 安裝docker-ce和containerd:yum install -y docker-ce-20.10.6 docker-ce-cli-20.10.6 containerd.io
  • 啟動docker:systemctl enable docker && systemctl start docker

q.配置docker鏡像加速器

  • 創建配置?件:mkdir -p /etc/docker
  • 創建daemon.json?件:vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://rsbud4vc.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn", "https://registry.docker-cn.com", "http://hub-mirror.c.163.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}

在這里插入圖片描述

  • 加載配置、重啟docker:systemctl daemon-reload && systemctl restart docker

2.kubernetes集群部署

a.安裝初始化Kubernetes需要軟件包

  • kubeadm: 用于初始化集群的指令;kubelet: 運行在集群所有節點上,負責啟動 Pod 和容器等;kubectl: 用于與集群通信的命令行工具
  • 安裝kubeadm、kubelet、kubectl
yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6 --nogpgcheck
  • 開機啟動kubelet:systemctl enable kubelet
  • 下載k8s所需要的鏡像,并load到docker
    • k8simage-1-20-6.tar.gz下載鏈接:https://pan.baidu.com/s/1K4n61u8yM3sUciiQoKlMPg 提取碼:wjq9
    • docker load -i k8simage-1-20-6.tar.gz
      在這里插入圖片描述

b.使?kubeadm初始化k8s集群

  • 只在主節點(master)上執行此命。 注意:apiserver-advertise-address=your master IP
kubeadm init --kubernetes-version=v1.20.6 \
--apiserver-advertise-address=192.168.0.51 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/16 \
--ignore-preflight-errors=SystemVerification
上面命令行的含義:
--kubernetes-version 指定k8s版本
--apiserver-advertise-address 指定apiserver的地址
--image-repository 指定鏡像倉庫地址
--pod-network-cidr 指定pod網絡地址
--ignore-preflight-errors 忽略檢查

在這里插入圖片描述

c.配置kubectl的配置文件config

  • 目的:操作相當于對 kubectl 命令行工具進行初始化,使其能夠與 Kubernetes 集群通信
  • 只在主節點上執行下方命令
mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 查看集群狀態:kubectl get nodes(由于還沒有安裝網絡插件,所以下圖狀態是NotReady)
    在這里插入圖片描述
  • 只在主節點上生成配置文件并修改:kubeadm config print init-defaults > a.yaml
    • 修改a.yaml:vim a.yaml(下方代碼片中name: zabbixagent-k8smaster這處需要改為自己的master的名稱,然后就可以全部復制粘貼,將a.yaml替換)
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 10.104.26.192bindPort: 6443
nodeRegistration:criSocket: /var/run/dockershim.sockimagePullPolicy: IfNotPresentname: zabbixagent-k8smastertaints: null
---
apiServer:timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:local:dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.20.6
networking:dnsDomain: cluster.localpodSubnet: 10.244.0.0/16serviceSubnet: 10.96.0.0/12
scheduler: {}
  • 在三臺機器上都執行,修改containerd配置?件:
    • containerd config default > /etc/containerd/config.toml
    • vi /etc/containerd/config.toml
# 添加下?內容 
SystemdCgroup = true 
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"

在這里插入圖片描述

  • 三臺機器重啟運行時:systemctl restart containerd
  • 在主節點上,重新初始化主節點:kubeadm init --config a.yaml(如果此步驟報錯,可能的情況之一是:a.yaml中兩個apiVersion:應該改為kubeadm.k8s.io/v1beta2)
    在這里插入圖片描述
  • mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown ( i d ? u ) : (id -u): (id?u):(id -g) $HOME/.kube/config

d.擴容k8s集群-添加node節點

  • 目的:將另外兩臺節點加入到集群中
  • 兩臺node機器分別執行:
    • systemctl restart containerd
  • 然后在主節點執行:kubeadm token create --print-join-command(這一步是獲取node節點加入master所需的token等信息。)
  • 主節點打印出來的東西,復制到兩個node上執行,看下面這張圖
    在這里插入圖片描述
  • 在master上查看集群信息:kubectl get nodes
    在這里插入圖片描述
解釋: 
1.ROLES為<none>,說明這個節點時工作節點  
2. STATUS為NotReady,說明這個節點還沒有安裝網絡插件
  • 主節點上執行。將兩個節點的roles設置為workers:
    • kubectl label node k8snode1 node-role.kubernetes.io/worker=worker
    • kubectl label node k8snode2 node-role.kubernetes.io/worker=worker

在這里插入圖片描述

3.布置?絡插件

a.安裝?絡插件

  • 去https://github.com/hqs2212586/docker-study/blob/main/calico.yaml下載calico.yaml,然后上傳到master節點
  • master上執行,使用yaml文件安裝calico.yaml:kubectl apply -f calico.yaml
  • master執行,查看節點狀態:kubectl get nodes
    在這里插入圖片描述

b.測試在k8s創建pod是否可以正常訪問網絡

  • 在兩臺node節點拉取busybox:1.28鏡像:docker pull busybox:1.28
    ![[image-20231211185738265.png]]
  • 在主節點創建 pod:kubectl run busybox --image=busybox:1.28 --restart=Never --rm -it busybox – sh(當出現/ #時ping一個網址,能ping通說明網絡是通的)
    在這里插入圖片描述

c.測試k8s集群部署tomcat服務

  • 在兩個node節點 pull tomcat:docker pull tomcat:8.5-jre8-alpine
  • 在 master節點創建tomcat.yaml:vim tomcat.yml
apiVersion: v1  #pod屬于k8s核心組v1
kind: Pod  #創建的是一個Pod資源
metadata:  #元數據name: demo-pod  #pod名字namespace: default  #pod所屬的名稱空間labels:app: myapp  #pod具有的標簽env: dev      #pod具有的標簽
spec:containers:      #定義一個容器,容器是對象列表,下面可以有多個name- name:  tomcat-pod-java  #容器的名字ports:- containerPort: 8080image: tomcat:8.5-jre8-alpine   #容器使用的鏡像imagePullPolicy: IfNotPresent
  • 在 master節點創建pod:kubectl apply -f tomcat.yaml
    在這里插入圖片描述
  • 在 master節點創建tomcat-service.yml:vim tomcat-service.yaml
apiVersion: v1
kind: Service
metadata:name: tomcat
spec:type: NodePortports:- port: 8080nodePort: 30080selector:app: myappenv: dev
  • 在 master節點創建pod:kubectl apply -f tomcat-service.yaml
  • 查看服務狀態:kubectl get svc

在這里插入圖片描述

  • 訪問三臺機器ip加30080,看到Tomcat初始界面
    在這里插入圖片描述
    在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/214980.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/214980.shtml
英文地址,請注明出處:http://en.pswp.cn/news/214980.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++類和對象——(10)綜合示例

一、示例對象數組&#xff1a; #include<iostream> using namespace std;class Point{private:int x,y;public:Point(int px0,int py0){xpx;ypy;}void init(int px0,int py0){xpx;ypy;}void print(){cout<<"("<<x<<","<<y…

FFmpeg的AVInputFormat

文章目錄 結構體定義操作函數支持的AVOutputFormat 通過上面的分析&#xff0c;基本可以看到ffmpeg的套路了&#xff0c;首先一個context上下文&#xff0c;上下文里面一個priv_data 指針&#xff0c;然后再插件結構體中有一個priv_data_size&#xff0c;然后回調函數。 結構體…

JVM-GC調優-字節碼篇-01

筆記來源&#xff1a;JVM 注意&#xff1a;實在想學習可以看一下&#xff0c;讓自己更加了解JVM&#xff0c;看起來可能會枯燥。 JVM-概述 1、你的問題 1.1你被JVM傷害過嗎&#xff1f; 你是否也遇到過這些問題&#xff1f; 運行著的線上系統突然卡死&#xff0c;系統無法訪…

Flink SQL: 高效解析 Kafka 數據并存儲為 Parquet 至 HDFS

目錄 總體流程介紹 1. 從 Kafka 讀取數據 2. 使用 UDF 進行數據解析 3. 將

HTML中如何設置音頻和視頻?

文章目錄 &#x1f50a;嵌入音頻&#x1f39e;?嵌入視頻 &#x1f50a;嵌入音頻 HTML 元素用于在文檔中嵌入音頻內容。 元素可以包含一個或多個音頻資源&#xff0c; 這些音頻資源可以使用 src 屬性或者 元素來進行描述&#xff1a;瀏覽器將會選擇最合適的一個來使用。也可以使…

Centos7云服務器上安裝cobalt_strike_4.7。附cobalt_strike_4.7安裝包

環境這里是阿里的一臺Centos7系統。 開始安裝之前首先要確保自己安裝了java11及以上環境。 安裝java11步驟&#xff1a; sudo yum update sudo yum install java-11-openjdk-devel把服務器端&#xff08;CS工具分服務器端和客戶端&#xff09;的CS安裝到服務器上后給目錄下的…

Mongoose 對象文檔模型庫

一、介紹 Mongoose是一個對象文檔模型庫&#xff0c;官網&#xff1a;http://www.mongoosejs.net/ 二、作用 方便使用代碼操作Mongodb數據庫 三、使用流程 //1. 安裝 mongoose //2. 導入 mongoose const mongoose require(mongoose); //3. 連接數據庫 mongoose.connect(m…

某省資源交易中心 (js逆向)

該文章只是用于逆向學習&#xff0c;不得以商用或者是破壞他人利益的目的進行使用。如有侵權請聯系作者。 網站鏈接&#xff1a; bse64 aHR0cHM6Ly9nZ3p5ZncuZnVqaWFuLmdvdi5jbi9idXNpbmVzcy9saXN0Lw 分析環節 進入網站 進行翻頁請求時我們會發現改請求時ajax請求。 這里&…

hive-窗口函數

1 窗口函數語法 分析函數/專用窗口函數 over(partition by 列名 order by 列名 rows between 開始位置 and 結束位置) 常用的分析函數 常用的分析函數&#xff1a;sum()、max()、min()、avg()、count() 常用的專用窗口函數 專用窗口函數&#xff1a;row_number()、rank()、dens…

【簡易版】Linux下Protobuf 實現網絡版通訊錄--C++

一、介紹 該項目的主要目的是用于熟悉protobuf的使用&#xff0c;體驗數據在網絡中序列化反序列化的形式&#xff0c;并非一個完整的項目。 該通訊錄只實現了增加聯系人的功能。服務器端接收到請求后會將聯系人的信息打印。 二、環境搭建 使用Httplib庫&#xff0c;可以快速…

jsp文件引用的css修改后刷新不生效問題

問題 在對 JavaWeb 項目修改的過程中&#xff0c;發現修改了 jsp 文件引入的 css 文件的代碼后頁面的樣式沒有更新的問題。 原因 導致這個問題的原因可能是因為瀏覽器緩存的問題。 解決方法 下面介紹兩種解決方法&#xff0c;供大家參考&#xff1a; 1、給 link 標簽的 c…

TrustZone之安全虛擬化

在Armv7-A首次引入虛擬化時,它僅在非安全狀態中添加。在Armv8.3之前,Armv8也是如此,如下圖所示: 如前所述在切換安全狀態時,EL3用于托管固件和安全監視器。安全EL0/1托管受信任的執行環境(TEE),由受信任的服務和內核組成。 在安全狀態下,沒有對多個虛擬機的需…

Java基礎——什么是main方法

main方法是Java虛擬機調用的入口&#xff0c;該方法的權限必須是public&#xff0c;Java虛擬機在執行main方法時不必創建對象&#xff0c;所以該方法是static修飾&#xff0c;接收一個String類型的數組參數&#xff0c;數組保存執行Java命令時傳遞給所運行的類的參數&#xff0…

基于微信小程序和Spring、SpringMVC、MyBatis的汽車租賃管理系統

文章目錄 項目介紹主要功能截圖:部分代碼展示設計總結項目獲取方式?? 作者主頁:超級無敵暴龍戰士塔塔開 ?? 簡介:Java領域優質創作者??、 簡歷模板、學習資料、面試題庫【關注我,都給你】 ??文末獲取源碼聯系?? 項目介紹 基于微信小程序和Spring、SpringMVC、My…

Kafka生產問題總結及性能優化實踐

1、消息丟失情況 消息發送端&#xff1a; &#xff08;1&#xff09;acks0&#xff1a; 表示producer不需要等待任何broker確認收到消息的回復&#xff0c;就可以繼續發送下一條消息。性能最高&#xff0c;但是最容易丟消息。大數據統計報表場景&#xff0c;對性能要求很高&am…

JavaCV之rtmp推流(FLV和M3U8)

JavaCV與FFmpeg FFmpeg是一款開源的多媒體處理工具集&#xff0c;它包含了一系列用于處理音頻、視頻、字幕等多媒體數據的庫和工具。 JavaCV集成了FFmpeg庫&#xff0c;使得Java開發者可以使用FFmpeg的功能&#xff0c;比如視頻解碼、編碼、格式轉換等。 除了FFmpeg&#xff0…

LeetCode力扣每日一題(Java):35、搜索插入位置

一、題目 二、解題思路 1、我的思路&#xff08;又稱&#xff1a;論API的重要性&#xff09; 讀完題目之后&#xff0c;我心想這題目怎么看著這么眼熟&#xff1f;好像我之前學過的一個API呀&#xff01; 于是我回去翻了翻我之前寫的博客&#xff1a;小白備戰藍橋杯&#xf…

通用的AGI 安全風險

傳統安全風險 平臺基礎設施安全風險 模型與數據層安全風險 應用層安全風險 平臺基礎設施安全風險 &#xff08;1&#xff09;物理攻擊&#xff1a;機房管控不到位 &#xff08;2&#xff09;網絡攻擊 &#xff08;3&#xff09;計算環境&#xff1a;自身安全漏洞&#xf…

編輯器Sublime text 常用快捷命令 列模式 替換空行

平替notepad 下載可取官網 www.sublimetext.com 據說可以無限試用&#xff0c;沒有功能限制 1、快速刪除空行 ctrl h選擇正則表達式 .*Find輸入&#xff1a; ^(\t)*$\nReplace輸入&#xff1a;點擊Replace All 2、快速選擇指定字符 用鼠標選中alt f3修改 3、列編輯模式 ct…

如何理解HTML下的網頁結構?

HTML&#xff08;Hypertext Markup Language&#xff09;是一種標記語言&#xff0c;用于描述網頁的結構和內容。以下是對網頁結構的理解以及網絡爬蟲在處理不同類型網頁時可能遇到的情況&#xff1a; 1. HTML基本結構 HTML文檔的基本結構通常包括以下幾個部分&#xff1a; …