k8s 二進制安裝 優化架構之 部署負載均衡,加入master02

目錄

一? ? 實驗環境

二? ??部署 CoreDNS

1,所有node加載coredns.tar?鏡像? ?

2,在 master01 節點部署 CoreDNS?

3,?DNS 解析測試

4,?報錯分析

5,重新??DNS 解析測試

三? ? ? ?master02 節點部署

1,從master01?傳etcd?目錄到 master02 節點

2,從master01?傳? kubernetes? 目錄到 master02 節點

3,從master01傳/root/.kube到 master02 節點

4,?從master01?傳服務管理文件到 master02 節點

5,修改配置文件kube-apiserver中的IP

6,?master02 節點上啟動各服務并設置開機自啟

7,?master02? 將?可執行文件都做軟連接

8,驗證?master02?是否安裝成功

四? ? ?負載均衡部署

1,架構圖

2,k8s 集群做 nginx +keepalive 負載均衡高可用 的必要性

3,?部署兩臺nginx?負載均衡服務器

3.1,配置nginx的官方在線yum源,配置本地nginx的yum源

3.2,?安裝nginx

3.3,修改nginx配置文件,配置四層反向代理負載均衡,指定k8s群集2臺master的節點ip和6443端口

3.4??檢查配置文件語法

3.5?啟動nginx服務,查看已監聽6443端口

4,部署keepalived服務?解決nginx?單點故障

4.1? 安裝keepalived

4.2?修改keepalived配置文件

4.3?創建nginx狀態檢查腳本

4.4?啟動keepalived服務

5,??使用一個VIP把node節點與master節點都關聯起來

5.1 修改node節點上的bootstrap.kubeconfig??配置文件為VIP

5.2?修改node節點上的kubelet.kubeconfig? 配置文件為VIP

5.3??修改node節點上的kube-proxy.kubeconfig配置文件為VIP

5.4??重啟kubelet和kube-proxy服務

6,? 查看nginx 和 node 、 master 節點的連接狀態

7,測試創建pod

7.1?測試創建pod

7.2?查看Pod的狀態信息

7.3?curl命令訪問

7.4?查看nginx日志

7.5? 查看service

五? ??部署 Dashboard

1,Dashboard 介紹

2,?準備Dashboard?和?metrics-scraper.tar

3,master01 節點上傳 recommended.yaml 文件到 /opt/k8s 目錄中

4,?執行?ymal?文件

5,創建service account并綁定默認cluster-admin管理員集群角色

6,?查看token 令牌

7,?瀏覽器登錄Dashboard?

8,在Dashboard? 創建6臺pod

六? ?總結


一? ? 實驗環境

k8s集群master01:192.168.217.66? ? kube-apiserver kube-controller-manager kube-scheduler etcd
k8s集群master02:192.168.217.77

?k8s集群node01:192.168.217.88? ? kubelet kube-proxy docker?
?k8s集群node02:192.168.217.99?

etcd集群節點1:192.168.217.66? ? etcd
etcd集群節點2:192.168.217.88? ? etcd

etcd集群節點3:192.168.217.99? ? etcd

?負載均衡nginx+keepalive01(master):192.168.217.22
?負載均衡nginx+keepalive02(backup):192.168.217.44

二? ??部署 CoreDNS

CoreDNS:可以為集群中的 service 資源創建一個域名 與 IP 的對應關系解析

node加載coredns.tar?鏡像? ??

master?執行ymal?文件

1,所有node加載coredns.tar?鏡像? ?

拖入壓縮包

docker load -i coredns.tar?載入鏡像

2,在 master01 節點部署 CoreDNS?

上傳 coredns.yaml 文件到 /opt/k8s 目錄中,部署 CoreDNS

查看?kube-system? 的命名空間

3,?DNS 解析測試

kubectl run -it --rm dns-test --image=busybox:1.28.4 sh####################
--rm: 這個選項告訴 Kubernetes 當Pod中的容器終止時,自動刪除該Pod。這對于一次性任務特別有用,可以避免遺留不再需要的Pod。dns-test: 這是給新創建的 Pod 指定的名字sh: 這部分指定了在容器啟動后要執行的命令。在這里,sh 是Shell的命令,意味著啟動容器后會直接進入一個Shell環境。用戶可以通過這個Shell與容器內部進行交互,執行各種命令等

4,?報錯分析

如果出現以下報錯

需要添加 rbac的權限 ?直接使用kubectl綁定 ?clusteradmin 管理員集群角色 ?授權操作權限

在master01:

 kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous############   
返回結果
clusterrolebinding.rbac.authorization.k8s.io/cluster-system-anonymous created

kubectl create clusterrolebinding 命令用于在 Kubernetes 集群中創建一個新的 ClusterRoleBinding 資源。ClusterRoleBinding 將ClusterRole(一組權限)綁定到用戶、組或其他實體,決定了這些實體在集群范圍內能夠執行的操作。下面是給定命令的詳細解釋:

  • kubectl create clusterrolebinding: 指令部分,表示要創建一個新的 ClusterRoleBinding 對象。

  • cluster-system-anonymous: 這是新創建的 ClusterRoleBinding 的名稱。你可以自定義此名稱,以便于管理和識別該ClusterRoleBinding的目的或作用。

  • --clusterrole=cluster-admin: 這個選項指定了要綁定的ClusterRole。在這個例子中,使用的是 cluster-admin,這是Kubernetes內置的ClusterRole,擁有對整個集群的完全管理權限。這意味著通過此ClusterRoleBinding關聯的用戶或組將擁有所有可能的權限。

  • --user=system:anonymous: 這個選項指定了ClusterRoleBinding將應用到的用戶。在這個命令中,用戶是 system:anonymous。在Kubernetes中,system:anonymous 是一個特殊用戶,代表未認證的請求者,即任何未提供有效認證信息的訪問嘗試都會被視為這個用戶。通過這種方式,此命令實際上是在賦予所有未經身份驗證的訪問者集群管理員權限,這是一個非常危險的配置,通常不推薦在生產環境中使用,因為這會極大地降低集群的安全性。

總結起來,這條命令創建了一個名為 cluster-system-anonymous 的ClusterRoleBinding,將集群管理員(cluster-admin)權限賦予了匿名用戶(system:anonymous)。這是一種極端情況下的配置,實際操作中應謹慎使用此類權限分配,以免造成安全風險。

5,重新??DNS 解析測試

三? ? ? ?master02 節點部署

在企業里 master最少3臺 有個leader

大體思路?是傳?master需要的

etcd? ? kubernetes? 目錄? ?以及/root/.kube(kubectl?的配置文件以及緩存)? ? ?以及所有服務的system?單元文件

最后一個一個啟動

1,從master01?傳etcd?目錄到 master02 節點

2,從master01?傳? kubernetes? 目錄到 master02 節點

3,從master01傳/root/.kube到 master02 節點

  • cache: 這個目錄通常用于存放由kubectl命令行工具緩存的各種數據,比如API資源的本地副本或者上次查詢的結果,以便提高后續命令的執行速度。這些信息幫助減少不必要的API服務器查詢,提升交互效率。

  • config: 這是一個非常重要的文件,全名為config.yamlconfig(取決于操作系統顯示設置),它包含了Kubernetes配置信息,尤其是與集群連接相關的設置。這個文件定義了如何連接到Kubernetes API服務器(apiserver)、認證憑據(如token或client證書)、上下文(clusters)、用戶(users)以及默認的命名空間(namespace)等。當你使用kubectl命令行工具時,它會默認查找這個文件來確定如何與Kubernetes集群進行通信。

簡而言之,.kube/cache是kubectl用于緩存數據以提高效率的目錄,而.kube/config則是一個關鍵的配置文件,用于存儲與Kubernetes集群交互所需的認證和配置細節

4,?從master01?傳服務管理文件到 master02 節點

scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@master02:/usr/lib/systemd/system/

5,修改配置文件kube-apiserver中的IP

去master02

vim /opt/kubernetes/cfg/kube-apiserver

將第5行? ?7行? ?改成自己的ip


?

6,?master02 節點上啟動各服務并設置開機自啟

systemctl start kube-apiserver.service
systemctl enable kube-apiserver.service
systemctl start kube-controller-manager.service
systemctl enable kube-controller-manager.service
systemctl start kube-scheduler.service
systemctl enable kube-scheduler.service

7,?master02? 將?可執行文件都做軟連接

8,驗證?master02?是否安裝成功

查看node節點狀態

-o=wide:輸出額外信息;對于Pod,將輸出Pod所在的Node名
//此時在master02節點查到的node節點狀態僅是從etcd查詢到的信息,而此時node節點實際上并未與master02節點建立通信連接,因此需要使用一個VIP把node節點與master節點都關聯起來

四? ? ?負載均衡部署

1,架構圖

2,k8s 集群做 nginx +keepalive 負載均衡高可用 的必要性

負載均衡器 :

分攤master流量

且 node回包的時候 ?也是經過負載均衡器

所有master 不需要指向node

3,?部署兩臺nginx?負載均衡服務器

3.1,配置nginx的官方在線yum源,配置本地nginx的yum源

兩個nginx服務器

cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
EOF

3.2,?安裝nginx

兩個nginx服務器

3.3,修改nginx配置文件,配置四層反向代理負載均衡,指定k8s群集2臺master的節點ip和6443端口

兩個nginx服務器

vim /etc/nginx/nginx.conf

stream {log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';access_log  /var/log/nginx/k8s-access.log  main;upstream k8s-apiserver {server 192.168.217.66:6443;server 192.168.217.77:6443;}server {listen 6443;proxy_pass k8s-apiserver;}
}

解釋:

這段配置是Nginx的一個配置片段,用于設置一個反向代理和負載均衡,特別是針對Kubernetes(k8s)API服務器的流量管理。下面逐行解釋各部分:

  • stream: 這里其實有一個小誤解,正確的配置應該是放在http塊中而非stream,因為log_format, access_log, upstream, 和 server 配置都是HTTP相關的,而不是TCP/UDP流處理。stream模塊用于處理四層協議(TCP/UDP)的負載均衡,而這里明顯是在配置HTTP七層協議的負載均衡。因此,下面的解釋基于它是HTTP配置的假設。

  • log_format main ...: 定義了名為main的日志格式,用于記錄客戶端IP地址(remote_addr),上游服務器地址(remotea?ddr),上游服務器地址(upstream_addr),請求時間(time_local),HTTP響應狀態碼(timel?ocal),HTTP響應狀態碼(status),以及發送給客戶端的字節數($upstream_bytes_sent)。

  • access_log /var/log/nginx/k8s-access.log main;: 指定了訪問日志的存儲位置/var/log/nginx/k8s-access.log并且使用前面定義的main日志格式來記錄日志

  • upstream k8s-apiserver {...}: 定義了一個名為k8s-apiserver的上游服務器組(可以理解為真實服務器),包含兩個Kubernetes API服務器的地址:192.168.10.80:6443 和 192.168.10.20:6443。Nginx會根據負載均衡策略(默認是輪詢)將請求分發到這兩個地址之一。

  • server {...}: 定義了一個監聽在6443端口上的Nginx服務器塊。

    • listen 6443;: 指定該Nginx服務器監聽在6443端口,這通常是Kubernetes API服務器的默認端口。
    • proxy_pass k8s-apiserver;: 設置代理傳遞目標為之前定義的k8s-apiserver上游服務器組,這意味著所有到達Nginx此端口的請求會被轉發到這兩個Kubernetes API服務器之一

總結來說,這段配置的作用是設置了一個Nginx作為Kubernetes API服務器的反向代理和負載均衡器,它監聽在6443端口,接收對Kubernetes API的請求,并將這些請求透明地分發到兩個Kubernetes API服務器實例上,同時記錄相關訪問日志。這樣不僅提升了Kubernetes API服務的可用性和響應能力,還便于日志審計和故障排查。

3.4??檢查配置文件語法

兩個nginx服務器

3.5?啟動nginx服務,查看已監聽6443端口

兩個nginx服務器

4,部署keepalived服務?解決nginx?單點故障

4.1? 安裝keepalived

兩個nginx服務器

4.2?修改keepalived配置文件

ng01

vim /etc/keepalived/keepalived.conf

注意此處vip?地址? 需要與master01? ?/opt/k8s/k8s-cert/k8s-cert.sh 中的vip?一致

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {# 接收郵件地址notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}# 郵件發送地址notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id NGINX_MASTER       #ng01節點的為 NGINX_MASTER,ng02節點的為 NGINX_BACKUP
}#添加一個周期性執行的腳本
vrrp_script check_nginx {script "/etc/nginx/check_nginx.sh"  #指定檢查nginx存活的腳本路徑
}vrrp_instance VI_1 {state MASTER                        #ng01節點的為 MASTER,ng02節點的為 BACKUPinterface ens33                     #指定網卡名稱 ens33virtual_router_id 51        #指定vrid,兩個節點要一致priority 100                        #ng01節點的為 100,ng02節點的為 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.217.100/24      #指定 VIP}track_script {check_nginx                     #指定vrrp_script配置的腳本}
}

ng02
?

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {# 接收郵件地址notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}# 郵件發送地址notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id NGINX_BACKUP       #ng01節點的為 NGINX_MASTER,ng02節點的為 NGINX_BACKUP
}#添加一個周期性執行的腳本
vrrp_script check_nginx {script "/etc/nginx/check_nginx.sh"  #指定檢查nginx存活的腳本路徑
}vrrp_instance VI_1 {state BACKUP                        #ng01節點的為 MASTER,ng02節點的為 BACKUPinterface ens33                     #指定網卡名稱 ens33virtual_router_id 51        #指定vrid,兩個節點要一致priority 90                 #ng01節點的為 100,ng02節點的為 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.217.100/24      #指定 VIP}track_script {check_nginx                     #指定vrrp_script配置的腳本}
}

4.3?創建nginx狀態檢查腳本

兩個nginx服務器

vim /etc/nginx/check_nginx.sh

#!/bin/bash
#egrep -cv "grep|$$" 用于過濾掉包含grep 或者 $$ 表示的當前Shell進程ID,即腳本運行的當前進程ID號
count=$(ps -ef | grep nginx | egrep -cv "grep|$$")if [ "$count" -eq 0 ];thensystemctl stop keepalived
fi

加執行?權限

4.4?啟動keepalived服務

兩個nginx服務器

(一定要先啟動了nginx服務,再啟動keepalived服務)

查看VIP是否生成?ng01

5,??使用一個VIP把node節點與master節點都關聯起來

所有node

5.1 修改node節點上的bootstrap.kubeconfig??配置文件為VIP

vim bootstrap.kubeconfig?

5.2?修改node節點上的kubelet.kubeconfig? 配置文件為VIP

vim kubelet.kubeconfig

5.3??修改node節點上的kube-proxy.kubeconfig配置文件為VIP

vim kube-proxy.kubeconfig

5.4??重啟kubelet和kube-proxy服務

6,? 查看nginx 和 node 、 master 節點的連接狀態

ng01

ng02

7,測試創建pod

master01 節點

7.1?測試創建pod

創建nginx?pod

7.2?查看Pod的狀態信息

//READY為1/1,表示這個Pod中有1個容器
?

7.3?curl命令訪問

在對應網段的node節點上操作,可以直接使用瀏覽器或者curl命令訪問

node01

7.4?查看nginx日志

master01節點

網關訪問


?

7.5? 查看service

master01節點

五? ??部署 Dashboard

1,Dashboard 介紹

儀表板是基于Web的Kubernetes用戶界面。您可以使用儀表板將容器化應用程序部署到Kubernetes集群,對容器化應用程序進行故障排除,并管理集群本身及其伴隨資源。您可以使用儀表板來概述群集上運行的應用程序,以及創建或修改單個Kubernetes資源(例如deployment,job,daemonset等)。例如,您可以使用部署向導擴展部署,啟動滾動更新,重新啟動Pod或部署新應用程序。儀表板還提供有關群集中Kubernetes資源狀態以及可能發生的任何錯誤的信息。

2,?準備Dashboard?和?metrics-scraper.tar

node01? node02

準備壓縮包

加載Dashboard? 鏡像(可視化工具)

這是監控數據的

3,master01 節點上傳 recommended.yaml 文件到 /opt/k8s 目錄中

master01

#默認Dashboard只能集群內部訪問,修改Service為NodePort類型,暴露到外部:
kind: Service
apiVersion: v1
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard
spec:ports:- port: 443targetPort: 8443nodePort: 30001     #添加type: NodePort          #添加selector:k8s-app: kubernetes-dashboard

4,?執行?ymal?文件

master01

5,創建service account并綁定默認cluster-admin管理員集群角色

創建service account

kubectl create serviceaccount dashboard-admin -n kube-system

kubectl create serviceaccount dashboard-admin -n kube-system 是一個 Kubernetes 命令,用于在 Kubernetes 集群中創建一個新的服務賬戶(service account)。下面是對這個命令各部分的詳細解釋:

  • kubectl: 這是 Kubernetes 的命令行工具,用于與 Kubernetes 集群進行交互,執行各種管理任務,如部署應用、檢查集群狀態等。

  • create: 這是一個 kubectl 動作,表示你要創建一個新的資源對象,如 Pod、Service、Deployment 或者在這個情況下,是 ServiceAccount。

  • serviceaccount: 這個關鍵詞告訴 kubectl 你要創建的資源類型是 ServiceAccount。ServiceAccount 是 Kubernetes 中的一個特殊類型的對象,它用來為Pods提供身份和憑證,以便Pod內的進程能夠與Kubernetes API進行安全通信。

  • dashboard-admin: 這是你要創建的服務賬戶的名稱。在這個場景中,"dashboard-admin" 暗示這個服務賬戶可能被設計用來給 Kubernetes Dashboard 或其他需要訪問API權限的組件提供管理員級別的訪問權限,但具體權限由關聯的Role或ClusterRole決定。

  • -n kube-system: -n--namespace 是一個選項,用于指定資源將被創建在哪個命名空間(namespace)中。在這里,命名空間是 kube-systemkube-system 是 Kubernetes 集群中的一個特殊命名空間,通常用于存放集群的核心組件和服務,如DNS、網絡插件、監控系統等。選擇 kube-system 表示這個服務賬戶將專用于該命名空間內的資源和服務。

綜上所述,這個命令的作用是在 Kubernetes 集群的 kube-system 命名空間中創建一個名為 dashboard-admin 的服務賬戶,它可能被設計用于為Kubernetes Dashboard或類似應用提供必要的API訪問權限。但請注意,實際的權限配置需要通過附加的Role或ClusterRole以及RoleBinding或ClusterRoleBinding來實現。

管理員賬號 并賦權

kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin 是 Kubernetes 中的一個命令,用于創建一個集群角色綁定(ClusterRoleBinding)。這個命令的目的是賦予之前創建的服務賬戶特定的權限。下面是各部分的詳細解釋:

  • kubectl create clusterrolebinding: 該命令用于創建一個新的集群角色綁定。ClusterRoleBinding 是 Kubernetes 中的一種授權機制,它將 ClusterRole(定義了一組權限)綁定到用戶、組或服務賬戶上,并在整個集群范圍內生效。

  • dashboard-admin: 這是新創建的集群角色綁定的名稱。它作為一個標識符,方便后續管理和理解這個綁定的用途,這里暗示它與之前創建的 dashboard-admin 服務賬戶相關聯,用于給該服務賬戶分配權限。

  • --clusterrole=cluster-admin: 這個選項指定了要綁定的 ClusterRole 名稱。cluster-admin 是 Kubernetes 內置的一個超級管理員角色,擁有對整個集群的完全訪問權限。通過此選項,你實際上是將 cluster-admin 這一最廣泛的權限集賦予了即將綁定的對象。

  • --serviceaccount=kube-system:dashboard-admin: 這個選項指定了要授予上述ClusterRole的服務賬戶及其所在的命名空間。格式為 <namespace>:<serviceaccount-name>。在這個例子中,服務賬戶名為 dashboard-admin,位于 kube-system 命名空間。這意味著 kube-system 命名空間下的 dashboard-admin 服務賬戶將獲得 cluster-admin 角色所包含的所有權限。

綜上所述,這個命令的作用是創建一個集群角色綁定,它將 cluster-admin 這個擁有集群管理員權限的角色綁定給了 kube-system 命名空間下的 dashboard-admin 服務賬戶,從而使該服務賬戶在 Kubernetes 集群中具有了非常廣泛的管理權限。這通常用于需要高度訪問權限的組件,比如 Kubernetes Dashboard 的后端服務,但需要注意的是,這樣的設置應謹慎使用,以避免潛在的安全風險。

6,?查看token 令牌

這個就是Dashboard 令牌

查看token 令牌 復制

kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

這條命令是用來查詢 Kubernetes 集群中與 dashboard-admin 服務賬戶相關的秘密(secrets)詳細信息的。命令分為兩部分,我們逐一解析:

  1. 獲取 Secret 名稱:

    • kubectl -n kube-system get secret: 這部分命令用于列出?kube-system?命名空間中的所有秘密。
    • | awk '/dashboard-admin/{print $1}': 這里使用管道 (|) 將前一個命令的輸出作為?awk?命令的輸入。awk?是一個強大的文本分析工具,這里使用的規則是,如果輸出行中包含 "dashboard-admin"(這通常意味著與?dashboard-admin?服務賬戶相關的秘密),則打印該行的第一列(即Secret的名稱)。
  2. 描述 Secret 信息:

    • kubectl describe secrets -n kube-system $(...): 這部分利用上一步得到的 Secret 名稱(通過命令替換?$()?實現),在?kube-system?命名空間中執行?describe?命令來展示這些秘密的詳細信息。describe?命令提供了關于資源的更詳盡視圖,包括其元數據、標簽、選擇器等屬性,對于秘密來說,還會展示其類型、數據等敏感內容的加密表示。

總結來說,整個命令的作用是查找 kube-system 命名空間中與 dashboard-admin 服務賬戶相關的所有秘密,并詳細描述這些秘密的信息。這對于調試、審計或理解服務賬戶認證和授權設置特別有用。

7,?瀏覽器登錄Dashboard?

谷歌好像不太行

使用輸出的token登錄Dashboard
https://NodeIP:30001

展示:

8,在Dashboard? 創建6臺pod

在master01? 可查看到剛剛創建的pod

六? ?總結

多master集群架構的部署過程

首先 部署master02等其他master節點? master01配置文件拷貝(私鑰、服務、執行文件)到master02

搭建nginx/Haproxy + keepalived 高可用負載均衡器對master節點

修改 node節點上kubelet kube-proxy的 kubeconfig配置文件對接VIP

kubectl?的配置文件也要對接VIP或者當前的節點

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

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

相關文章

AI學習指南數學工具篇-PCA的應用場景

AI學習指南數學工具篇-PCA的應用場景 在人工智能領域&#xff0c;數據處理是非常重要的一環。對于大量高維數據&#xff0c;我們往往需要進行數據降維來減少計算復雜度&#xff0c;同時利用可視化工具對數據進行分析和理解。主成分分析&#xff08;Principal Component Analys…

C++ 利用標準庫多字節轉寬字節字符

在 C/C 之中&#xff0c;通常建議使用&#xff1a;mbstowcs &#xff08;C語言函數庫&#xff09;來實現多字節字符轉寬字節字符&#xff0c;這是因為如果使用。 std::wstring_convert<std::codecvt_utf8<wchar_t>> 模板來實現&#xff0c;它可能導致程序崩潰的風險…

【利用數組處理批量數據-譚浩強配套】(適合專升本、考研)

無償分享學習資料&#xff0c;需要的小伙伴評論區或私信dd。。。 無償分享學習資料&#xff0c;需要的小伙伴評論區或私信dd。。。 無償分享學習資料&#xff0c;需要的小伙伴評論區或私信dd。。。 完整資料如下&#xff1a;純干貨、純干貨、純干貨&#xff01;&#xff01;…

點云成圖原理

點成圖&#xff08;Point Cloud&#xff09;是指由一組離散的點構成的圖形&#xff0c;它們在空間中沒有任何連接關系。點成圖通常是由激光雷達、相機或其他傳感器獲取的三維數據&#xff0c;用于表示現實世界中的物體或場景。 三角成圖&#xff08;Triangulation&#xff09;…

element ui Tree樹形控件

lazy 是否懶加載子節點&#xff0c;需與 load 方法結合使用 boolean 默認為falseload 加載子樹數據的方法&#xff0c;僅當 lazy 屬性為true 時生效 function(node, resolve)使用懶加載load不需要再使用data&#xff0c;利用resolve返回值即可注意&#xff1a;第一層的數據要寫…

PMR-440N7Q韓國施耐德三和相序繼電器EOCR-PMR

韓國施耐德三和EOCR繼電器PMR-440N7Q PMR-440-N 直流電動機保護器:DCL、DOCR-S/H 欠電流繼電器:EUCR-3C 交流電壓繼電器:EOVR、EVR-PD、EVR-FD、EUVR 韓國三和EOCR電動機保護器:EOCR-SS、EOCR-SS1/SS2、EOCR-AR、EOCR-ST、EOCR-SP、EOCR-SP1/SP2、EOCR-SE、EOCR-SE2/SE PMR-44…

GIT基礎02 多機器協作等命令

前言 首先我們知道git給我們提供了分支管理的功能 我們一般使用master分支作為線上環境,master分支一般是一個穩定的分支 我們通常是會創建一個其他分支進行開發,這樣不會影響線上的機器運行 如果沒有git提供這樣的分支功能,就無法做到這一套了 指令學習 假設軟件出現問題咋辦…

LBSS138LT1G 絲印J1 SOT-23 N溝道 50V/200mA 貼片MOSFET

LBSS138LT1G的應用領域廣泛&#xff0c;主要因為它是一種N溝道金屬氧化物半導體場效應晶體管&#xff08;MOSFET&#xff09;&#xff0c;具有低電荷、快速開關速度和高阻斷特性。以下是一些典型的應用領域&#xff1a; 1. 消費電子產品&#xff1a;LBSS138LT1G常用于電視、音響…

debian apt 更改阿里源

1. 備份文件 cp /etc/apt/sources.list /etc/apt/sources.list.bak 2. 更改 sources.list文件內容為&#xff1a; deb http://mirrors.aliyun.com/debian/ buster main non-free contrib deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib deb htt…

QT狀態機1-三態循環狀態機

#include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)

【C -> Cpp】由C邁向Cpp (6):靜態、友元和內部類

標題&#xff1a;【C -&#xff1e; Cpp】由C邁向Cpp &#xff08;6&#xff09;&#xff1a;靜態、友元和內部類 水墨不寫bug &#xff08;圖片來源于網絡&#xff09; 目錄 &#xff08;一&#xff09;靜態成員 &#xff08;二&#xff09;友元 &#xff08;三&#xff09…

生產性服務業與生活性服務業如何區分

服務業的興旺發達是現代經濟的顯著特征&#xff0c;是經濟社會發展的必然趨勢&#xff0c;是衡量經濟發展現代化、國際化、高端化的重要標志。生產性服務業和生活性服務業是服務業的重要組成部分&#xff0c;是當前中國經濟最具活力的產業&#xff0c;也是未來經濟發展最具潛力…

2024OD機試卷-解密犯罪時間 (java\python\c++)

題目:解密犯罪時間 題目描述 警察在偵破一個案件時,得到了線人給出的可能犯罪時間,形如 “HH:MM” 表示的時刻。 根據警察和線人的約定,為了隱蔽,該時間是修改過的,解密規則為:利用當前出現過的數字,構造下一個距離 當前時間 最近的時刻,則該時間為可能的犯罪時間。…

為pytorch前向和反向的Tensor生成描述性統計

為pytorch前向和反向的Tensor生成描述性統計 代碼 在調試Megatron-DeepSpeed的精度時&#xff0c;我們希望對比每一層前向和反向傳播的輸入輸出誤差。然而&#xff0c;由于數據量過大&#xff0c;直接保存所有數據不太現實。因此&#xff0c;我們生成了輸入輸出tensor的描述性統…

有哪些好用的3dMax大神插件?

有哪些好用的3dMax大神插件&#xff1f; Mesh Insert 3DMAX網格插入插件Mesh Insert&#xff0c;在選擇的面上安門窗、打螺絲、挖洞、插入眼耳口鼻及其它網格模型等可以分分鐘搞定&#xff01;它通過將面選擇替換為庫中的資源來加快建模過程。非常適合硬網格和有機建模&#xf…

Go 一個類型轉換工具包strconv包

Go 語言的 strconv 包提供了用于基本數據類型之間轉換的函數&#xff0c;包括字符串到其他基本類型的轉換&#xff0c;以及其他基本類型到字符串的轉換。 字符串轉換為基本數據類型 strconv.Atoi&#xff1a;將字符串轉換為 intstrconv.ParseBool&#xff1a;將字符串轉換為 b…

iOS ------ 多線程基礎

一&#xff0c;進程和線程 1&#xff0c;進程 定義&#xff1a; 進程是指在系統中正在運行的一個應用程序每個進程之間是獨立的&#xff0c;每個進程均運行在其專有的且受保護的內存進程是系統進行資源分配和調度的一個獨立單位 補充&#xff1a;iOS系統是相對封閉的系統&a…

SQL中的LAG函數與LEAD函數用法

LAG&#xff1a;函數用于獲取結果集中當前行之前的某一行的值 LAG (scalar_expression [,offset] [,default]) OVER ([partition_by_clause ] order_by_clause ) -----漢字解釋 LAG (字段 [,偏移量默認為1] [,如果沒有值時候默認值]) OVER ( [ partition_by 字段 ] order_by 字…

服務網格 SolarMesh v1.13 重磅發布

SolarMesh是行云創新推出的流量治理平臺&#xff0c;它基于Istio&#xff0c;為部署在K8s集群上的應用提供全面的流量治理能力。 在之前的版本中&#xff0c;SolarMesh提供的能力有&#xff1a;流量視圖&#xff0c;流量控制策略批量配置&#xff0c;API級別的流量數據采集和展…

【上海大學計算機組成原理實驗報告】五、機器語言程序實驗

一、實驗目的 理解計算機執行程序的實際過程。 學習編制機器語言簡單程序的方法。 二、實驗原理 根據實驗指導書的相關內容&#xff0c;指令的形式化表示是指采用一種規范化的符號系統&#xff0c;以更清晰、精確地描述和表示指令的邏輯功能和操作步驟。 匯編是一種編程語言…