企業級rancher搭建Kubernetes(采用rancher管理平臺搭建k8s)

一、簡介

Rancher簡介

來源官方:https://www.cnrancher.com/

? ? ? ?Rancher是一個開源的企業級容器管理平臺。通過Rancher,企業再也不必自己使用一系列的開源軟件去從頭搭建容器服務平臺。Rancher提供了在生產環境中使用的管理Docker和Kubernetes的全棧化容器部署與管理平臺。

Rancher由以下四個部分組成:

1.1、基礎設施編排

Rancher可以使用任何公有云或者私有云的Linux主機資源。Linux主機可以是虛擬機,也可以是物理機。Rancher僅需要主機有CPU,內存,本地磁盤和網絡資源。從Rancher的角度來說,一臺云廠商提供的云主機和一臺自己的物理機是一樣的。

? ? ?Rancher為運行容器化的應用實現了一層靈活的基礎設施服務。Rancher的基礎設施服務包括網絡,?存儲,?負載均衡,?DNS和安全模塊。Rancher的基礎設施服務也是通過容器部署的,所以同樣Rancher的基礎設施服務可以運行在任何Linux主機上。

1.2、容器編排與調度

很多用戶都會選擇使用容器編排調度框架來運行容器化應用。Rancher包含了當前全部主流的編排調度引擎,例如Docker Swarm, Kubernetes, 和Mesos。同一個用戶可以創建Swarm或者Kubernetes集群。并且可以使用原生的Swarm或者Kubernetes工具管理應用。

除了Swarm,Kubernetes和Mesos之外,Rancher還支持自己的Cattle容器編排調度引擎。Cattle被廣泛用于編排Rancher自己的基礎設施服務以及用于Swarm集群,Kubernetes集群和Mesos集群的配置,管理與升級。

1.3、應用商店

Rancher的用戶可以在應用商店里一鍵部署由多個容器組成的應用。用戶可以管理這個部署的應用,并且可以在這個應用有新的可用版本時進行自動化的升級。Rancher提供了一個由Rancher社區維護的應用商店,其中包括了一系列的流行應用。Rancher的用戶也可以創建自己的私有應用商店。

1.4、企業級權限管理

? ? ? ? ?Rancher支持靈活的插件式的用戶認證。支持Active Directory,LDAP, Github等?認證方式。 Rancher支持在環境級別的基于角色的訪問控制 (RBAC),可以通過角色來配置某個用戶或者用戶組對開發環境或者生產環境的訪問權限。

下圖展示了Rancher的主要組件和功能:

1.png

Kubernetes簡介

1.1 基礎概念

Kubernetes(通常寫成“k8s”)Kubernetes是Google開源的容器集群管理系統。其設計目標是在主機集群之間提供一個能夠自動化部署、可拓展、應用容器可運營的平臺。Kubernetes通常結合docker容器工具工作,并且整合多個運行著docker容器的主機集群,Kubernetes不僅僅支持Docker,還支持Rocket,這是另一種容器技術。

功能特性:

  • 自動化容器部署與復制

  • 隨時擴展或收縮容器規模

  • 組織容器成組,提供容器間的負載均衡

  • 快速更新及回滾容器版本

  • 提供彈性伸縮,如果某個容器失效就進行替換

1.2 架構圖

2.png

1.3 組件

1.3.1 Master

Master節點上面主要由四個模塊組成:APIServer、scheduler、controller manager、etcd

  • APIServer:APIServer負責對外提供RESTful的Kubernetes API服務,它是系統管理指令的統一入口,任何對資源進行增刪改查的操作都要交給APIServer處理后再提交給etcd。如架構圖中所示,kubectl(Kubernetes提供的客戶端工具,該工具內部就是對Kubernetes API的調用)是直接和APIServer交互的。

  • schedule:scheduler的職責很明確,就是負責調度pod到合適的Node上。如果把scheduler看成一個黑匣子,那么它的輸入是pod和由多個Node組成的列表,輸出是Pod和一個Node的綁定,即將這個pod部署到這個Node上。Kubernetes目前提供了調度算法,但是同樣也保留了接口,用戶可以根據自己的需求定義自己的調度算法。

  • controller manager:如果說APIServer做的是“前臺”的工作的話,那controller manager就是負責“后臺”的。每個資源一般都對應有一個控制器,而controller manager就是負責管理這些控制器的。比如我們通過APIServer創建一個pod,當這個pod創建成功后,APIServer的任務就算完成了。而后面保證Pod的狀態始終和我們預期的一樣的重任就由controller manager去保證了。

  • etcd:etcd是一個高可用的鍵值存儲系統,Kubernetes使用它來存儲各個資源的狀態,從而實現了Restful的API。

1.3.2 Node

每個Node節點主要由三個模塊組成:kubelet、kube-proxy、runtime。

?runtime指的是容器運行環境,目前Kubernetes支持docker和rkt兩種容器。

  • kube-proxy:該模塊實現了Kubernetes中的服務發現和反向代理功能。反向代理方面:kube-proxy支持TCP和UDP連接轉發,默認基于Round Robin算法將客戶端流量轉發到與service對應的一組后端pod。服務發現方面,kube-proxy使用etcd的watch機制,監控集群中service和endpoint對象數據的動態變化,并且維護一個service到endpoint的映射關系,從而保證了后端pod的IP變化不會對訪問者造成影響。另外kube-proxy還支持session affinity。

  • kubelet:Kubelet是Master在每個Node節點上面的agent,是Node節點上面最重要的模塊,它負責維護和管理該Node上面的所有容器,但是如果容器不是通過Kubernetes創建的,它并不會管理。本質上,它負責使Pod得運行狀態與期望的狀態一致。

1.3.3 Pod

? ? ? Pod是k8s進行資源調度的最小單位,每個Pod中運行著一個或多個密切相關的業務容器,這些業務容器共享這個Pause容器的IP和Volume,我們以這個不易死亡的Pause容器作為Pod的根容器,以它的狀態表示整個容器組的狀態。一個Pod一旦被創建就會放到Etcd中存儲,然后由Master調度到一個Node綁定,由這個Node上的Kubelet進行實例化。

每個Pod會被分配一個單獨的Pod IP,Pod IP + ContainerPort 組成了一個Endpoint。

1.3.4 Service

? ? ? Service其功能使應用暴露,Pods 是有生命周期的,也有獨立的 IP 地址,隨著 Pods 的創建與銷毀,一個必不可少的工作就是保證各個應用能夠感知這種變化。這就要提到 Service 了,Service 是 YAML 或 JSON 定義的由 Pods 通過某種策略的邏輯組合。更重要的是,Pods 的獨立 IP 需要通過 Service 暴露到網絡中。

二、準備工作

2.1、系統環境

????
????
????

下面兩個節點都要配置

2.2、檢查hosts--配置后檢查是否能解析外網

192.168.56.129 master

192.168.56.130 slave1

2.3、暫時關閉防火墻和seLinux

2.4、開啟IPV4轉發

在/etc/sysctl.conf新添加如下參數

net.ipv4.ip_forward = 1

net.ipv4.ip_forward_use_pmtu = 0

生效命令:

[root@master ~]# sysctl -p

查看

[root@master ~]# sysctl -a|grep "ip_forward"

3.png

2.5、關閉Swap交換分區

2.6、安裝Docker1.12.6版本

什么版本的Docker才能適配Rancher和Kubernetes

請參考:http://rancher.com/docs/rancher/v1.6/zh/hosts/#docker

4.png

1)執行命令:

[root@master ~]# mkdir -p ~/_src

[root@master ~]# cd ~/_src/

[root@master _src]# wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-selinux-1.12.6-1.el7.centos.noarch.rpm

[root@master _src]# wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-1.12.6-1.el7.centos.x86_64.rpm

[root@master _src]# wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-debuginfo-1.12.6-1.el7.centos.x86_64.rpm

安裝

[root@master _src]# yum localinstall -y docker-engine-selinux-1.12.6-1.el7.centos.noarch.rpm docker-engine-1.12.6-1.el7.centos.x86_64.rpm docker-engine-debuginfo-1.12.6-1.el7.centos.x86_64.rpm

5.png

2)啟動

[root@master ~]# systemctl enable docker

[root@master ~]# systemctl start docker

3)查看版本

[root@master ~]# docker version

6.png

2.7、設置Docker鏡像加速

此時如果用docker pull命令下載鏡像,本地會連接hub.docker.com網站去下載,耗時較長,因此我們可以設置docker鏡像加速,使得本地連接去國內鏡像倉庫下載,鏡像加速的設置有很多種,本章以阿里云的設置為例,步驟如下:

1)創建目錄:

[root@master ~]# mkdir /etc/docker

2)設置鏡像倉庫地址:

tee /etc/docker/daemon.json <<-'EOF'{ ?"registry-mirrors": ["https://xwx6wxd1.mirror.aliyuncs.com"] }EOF

3)重新加載配置:

[root@master ~]# systemctl daemon-reload

4)重啟服務

[root@master ~]# systemctl restart docker.service

備注:slave1節點操作一致

三、安裝rancher

官方安裝文檔:https://www.cnrancher.com/docs/rancher/v2.x/cn/overview/

3.1、在master機器執行以下命令,即可安裝rancher:

[root@master ~]# docker run -d --restart always --name rancher-server -p 8080:8080 rancher/server:v1.6.11-rc3 && docker logs -f rancher-server

報錯如下:

7.png

參考地址:https://blog.csdn.net/shida_csdn/article/details/79376761

[root@master ~]# pkill docker ? ? ? ? ? ? ? ? ? ? ? ? #終止進程

[root@master ~]# iptables -t nat -F ? ? ? ? ? ? ? ? #清空nat表的所有鏈

[root@master ~]# ifconfig docker0 down ? ? ? ?#停止docker默認網橋

[root@master ~]# brctl delbr docker0 ? ? ? ? ? ? #刪除網橋

[root@master ~]# systemctl restart docker ? ? ? #重啟docker

查看即可

3.2、在瀏覽器訪問http://192.168.56.129:8080,可以看到初始頁面,在頁面的右下角選擇“簡體中文”后,頁面如下所示:

8.png

至此,rancher安裝成功,接下來就是kubernetes的搭建工作。

3.3、配置環境模板

1)、環境配置---“Default”選擇“環境管理”,如圖

9.png

2)添加環境模塊

10.png

輸入項目名:k8s-TempLate

11.png

如下圖,下拉菜單只有一個選擇,請選中

12.png

13.png

上圖四個紅框填入的內容如下表所示:

??
??
??
??
??

3)將頁面拖動到最底部,點擊“設置”按鈕,如下圖:

14.png

4)再將頁面拖動到最底部,點擊“創建”按鈕,如下圖:

15.png

這樣我們就完成了環境模板的配置,這里面的參數幫助rancher尋找國內的鏡像倉庫,從而避免了無法從google倉庫下載鏡像的問題,在以往這個問題是通過上網來解決的;

3.4、創建Kubernetes

1)點擊“創建環境”按鈕,如下圖紅框:

16.png

2)在創建環境的頁面中,輸入新的環境的名稱:master-k8s,選擇我們剛才創建的環境模板,在點擊底部的“創建”按鈕,如下圖:

17.png

3)如下圖紅框所示,在左上角位置選擇剛剛創建的環境,可以看到目前環境已經OK,正在等待node的加入:

18.png

至此,Kubernetes的master已經搭建完畢!!!!

3.5、添加節點——將機器加入到K8S環境

1)master機器的IP是192.168.56.129,所以在瀏覽器打開地址192.168.56.129:8080,左上角選擇新增的環境,可以看到如下圖的頁面,點擊紅框中的“添加主機”:

19.png

2)如下圖,在頁面上確認紅框中的IP地址是不是你的master機器對外暴露的地址(多網卡的機器要關注),確認無誤后點擊“保存”?.

20.png

3)如下圖,點擊紅框按鈕,會將此按鈕左側的文本信息復制下來:

21.png

4)登錄slave1節點,執行上面復制下來的命令,該命令會先下載docker鏡像,然后啟動容器去加入到K8S環境,此時再去刷新管理頁面,見到如下圖所示,已經感知到機器的加入,開始接下來的一系列操作,此時請耐心等待(等待時間比較,喝杯茶再回來):?

22.png

有可能節點獲取不到東西,建議檢查一下安全規則(防火墻、轉發、selinux),配置后重啟即可

23.png

5)節點加入成功后,頁面如下圖所示,點擊紅框中的按鈕就進入了K8S的dashboard:?

24.png

報Service unavailable錯誤:等待十分鐘左右即可,啟動接口有點慢

下文安裝kubectl裝好之后,在控制臺用kubectl describe命令查看dashbroad的pod和service的執行進度,查看錯誤日志。

至此,我們已經完成了節點機器加入K8S環境的操作,接下來我們快速體驗在K8S環境創建Pod和Service的操作;

體驗K8S環境

1)創建一個文件tomcat.yaml,內容如下:

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

name: tomcat001

spec:

replicas: 1

template:

metadata:

labels:

name: tomcat001

spec:

containers:

- name: tomcat001

image: tomcat:7.0.82-jre7

tty: true

ports:

- containerPort: 8080

2)在dashboard頁面上傳這個tomcat.yaml文件,操作如下圖所示:?

25.png

3)等鏡像下載和容器創建成功后,在dashboard的部署頁面可以看到tomcat001的部署情況,如下圖

26.png

4)創建一個文件tomcat-svc.yaml,內容如下:

apiVersion:?v1

kind:?Service

metadata:?

? ?name: tomcat001

spec:??

? ?type: NodePort ?

? ?ports:? ? ? ?

? ? ? ? ? - port:?8080?? ? ? ??

? ? ? ? ?nodePort:?30018?

? selector: ? ?

? ? ? name: tomcat001

5)如同上個步驟,上傳后在dashboard的“服務”頁面查看

27.png

6)通過業務節點slave1的IP地址訪問

http://192.168.56.130:30018/

28.png

3.5、安裝kubectl工具

1)下載kubectl工具

有兩種下載方式,您可以選擇其中任意一種:

(1)在我的GitHub下載,地址是:https://github.com/zq2599/blog_demos/blob/master/k8s_tools/kubectl/linux/kubectl.zip,在這個頁面點擊”download”按鈕即可下載,下載后記得解壓;

?(2)在linux機器上執行以下命令下載:

# curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s?https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

2)設置工具

(1)kubectl文件上傳到linux機器后,授權

# chmod +x kubectl

(2)將kubectl移動到可以全局訪問的目錄下

# mv ./kubectl /usr/local/bin/

(3)測試,任意目錄執行一下語句

29.png

工具已經準備好,接下來我們把配置做好,使得kubectl可以連接到K8S上執行命令;

3)配置參數

(1)在rancher的管理頁面上,點擊下圖紅框1中的”CLI”,在出現的頁面中點擊紅框2中的”生成配置“:

30.png

(2)如下圖,點擊紅框中的”復制到剪切板“,將按鈕上方的配置信息復制下來:

31.png

(3)創建文件,復制上面的參數

# mkdir ~/.kub

32.png

(4)查看進程服務

# kubectl get service -a -o wide --all-namespaces

33.png

34.png

到此,部署完畢!!!!

問題來了,每次訪問rancher直接進入了管理平臺,一點安全性可言都沒有,下來我們來設置“系統管理”

?

四、賬號安全設置

4.1、日志審計

只有管理員用戶有權限訪問審計日志。審計日志在系統管理->審計日志。

35.png

Rancher的審計日志是不同事件類型的集合:

(1)任何帶有前綴api的事件是API的一次調用。事件類型將記錄API操作,誰執行的操作以及API調用的方式(即通過UI,通過API密鑰)。

(2)何沒有帶api前綴的事件都是Rancher Server做的事情。例如,在協調服務的容器期間,在實例創建時會產生一個instance.create事件。

4.2、賬號設置

36.png

編輯“環境管理”---master-k8s

37.png

4.3、訪問控制

用戶在訪問你的Rancher服務之前,需要進行身份認證。同時,只有擁有合法的API密鑰才能使用Rancher API。

38.png

(1)活動目錄

選擇活動目錄圖標。 如果你想要通過TLS來使用活動目錄,請確保你已經使用了相應的證書來啟動Rancher Server。填寫相關信息后,通過點擊身份認證進行認證校驗。 當活動目錄認證成功后,你將自動以已認證的用戶名身份登錄。并且把你的賬號設置為了管理員權限。

(2)Azure AD 驗證

選擇Azure AD圖標。 填寫相應信息并單擊Azure認證進行認證校驗。 當認證成功后,你將自動以已認證的用戶名身份登錄。并且把你的賬號設置為了管理員權限。

(3)GitHub

選擇GitHub圖標,并按照用戶界面中的說明將Rancher注冊為GitHub應用程序。 點擊使用GitHub進行身份認證后,當認證成功后,你將自動以已認證的Github賬號登錄。并且把你的賬號設置為了管理員權限。

(4)local

選擇本地圖標。 通過提供登錄用戶名,全名和密碼來創建管理員用戶。 點擊啟用本地認證來啟用本地身份認證。 通過單擊此按鈕,管理員用戶將被創建并保存在數據庫中。這時你將自動用剛剛創建的管理員帳戶登錄到Rancher服務。

39.png

(5)OpenLDAP

填寫對應信息后,通過點擊身份認證進行認證校驗。當OpenLDAP認證成功后,你將自動以已認證的用戶名身份登錄。并且把你的賬號設置為了管理員權限。

(6)Shibboleth

選擇Shibboleth圖標。 填寫Shibboleth帳戶的配置信息,點擊保存保存信息,然后點擊測試來測試訪問控制是否正常工作。

在使用Shibboleth時,你應該注意一些已知的問題:

(1)不支持搜索或查找功能。 在添加用戶時,請確保輸入的用戶ID是準確的,這樣才能保證用戶被添加成功。

(2)當添加用戶到一個環境時, 不支持組ID,除非管理員是該組的成員之一。

功能模塊比較復雜,后續補充。。。。。

轉載于:https://www.cnblogs.com/duwamish/p/10950766.html

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

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

相關文章

[工具]java_sublime的快速使用

目錄 使用 : 怎么運行: 調整字體: 使用 : 新建--->寫好代碼后-->另存為尾綴是.java的文件 怎么運行: 在你另存為的目錄下cmd調用控制臺輸入dos指令--->執行javac 文件名.java(有.java尾綴)(編譯為.class文件)--->java 文件名(沒有.class尾綴設計者認為執行的是…

基于SOA的銀行系統架構

Part-1 【簡述】 1.通過引入面向服務架構&#xff08;SOA&#xff09;&#xff0c;企業服務總線&#xff08;ESB&#xff09;&#xff0c;適配器&#xff08;Adapter&#xff09;及面向構件等技術&#xff0c;嘗試打造一個統一業務流程服務平臺&#xff0c;實現面向流程的服務…

一次前后端分離的實踐

前后端分離該如何做? 這個問題&#xff0c;不同的技術人員&#xff0c;由于所處的崗位不一樣&#xff0c;給出的答案都不一樣。 前后端分離的問題&#xff0c;不僅僅是技術上的選型問題&#xff0c;還涉及到整個團隊在認知、職責、流程上面重新定義的問題&#xff0c;這也是為…

queryList爬蟲獲取內容的幾種方法總結 queryList給抓取的內容增加html追加元素html 代碼實例...

//簡略內容: 1. $data1 $ql->find(.two img)->map(function($item){return $item->alt; }); // 等價下面這句話 $data2 $ql->find(.two img)->attrs(alt);2. $texts $ql->find(.two>a)->texts(); $htmls $ql->find(#one span)->htmls();3. $…

C++解析-外傳篇(1):異常處理深度解析

0.目錄 1.異常的最終處理 2.結束函數terminate() 3.小結 1.異常的最終處理 問題&#xff1a; 如果在main函數中拋出異常會發生什么&#xff1f; 如果異常不處理&#xff0c;最后會傳到哪里&#xff1f; 下面的代碼的輸出什么&#xff1f; 示例——異常的最終處理&#xff1f;&a…

《淺談架構之路:前后端分離模式》 - 山人行 - 博客園

前言&#xff1a;分離模式 對前后端分離研究了一段時間&#xff0c;恰逢公司有一個大項目決定嘗試使用前后端分離模式進行&#xff0c;便參與其中。該項目從2016年初立項至今&#xff0c;平平穩穩得度過&#xff0c;但也涌現出越來越多的問題&#xff0c;絕對不是說前后端分離模…

springboot快速集成swagger

今天技術總監說&#xff1a;小明&#xff0c;我們本次3.0改造&#xff0c;使用swagger2.0作為前后端分離的接口規范&#xff0c;它可以一鍵生成前后端的API,一勞永逸……小明&#xff1a;&#xff1f;&#xff1f;&#xff1f; Spring Boot 框架是目前非常流行的微服務框架&…

php curl處理get和post請求

CURL 是一個利用URL語法規定來傳輸文件和數據的工具&#xff0c;支持很多協議&#xff0c;如HTTP、FTP、TELNET等。最爽的是&#xff0c;PHP也支持 CURL 庫。使用PHP的CURL 庫可以簡單和有效地去抓網頁。你只需要運行一個腳本&#xff0c;然后分析一下你所抓取的網頁&#xff0…

【Web】JavaWeb項目為什么我們要放棄jsp?為什么要前后端解耦?為什么要前后端分離?2.0版,為分布式架構打基礎。 - CSDN博客

前戲 前后端分離已成為互聯網項目開發的業界標準使用方式&#xff0c;通過nginxtomcat的方式&#xff08;也可以中間加一個nodejs&#xff09;有效的進行解耦&#xff0c; 并且前后端分離會為以后的大型分布式架構、彈性計算架構、微服務架構、多端化服務&#xff08;多種客戶…

MongoDB升級導致啟動失敗

起因 最近項目使用MongoDB,但是作為一個技術菜鳥&#xff0c;NoSQL數據庫我還真不會用&#xff0c;于是我就在自己的阿里云服務器上安裝了一個MongoDB4.0.9。 現象 但是當我使用yum -y update升級以后&#xff0c;MongoDB無法啟動了&#xff0c;即使重裝刪除了MongDB的文件了還…

測者的測試技術手冊:揭開java method的一個秘密--巨型函數

揭開java method的一個秘密&#xff1a;巨型函數 相信&#xff0c;很多人都不知道Java的Method的上限為64K。本文將超過這個上限的函數叫做巨型函數。 巨型函數的問題 1、如果代碼超過了這個限制&#xff0c;Java編譯器就報"Code too large to complier"的錯誤。 2、…

前端攻略系列(二) - 前端各種面試題

幸運且光榮的被老大安排了一個任務 - “去整理些前端面試題”。年前確實不是招人的好時候&#xff0c;所以我們前端團隊經過了超負荷的運轉&#xff0c;終于堅持過了春節。春節以后就開始招人啦&#xff0c;這套題考察的目標就是基礎基礎再基礎&#xff0c;嘿嘿。 事先聲明&…

html 初識

一、web請求流程模擬 python編寫的簡易服務器應用程序 import socketserversocket.socket() ip_port (127.0.0.1,8080) server.bind(ip_port) server.listen()while 1:conn, addr server.accept()from_browser_msgconn.recv(1024)print(from_browser_msg)conn.send(bHTTP/1.1 …

Iframe的那些事

在web開發中&#xff0c;經常會用到iframe&#xff0c;難免會碰到需要在父窗口中使用iframe中的元素、或者在iframe框架中使用父窗口的元素 js 在父窗口中獲取iframe中的元素 1、 格式&#xff1a;window.frames["iframe的name值"].document.getElementByIdx_x(…

異常處理try...catch...throw

C 引入了異常處理機制。其基本思想是&#xff1a;函數 A 在執行過程中發現異常時可以不加處理&#xff0c;而只是“拋出一個異常”給 A 的調用者&#xff0c;假定為函數 B。 拋出異常而不加處理會導致函數 A 立即中止&#xff0c;在這種情況下&#xff0c;函數 B 可以選擇捕獲 …

Makefile 中:= ?= += =的區別

是最基本的賦值: 是覆蓋之前的值? 是如果沒有被賦值過就賦予等號后面的值 是添加等號后面的值轉載于:https://www.cnblogs.com/mingyunrangwozoudaoxianzai/p/10118039.html

原生JS寫Ajax的請求函數

本文主要介紹了如何通過原生JavaScript封裝ajax請求&#xff0c;文中給出了具體的實現代碼和詳細的解釋&#xff0c;希望對你有所幫助。 一、JS原生Ajax ajax&#xff1a;一種請求數據的方式&#xff0c;不需要刷新整個頁面&#xff1b; ajax的技術核心是 XMLHttpRequest 對象&…

軟件工程--第十三周學習進度

第十三周代碼量258 所花時間 6h博客量 2篇了解到的知識點 在尋找“水王”程序編寫時&#xff0c;學習了一種新的設計思想&#xff0c;兩兩刪除法&#xff0c;最后剩下的就是水王。這種設計思想&#xff0c;感覺可以用到多種編程&#xff0c;感覺很有意思。轉載于:https://www.c…

如何使用 tf object detection

# 如何使用 tf object detectionhttps://juejin.i m/entry/5a7976166fb9a06335319080https://towardsdatascience.com/how-to-train-your-own-object-detector-with-tensorflows-object-detector-api-bec72ecfe1d9https://towardsdatascience.com/building-a-toy-detector-with…

WEB文件上傳之JQuery ajaxfileupload插件使用(二)

1.JQuery ajaxfileupload插件使用準備 下載地址&#xff1a; http://www.phpletter.com/DOWNLOAD/ 2.原理分析 ajaxfileupload也是利用iframe實現無刷新異步提交&#xff0c;與我的上一篇文章&#xff08;WEB文件上傳之apache common upload使用&#xff08;一&#xff09;&…