kubernets集群的安裝-node節點安裝-(簡單可用)-超詳細

一、kubernetes

1、簡介

kubernetes,簡稱K8s(庫伯內特),是用8代替名字中間的8個字符“ubernete”而成的縮寫

云計算的三種主要服務模式——基礎設施即服務(IaaS)、平臺即服務(PaaS)和軟件即服務(SaaS)

Kubernetes是一個應用于大規模部署你分布式應用的平臺,它管理著一系列的主機或服務器(Node節點),節點中最小單元Pod

  • Kubernetes 是一個可移植的、可擴展的開源平臺,用于管理容器化的工作負載和服務,可促進聲明式配置和自動化。Kubernetes 擁有一個龐大且快速增長的生態系統。Kubernetes 的服務、支持和工具廣泛可用。
  • Kubernetes 這個名字源于希臘語,意為“舵手”“飛行員”。k8s 這個縮寫是因為 k 和 s 之間有八個字符的關系。 Google 在 2014 年開源了 Kubernetes 項目。Kubernetes 建立在Google 在大規模運行生產工作負載方面擁有十幾年的經驗的基礎上,結合了社區中最好的想法和實踐

官網地址:https://kubernetes.io/

為什么使用K8s
  • 容器是打包和運行應用程序的最佳方式,在生產環境中,我們需要管理運行應用程序的容器,并且確保這些容器不會停機。如果一個容器發生了故障,則需要手動啟動另一個容器,太麻煩了;如果有一個系統能夠幫助我們處理這些行為,是不是會很方便?

  • Kubernetes 就能解決上面提出的一系列的問題。Kubernetes 為我們提供了一個可彈性運行的分布式系統的框架,Kubernetes 可以滿足我們的擴展要求、故障轉移、部署模式等,如:Kubernetes 可以輕松管理系統的 Canary(金絲雀) 部署。

  • Kubernetes 為我們提供下面的功能:
  • 服務發現和負載均衡:Kubernetes 可以使用 DNS 名稱或自己的 IP 地址公開容器,如果進入容器的流量很大,Kubernetes 可以負載均衡并分配網絡流量,從而使得部署穩定。

  • 存儲編排:Kubernetes 允許我們自動掛載自己選擇的存儲系統,如:本地存儲、公有云提供商等。

  • 自動部署和回滾:我們可以使用 Kubernetes 描述已部署容器的所需狀態,Kubernetes 可以以受控的速率將實際狀態更改為期望狀態,如:我們可以自動化 Kubernetes 來為我們的部署創建新的容器,刪除現有容器并將它們的所有資源用于新的容器。

  • 自動完成裝箱計算:Kubernetes 允許我們指定每個容器所需要的 CPU 和內存(RAM)。當容器指定了資源請求時,Kubernetes 可以做出更好的決策來管理容器的資源。

  • 自我修復:Kubernetes 重新啟動失敗的容器、替換容器、殺死不響應用戶定義的運行狀況檢查的容器,并且在準備好服務之前不將其通告給客戶端。

  • 密鑰和配置管理:Kubernetes 允許我們存儲和管理敏感信息,如:密碼、OAuth2 令牌和 SSH 密鑰。我們可以在不重建容器鏡像的情況下部署和更新密鑰和應用程序配置,也無需再堆棧配置中暴露密鑰。

2、Kubernetes的特點:
1、自我修復在節點故障時重新啟動失敗的容器,替換和重新部署,保證預期的副本數量;殺死健康檢查失敗的容器,并且在未準備好之前不會處理客戶端的請求,確保線上服務不中斷。2、彈性收縮使用命令、UI 或者基于 CPU 使用情況自動快速擴容和縮容應用程序實例,保證應用業務高峰并發時的高可用性;業務低峰時回收資源,以最小成本運行服務。3、自動部署和回滾采用滾動更新策略更新應用,一次更新一個 Pod,而不是同時刪除所有 Pod,如果更新過程中出現問題,將回滾更改,確保升級升級過程中不影響業務運行4、服務發現和負載均衡能夠為多個容器提供統一訪問入庫(內部 IP 地址和一個 DNS 名稱),并且負載均衡關聯所有容器,使用戶無需考慮容器 IP 的問題5、存儲編排能夠掛載外部存儲系統,無論是來自本地存儲,公有云(如:AWS),還是網絡存儲(如:NFS、ClusterFS、Ceph)都可以作為集群資源的一部分使用,極大提供存儲使用的靈活
3、K8S集群原理

在這里插入圖片描述

  • Master 節點(Control Plane【控制面板】):Master 節點控制整個集群。
    • Controller Manager:控制管理器。
    • etcd:鍵值數據庫,類似于 Redis。
    • scheduler:調度器。
    • api-server:api網關(所有的控制都需要通過api-server)。
  • Node 節點(worker工作節點):
    • kubelet(監工):每一個 Node 節點上必須安裝的組件,負責交互 master 的 api-server 以及當前機器的應用啟停等,在 master 機器就是 master 的小助手。每一臺機器真正干活的都是這個 Kubelet 。
    • kube-proxy:代理網絡。
  • Pod:
    • docker run 啟動的是一個 container(容器),容器是 Docker 的基本單位,一個應用就是一個容器。
    • kubectl run 啟動的是一個應用稱為一個 Pod ,Pod 是 Kubernetes 的基本單位。
      • Pod 是對容器的再一次封裝。
      • Pod 類似于 Java 日志體系中的 Slf4j ,而 Docker 中的容器類似于 Java 日志體系中的 Logback 等日志實現。
      • 一個容器往往代表不了一個基本應用,如:博客系統(WordPress,PHP + MySQL);但是一個 Pod 可以包含多個 Container,一個 Pod 可以代表一個基本的應用。
4、主控節點 / Master 組件
kubectl: 命令行工具
Dashboard: 可視化界面
api-server:  接口服務,給予REST風格開放,K8S接口的服務,集群統一入口,各組件的協調者,提供認證、授權、訪問控制、API注冊和發現等機制,以 RESTful API 的方式提供接口服務,所有對象資源的增刪改查和監聽都由 API Server 處理后提交給 Etcd 存儲。
controller-manager:控制器管理器,負責各個類型的控制器針對k8S 中的各種資源進行管理,控制器管理程序,負責控制器的管理,控制器和資源一一對應,控制器用于維護集群的狀態,如:故障檢測、自動擴展、滾動更新等常規后臺任務。
cloud-controller-manager: 云控制器管理器,第三方云平臺提供控制API對接管理功能
kube-scheduler: 調度程序,負責資源的調度,按照預定的調度策略將 Pod 調度到相應的機器上,調度程序根據調度算法為新創建的 Pod 選擇一個 Node 節點,可以任意部署,可以部署在同一個節點上,也可以部署在不同的節點上Etcd Cluster:分布式鍵值存儲系統集群,用于保存集群狀態數據,如:Pod、Service 等資源對象信息。
5、工作節點 / Node 組件
1)Kubelet:主控節點代理程序,在 Node 節點上執行 Master 節點安排的任務,它將每個 Pod 轉換成一組容器,用于管理本節點運行容器的生命周期,如:創建容器、Pod 掛載數據卷、下載 Secret 、獲取容器和節點狀態等工作。2)Kube-Proxy:網絡代理程序,在 Node 節點上實現 Pod 網絡代理,負責為 Service 提供 Cluster 內部的服務發現、網絡規劃和負載均衡。3)container-runtime:  Docker容器引擎,負責所有具體的映像下載和容器運行、containerd、CRI-O4)Pod:  容器1 容器2  
7、第三方插件
1)Flannel Finnal 是一個為 K8s 原生集成的三層網絡解決方案,主要用于解決容器之間的網絡(CNI 網絡)通信問題,Flannel 為每個 Node 工作節點分配獨立的子網網段,并將所有的網絡信息存儲在 Etcd 數據庫中。脫離 CNI 網絡的 K8s 集群是無法工作的,因此在部署 K8s 集群時必須部署 Flannel 插件。2)CoreDN SCoreDNS 是一個為 K8s 原生集成的域名發現解決方案,主要用于將 K8s 服務的動態 IP 地址自動映射成為 "<service-name>:<service-namespace>" 規則的 DNS 域名。因 K8s 在創建服務時會分配動態的 IP 地址,因此當在【B 容器 】中使用【A 容器】發布的服務,因為【A 容器】的服務對應的 IP 是動態可變的,所以應當通過該服務對應的 DNS 獲取,例如:"htp(s)://:"。3)Dashboard Dashboard 是一個為 K8s 原生集成的用戶界面,主要用于 K8s 的可視化管理。使用 Dashboard 可以監控、管理 K8s 集群和集群中的各類資源(如 Deployment,Job,DaemonSet 等等),還可以完成對 Deployment 實現彈性伸縮、發起滾動升級、重啟 Pod 或者使用向導創建新應用等管理行為。4)Ingress-Nginx Ingress-Nginx 是一個為 K8s 原生集成的服務網關,主要用于對集群中的服務(通常是 Http 或 Https 服務)的外部訪問的 API 對象,以及提供負載平衡、SSL 終端和基于名稱的虛擬主機

在這里插入圖片描述

8、應用場景

K8s 主要應用于云架構和云原生的部署場景。

“云” 是使用容器構建的一套服務集群網絡,它由很多的容器構成;

“K8s” 則是用來管理云中的容器平臺工具

1、云架構
PaaS(平臺即服務): 運營商提供 MySQL 、Redis、MQ、Elasticsearch 等數據庫或中間件等服務;用戶租用(購買或分配權限)后直接使用。
SaaS(軟件即服務):運營商提供應用系統的部署和發布等服務;用戶租用(購買或分配權限)后直接使用
2、云原生
為了讓應用程序(項目,服務軟件)都運行在云上的解決方案,這樣方案叫做云原生,有以下特點:容器化:所有的服務都必須部署在容器中;微服務:Web 服務架構是微服務架構;CI/CD:可持續交互和可持續部署;DevOps:開發和運維密不可分

二、K8s環境安裝

一、前期準備

K8s-master01 k8s-node1 k8s-node02

kubernetes 版本: 1.23.6

Docker版本:20+
在這里插入圖片描述

k8s: 1.23.6

docker官網版本:20.10.0 https://docs.docker.com/engine/release-notes/20.10/

清華云:docker下載離線版本https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/static/stable/x86_64/

  1. ?官方推薦的Docker版本?:
  • 根據Kubernetes官方文檔和相關可靠資源,以下是一些常見Kubernetes版本推薦的Docker版本:

    • Kubernetes 1.13 到 1.19:推薦使用Docker 1.13.1 到 19.03.x版本。
    • Kubernetes 1.20:推薦使用Docker 1.13.1 到 19.03.x版本,但Kubernetes官方開始逐步廢棄對Docker作為容器運行時的直接支持。
    • Kubernetes 1.21 到 1.22:推薦使用Docker 1.19.3 到 20.10.x版本。
    • Kubernetes 1.23及以上版本:建議使用符合容器運行時接口(CRI)的運行時,如containerd或CRI-O,不再支持Docker作為容器運行時。
    2.注意事項?:
  • 從Kubernetes 1.20開始,Kubernetes官方逐步廢棄了對Docker作為容器運行時的直接支持。對于Kubernetes 1.23及更高版本,kubeadm默認使用containerd作為容器運行時,不再支持Docker。

  • 如果你的集群仍在使用Docker作為容器運行時,建議盡快遷移到CRI兼容的運行時,以確保與Kubernetes的兼容性。

在這里插入圖片描述

K8S-master01:

centos7、2CPU、4G 內存、40G存儲空間(將虛擬機磁盤存儲為單個文件)、NAT模式、帶GUI服務器安裝、打開網卡

K8S-node01:

centos7、2G 內存、40G存儲空間(將虛擬機磁盤存儲為單個文件)、NAT模式、帶GUI服務器安裝、打開網卡

K8S-node02:

centos7、2G 內存、40G存儲空間(將虛擬機磁盤存儲為單個文件)、NAT模式、帶GUI服務器安裝、打開網卡

最終目標
在所有節點上安裝Docker 和kubeadm  
部署Kubernetes Master  
部署容器網絡插件  
部署Kubernetes Node,將節點加入Kubernetes 集群中  
部署Dashboard Web 頁面,可視化查看Kubernetes 資源
二、虛擬機安裝完畢進入linux操作系統-所有的節點及master配置

現在centos7不支持更新了換yum源,更新阿里云yum源

[root@localhost ~]# rm -rf /etc/yum.repos.d/*
[root@localhost ~]# wget  -O   /etc/yum.repos.d/CentOS-Base.repo  http://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost ~]# wget  -O   /etc/yum.repos.d/epel.repo  http://mirrors.aliyun.com/repo/epel-7.repo
[root@localhost ~]# wget  -O  /etc/yum.repos.d/docker-ce.repo   https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
[root@localhost ~]# yum repolist -v
1、最小安裝沒有ifconfig命令:  yum  search   ifconfig提示包名為: net-tools.x86_64使用yum安裝:  yum -y  install  net-tools.x86_64沒有vim命令:  yum  -y install  vim*             
2、關閉防火墻[root@localhost ~]# systemctl stop firewalld[root@localhost ~]# systemctl disable firewalld3、關閉SELINUX:[root@k8smaster ~]#  vi  /etc/selinux/configSELINUX=disabled4、關閉swap:
[root@k8smaster ~]#  swapoff  -a 
[root@k8smaster ~]#   vim  /etc/fstab  關閉swap那行 ##/dev/mapper/centos-swap swap  swap分區指的是虛擬內存分區,它的作用是在物理內存使用完之后,將磁盤空間虛擬成內存來使用啟用swap設備會對系統的性能產生非常負面的影響,因此kubernetes要求每個節點都要禁用swap設備但是如果因為某些原因確實不能關閉swap分區,就需要在集群安裝過程中通過明確的參數進行配置說明 5、設置主機名   
[root@k8s-master ~]# hostnamectl  set-hostname  k8s-master
[root@k8s-node01 ~]# hostnamectl  set-hostname  k8s-node01[root@k8smaster ~]#  vim  /etc/hosts192.168.110.140  k8s-master192.168.110.141  k8s-node016、將橋接的IPv4流量傳遞到iptables的鏈
[root@k8smaster ~]#   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
[root@k8smaster ~]#   sysctl --system   #生效7、設置時間同步
[root@k8smaster ~]#  yum  -y install   ntpdate    
[root@k8smaster ~]# ntpdate time.windows.com   #測試命令
22 Jun 18:56:53 ntpdate[8157]: adjust time server 20.189.79.72 offset -0.006902 sec  
2、安裝Docker
[root@k8s-master ~]#yum -y install docker-ce-20.10.16 docker-ce-cli-20.10.16 containerd.io  
[root@k8s-node01 ~]#yum -y install docker-ce-20.10.16 docker-ce-cli-20.10.16 containerd.io 
#啟動服務及設置開機自啟
[root@k8s-master ~]# systemctl start docker containerd
[root@k8s-master ~]# systemctl enable docker  containerd
添加鏡像加速器
cat > /etc/docker/daemon.json << EOF
{"dns": ["8.8.8.8", "8.8.4.4"],"insecure-registries":["192.168.200.15"],"registry-mirrors": ["https://docker.1ms.run","https://hub.mirrorify.net","https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://mirror.baidubce.com"]
}
EOF
[root@k8s-master ~]# systemctl daemon-reload
[root@k8s-master ~]# systemctl restart docker containerd
3、安裝k8s-配置repo文件
[root@k8s-master ~]# vim /etc/yum.repos.d/k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
4、安裝kubeadm kubele 和 kubectl

注意: master 和node節點都裝

[root@k8s-master ~]#yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
[root@k8s-node01 ~]#yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
#啟動服務
[root@k8s-master ~]# systemctl start kubelet
[root@k8s-master ~]# systemctl enable kubelet
5、修改containerd源
# 生成 containerd 的默認配置文件
[root@k8s-master ~]# containerd config default > /etc/containerd/config.toml
[root@k8s-master ~]#  vim /etc/containerd/config.tomlsandbox_image = "registry.k8s.io/pause:3.6"#修改為:sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"[root@k8s-master ~]# systemctl daemon-reload
[root@k8s-master ~]# systemctl restart docker containerd
6、master配置初始化
kubeadm init  --apiserver-advertise-address=192.168.110.140 --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=v1.23.6   --service-cidr=10.96.0.0/16  --pod-network-cidr=10.244.0.0/16#參數說明
-–apiserver-advertise-address:通告偵聽地址
–-image-repository:指定鏡像地址使用阿里云的,默認會使用谷歌鏡像
–-kubernetes-version:指定當前的kubernetes的版本
–-pod-network-cidr=10.244.0.0/16:flannel網絡的固定地址范圍
[root@k8s-master ~]# kubeadm  reset 重置
常見的錯誤1

在這里插入圖片描述

解決辦法:加速器配置文件
[root@k8s-master ~]# vim /etc/docker/daemon.json
"exec-opts": ["native.cgroupdriver=systemd"]
[root@k8s-node01 ~]# systemctl daemon-reload
[root@k8s-node01 ~]# systemctl restart docker
解決錯誤之后,重置了初始化命令
[root@k8s-master ~]# kubeadm  reset 重置
繼續執行如下命令
kubeadm init  --apiserver-advertise-address=192.168.110.140 --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=v1.23.6   --service-cidr=10.96.0.0/16  --pod-network-cidr=10.244.0.0/16
如何執行正常的界面如下

pod節點需要加入時,執行提示命令:

kubeadm join 192.168.110.140:6443 --token 1hft5e.vb1xncstdogsk4ay \--discovery-token-ca-cert-hash sha256:a5d9376d48397caf6ed1f9daf59d51a41cfe012d0e85b15e5eb158c312cba49a

在這里插入圖片描述

7、使用kubectl工具
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf  $HOME/.kube/config
[root@k8s-master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
[root@k8s-master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
[root@k8s-master ~]# kubectl get node
NAME         STATUS     ROLES                  AGE   VERSION
k8s-master   NotReady   control-plane,master   31m   v1.23.6
8、node節點加入kubernetes
[root@k8s-node01 ~]# kubeadm join 192.168.110.140:6443 --token 1hft5e.vb1xncstdogsk4ay \--discovery-token-ca-cert-hash sha256:a5d9376d48397caf6ed1f9daf59d51a41cfe012d0e85b15e5eb158c312cba49a
常見錯誤2:端口被占用了

在這里插入圖片描述

[root@k8s-node01 ~]# kubeadm   reset    #重置,根據提示輸入y
9、網絡插件的安裝

CNI(Container Network Interface)是 Kubernetes 集群的網絡模型,用于定義容器與容器之間的通信方式。在部署 CNI 網絡組件之前,需要選擇合適的 CNI 插件,例如 Calico、Flannel 等。 在部署 CNI 插件之前,需要安裝相應的依賴軟件,例如 Docker、etcd 等。然后,根據所選的 CNI 插件的文檔,進行相應的配置和安裝。一旦 CNI 插件安裝完成,Kubernetes 集群中的節點將自動加入到網絡中,并能夠與其他節點進行通信

9.1部署Calico插件
[root@k8s-master ~]# mkdir /opt/k8s
[root@k8s-master ~]# cd /opt/k8s
[root@k8s-master k8s]#  wget https://calico-v3-25.netlify.app/archive/v3.25/manifests/calico.yaml
#如果是下載到Windows下,上傳到系統的/root/再執行如下命令
[root@k8s-master k8s]# cp /root/calico.yaml /opt/k8s/[root@k8s-master k8s]# grep image calico.yamlimage: docker.io/calico/cni:v3.25.0imagePullPolicy: IfNotPresentimage: docker.io/calico/cni:v3.25.0imagePullPolicy: IfNotPresentimage: docker.io/calico/node:v3.25.0imagePullPolicy: IfNotPresentimage: docker.io/calico/node:v3.25.0imagePullPolicy: IfNotPresentimage: docker.io/calico/kube-controllers:v3.25.0imagePullPolicy: IfNotPresent#修改配置文件,不適用默認的dokcer.io網站下載
[root@k8s-master k8s]# sed -i 's#docker.io/##g'  calico.yaml
# 執行calico.yml
[root@k8s-master k8s]# kubectl   apply  -f calico.yaml
#查看節點的狀態
[root@k8s-master k8s]# kubectl get pod  -n kube-system
[root@k8s-master k8s]# kubectl get pod  -n kube-system
NAME                                     READY   STATUS    RESTARTS   AGE
calico-kube-controllers-cd8566cf-rcqpf   1/1     Running   0          6m39s
calico-node-d2hvm                        1/1     Running   0          6m39s
calico-node-mfdqw                        1/1     Running   0          6m39s
coredns-6d8c4cb4d-js7jd                  1/1     Running   0          4h14m
coredns-6d8c4cb4d-n9m22                  1/1     Running   0          4h14m
etcd-k8s-master                          1/1     Running   0          4h14m
kube-apiserver-k8s-master                1/1     Running   0          4h14m
kube-controller-manager-k8s-master       1/1     Running   0          4h14m
kube-proxy-fm5gr                         1/1     Running   0          3h39m
kube-proxy-grw5b                         1/1     Running   0          4h14m
kube-scheduler-k8s-master                1/1     Running   0          4h14m
[root@k8s-master k8s]# kubectl  get nodes
NAME         STATUS   ROLES                  AGE     VERSION
k8s-master   Ready    control-plane,master   4h16m   v1.23.6
k8s-node01   Ready    <none>                 3h41m   v1.23.6
[root@k8s-master k8s]#

總結整體的部署思路/過程

1、根據要求安裝虛擬機 k8s-master (2個CPU 4G內存) k8s-node

2、對系統初始化設置:Yum源配置 防火墻配置 SELINUX 主機名配置 虛擬內存 hosts文件設置

3、安裝docker kubelet kubeadm kubectl

4、在k8s-master上配置 初始化 kubeadm init

5、在k8s-node 上 kubeadm join

6、互通:網絡管理插件

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

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

相關文章

【Linux學習筆記】進程的fork創建 exit終止 wait等待

【Linux學習筆記】進程的fork創建 exit終止 wait等待 &#x1f525;個人主頁&#xff1a;大白的編程日記 &#x1f525;專欄&#xff1a;Linux學習筆記 文章目錄 【Linux學習筆記】進程的fork創建 exit終止 wait等待前言1.進程創建1.1 fork函數初識1.2fork函數返回值1.3寫時拷…

鴻蒙應用開發證書考試的一點想法

一、介紹&#xff1a; 直接上圖 二、體驗后的想法&#xff1a; 1.知識點在指南API參考最佳實踐里面找 2.沒有明確說明考試不能查第1點的文檔&#xff0c;但是考試只有1個小時&#xff0c;合理分配時間 3.切屏三次后自動提交要注意&#xff0c;每月3次機會下月又有3次機會&a…

含錫廢水處理的經濟效益

主要體現在成本節約和資源回收兩方面&#xff0c;具體收益因處理工藝、廢水濃度及規模差異而不同。以下結合不同技術路線進行量化分析&#xff1a; 一、直接經濟效益 資源回收收益 金屬錫回收&#xff1a; 若廢水中錫濃度為100 mg/L&#xff0c;日處理量100噸&#xff0c;則每…

Base64編碼原理:二進制數據與文本的轉換技術

&#x1f504; Base64編碼原理&#xff1a;二進制數據與文本的轉換技術 開發者的數據編碼困境 作為開發者&#xff0c;你是否曾遇到這些與Base64相關的挑戰&#xff1a; &#x1f4ca; 需要在JSON中傳輸二進制數據&#xff0c;但不確定如何正確編碼&#x1f5bc;? 想要在HT…

day49—雙指針+貪心—驗證回文串(LeetCode-680)

題目描述 給你一個字符串 s&#xff0c;最多 可以從中刪除一個字符。 請你判斷 s 是否能成為回文字符串&#xff1a;如果能&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 示例 1&#xff1a; 輸入&#xff1a;s "aba" 輸出&#xff1a;true…

Kubernetes(k8s) 集群的快速部署

實驗目的 本實驗旨在通過 Kubeadm 工具快速部署一個 Kubernetes 1.28.2 集群&#xff0c;包含 1 個 Master 節點和 2 個 Worker 節點&#xff0c;并驗證集群的基本功能。實驗涉及以下關鍵步驟&#xff1a; 環境準備&#xff1a;配置主機名、關閉防火墻、禁用 SELinux、設置時區…

7年經驗的Java程序員的技術知識概覽(及分階段學習計劃、資源推薦、職業發展建議)

&#x1f91f;致敬讀者 &#x1f7e9;感謝閱讀&#x1f7e6;笑口常開&#x1f7ea;生日快樂?早點睡覺 &#x1f4d8;博主相關 &#x1f7e7;博主信息&#x1f7e8;博客首頁&#x1f7eb;專欄推薦&#x1f7e5;活動信息 文章目錄 **一、技術棧全景與深度要求****1. 核心Java…

28、.NET 中元數據是什么?

在.NET中&#xff0c;元數據&#xff08;Metadata&#xff09;是描述程序結構和類型信息的二進制數據集合&#xff0c;它是.NET運行時&#xff08;CLR&#xff09;的核心基礎組件之一&#xff0c;用于支持程序加載、類型解析、反射、安全校驗等關鍵功能。以下是其核心特性和作用…

Idea中實用設置和插件

目錄 一、Idea使用插件 1.Fitten Code智能提示 2.MyBatisCodeHelperPro 3.HighlightBracketPair? 4.Rainbow Brackets Lite 5.GitToolBox(存在付費) 6.MavenHelperPro 7.Search In Repository 8.VisualGC(存在付費) 9.vo2dto 10.Key Promoter X 11.CodeGlance…

Linux新手快速入門指南

Linux新手快速入門指南&#xff1a;從零到熟練的簡明路線圖 對于剛接觸Linux的新手而言&#xff0c;這個開源世界既充滿機遇又令人望而生畏。本文將通過系統化的學習路徑和實戰技巧&#xff0c;幫助您快速突破入門難關&#xff0c;掌握Linux核心技能。 一、突破認知誤區&#x…

交叉編譯paho.mqtt.c和paho.mqtt.cpp(MQTT客戶端)

一、參考資料 【MQTT】paho.mqtt.cpp 庫的 介紹、下載、交叉編譯、MQTT客戶端例子源碼-CSDN博客 【MQTT】paho.mqtt.c 庫的“介紹、下載、交叉編譯” 詳解&#xff0c;以及編寫MQTT客戶端例子源碼-CSDN博客 二、準備工作 1. 重要說明 paho.mqtt.cpp與paho.mqtt.c&#xff…

Flink 源碼編譯

打包命令 打包整個項目 mvn clean package -DskipTests -Drat.skiptrue打包單個模塊 mvn clean package -DskipTests -Drat.skiptrue -pl flink-dist如果該模塊依賴其他模塊&#xff0c;可能需要先將其他模塊 install 到本地&#xff0c;如果依賴的模塊的源代碼有修改&#…

【Agent實戰】從0到1開發一個Python 解釋器 MCP SSE Server

寫在前面 想象一個場景:LLM Agent(如 AutoGPT、MetaGPT 或我們自己構建的 Agent)在規劃任務后,決定需要運行一段 Python 代碼來處理數據或調用某個 API。它不能直接在自己的環境中執行(通常不具備這個能力,也不安全),而是需要將這段代碼發送給一個專門的外部服務來執行…

HTML word屬性

介紹 CSS word-spacing 屬性&#xff0c;用于指定段字之間的空間&#xff0c;例如&#xff1a; p {word-spacing:30px; }word-spacing屬性增加或減少字與字之間的空白。 注意&#xff1a; 負值是允許的。 瀏覽器支持 表格中的數字表示支持該屬性的第一個瀏覽器版本號。 屬…

assertEquals()

assertEquals() 是 JUnit 框架中用于進行斷言操作的一個非常常用的方法&#xff0c;其主要目的是驗證兩個值是否相等。如果兩個值不相等&#xff0c;測試就會失敗&#xff0c;JUnit 會給出相應的錯誤信息&#xff0c;提示開發者測試未通過。下面為你詳細介紹&#xff1a; 方法…

Nginx 反向代理,啥是“反向代理“啊,為啥叫“反向“代理?而不叫“正向”代理?它能干哈?

Nginx 反向代理的理解與配置 User 我打包了我的前端vue項目&#xff0c;上傳到服務器&#xff0c;在寶塔面板安裝了nginx服務&#xff0c;配置了文件 nginx.txt .運行了項目。 我想清楚&#xff0c;什么是nginx反向代理&#xff1f;是nginx作為一個中介&#xff1f;中間件來集…

用 Python 打造打籃球字符動畫!控制臺彩色炫酷輸出,抖音搞怪視頻靈感還原

一、引言&#xff1a;從抖音搞怪視頻到 Python 字符動畫的奇妙之旅 刷抖音時刷到一個神級操作 —— 博主用 01 數字矩陣還原了明星打籃球的經典畫面&#xff0c;字符在控制臺隨動作節奏炫彩跳動&#xff0c;瞬間點燃了技術宅的 DNA&#xff01;作為 Python 圖像處理愛好者&…

《逐夢九天:中國航天編年史》

《逐夢九天:中國航天編年史》 新華社酒泉2025年4月24日電(記者李國利、黃一宸)神舟二十號載人飛船發射4月24日取得圓滿成功,中國載人航天在“東方紅一號”發射55載之際開啟第20次神舟問天之旅。 當日17時17分,搭載神舟二十號載人飛船的長征二號F遙二十運載火箭在酒泉衛星…

IDEA搭建環境的五種方式

一、普通的java項目 File--New--Project 選擇Java&#xff0c;jdk選擇1.8版本&#xff0c;然后點next 輸入項目名和路徑名&#xff0c;點擊Finish 創建包結構&#xff0c;編寫Class類 編寫主方法&#xff0c;輸出Hello標志完成 二、普通的javaWeb項目 Java Enterprise-- 勾選…

【黑馬 微服務面試篇】

分布式事務 cap定理-Availability CAP定理-Partition tolerance BASE理論 BASE理論是對CAP的一種解決思路&#xff0c;包含三個思想&#xff1a; BasicallyAvailable&#xff08;基本可用&#xff09;&#xff1a;分布式系統在出現故障時&#xff0c;允許損失部分可用性&#…