企业级rancher搭建Kubernetes(采用rancher管理平台搭建k8s)
一、簡介
Rancher簡介
來源官方:https://www.cnrancher.com/
? ? ? ?Rancher是一個開源的企業(yè)級容器管理平臺。通過Rancher,企業(yè)再也不必自己使用一系列的開源軟件去從頭搭建容器服務(wù)平臺。Rancher提供了在生產(chǎn)環(huán)境中使用的管理Docker和Kubernetes的全棧化容器部署與管理平臺。
Rancher由以下四個部分組成:
1.1、基礎(chǔ)設(shè)施編排
Rancher可以使用任何公有云或者私有云的Linux主機(jī)資源。Linux主機(jī)可以是虛擬機(jī),也可以是物理機(jī)。Rancher僅需要主機(jī)有CPU,內(nèi)存,本地磁盤和網(wǎng)絡(luò)資源。從Rancher的角度來說,一臺云廠商提供的云主機(jī)和一臺自己的物理機(jī)是一樣的。
? ? ?Rancher為運行容器化的應(yīng)用實現(xiàn)了一層靈活的基礎(chǔ)設(shè)施服務(wù)。Rancher的基礎(chǔ)設(shè)施服務(wù)包括網(wǎng)絡(luò),?存儲,?負(fù)載均衡,?DNS和安全模塊。Rancher的基礎(chǔ)設(shè)施服務(wù)也是通過容器部署的,所以同樣Rancher的基礎(chǔ)設(shè)施服務(wù)可以運行在任何Linux主機(jī)上。
1.2、容器編排與調(diào)度
很多用戶都會選擇使用容器編排調(diào)度框架來運行容器化應(yīng)用。Rancher包含了當(dāng)前全部主流的編排調(diào)度引擎,例如Docker Swarm, Kubernetes, 和Mesos。同一個用戶可以創(chuàng)建Swarm或者Kubernetes集群。并且可以使用原生的Swarm或者Kubernetes工具管理應(yīng)用。
除了Swarm,Kubernetes和Mesos之外,Rancher還支持自己的Cattle容器編排調(diào)度引擎。Cattle被廣泛用于編排Rancher自己的基礎(chǔ)設(shè)施服務(wù)以及用于Swarm集群,Kubernetes集群和Mesos集群的配置,管理與升級。
1.3、應(yīng)用商店
Rancher的用戶可以在應(yīng)用商店里一鍵部署由多個容器組成的應(yīng)用。用戶可以管理這個部署的應(yīng)用,并且可以在這個應(yīng)用有新的可用版本時進(jìn)行自動化的升級。Rancher提供了一個由Rancher社區(qū)維護(hù)的應(yīng)用商店,其中包括了一系列的流行應(yīng)用。Rancher的用戶也可以創(chuàng)建自己的私有應(yīng)用商店。
1.4、企業(yè)級權(quán)限管理
? ? ? ? ?Rancher支持靈活的插件式的用戶認(rèn)證。支持Active Directory,LDAP, Github等?認(rèn)證方式。 Rancher支持在環(huán)境級別的基于角色的訪問控制 (RBAC),可以通過角色來配置某個用戶或者用戶組對開發(fā)環(huán)境或者生產(chǎn)環(huán)境的訪問權(quán)限。
下圖展示了Rancher的主要組件和功能:
Kubernetes簡介
1.1 基礎(chǔ)概念
Kubernetes(通常寫成“k8s”)Kubernetes是Google開源的容器集群管理系統(tǒng)。其設(shè)計目標(biāo)是在主機(jī)集群之間提供一個能夠自動化部署、可拓展、應(yīng)用容器可運營的平臺。Kubernetes通常結(jié)合docker容器工具工作,并且整合多個運行著docker容器的主機(jī)集群,Kubernetes不僅僅支持Docker,還支持Rocket,這是另一種容器技術(shù)。
功能特性:
-
自動化容器部署與復(fù)制
-
隨時擴(kuò)展或收縮容器規(guī)模
-
組織容器成組,提供容器間的負(fù)載均衡
-
快速更新及回滾容器版本
-
提供彈性伸縮,如果某個容器失效就進(jìn)行替換
1.2 架構(gòu)圖
1.3 組件
1.3.1 Master
Master節(jié)點上面主要由四個模塊組成:APIServer、scheduler、controller manager、etcd
-
APIServer:APIServer負(fù)責(zé)對外提供RESTful的Kubernetes API服務(wù),它是系統(tǒng)管理指令的統(tǒng)一入口,任何對資源進(jìn)行增刪改查的操作都要交給APIServer處理后再提交給etcd。如架構(gòu)圖中所示,kubectl(Kubernetes提供的客戶端工具,該工具內(nèi)部就是對Kubernetes API的調(diào)用)是直接和APIServer交互的。
-
schedule:scheduler的職責(zé)很明確,就是負(fù)責(zé)調(diào)度pod到合適的Node上。如果把scheduler看成一個黑匣子,那么它的輸入是pod和由多個Node組成的列表,輸出是Pod和一個Node的綁定,即將這個pod部署到這個Node上。Kubernetes目前提供了調(diào)度算法,但是同樣也保留了接口,用戶可以根據(jù)自己的需求定義自己的調(diào)度算法。
-
controller manager:如果說APIServer做的是“前臺”的工作的話,那controller manager就是負(fù)責(zé)“后臺”的。每個資源一般都對應(yīng)有一個控制器,而controller manager就是負(fù)責(zé)管理這些控制器的。比如我們通過APIServer創(chuàng)建一個pod,當(dāng)這個pod創(chuàng)建成功后,APIServer的任務(wù)就算完成了。而后面保證Pod的狀態(tài)始終和我們預(yù)期的一樣的重任就由controller manager去保證了。
-
etcd:etcd是一個高可用的鍵值存儲系統(tǒng),Kubernetes使用它來存儲各個資源的狀態(tài),從而實現(xiàn)了Restful的API。
1.3.2 Node
每個Node節(jié)點主要由三個模塊組成:kubelet、kube-proxy、runtime。
?runtime指的是容器運行環(huán)境,目前Kubernetes支持docker和rkt兩種容器。
-
kube-proxy:該模塊實現(xiàn)了Kubernetes中的服務(wù)發(fā)現(xiàn)和反向代理功能。反向代理方面:kube-proxy支持TCP和UDP連接轉(zhuǎn)發(fā),默認(rèn)基于Round Robin算法將客戶端流量轉(zhuǎn)發(fā)到與service對應(yīng)的一組后端pod。服務(wù)發(fā)現(xiàn)方面,kube-proxy使用etcd的watch機(jī)制,監(jiān)控集群中service和endpoint對象數(shù)據(jù)的動態(tài)變化,并且維護(hù)一個service到endpoint的映射關(guān)系,從而保證了后端pod的IP變化不會對訪問者造成影響。另外kube-proxy還支持session affinity。
-
kubelet:Kubelet是Master在每個Node節(jié)點上面的agent,是Node節(jié)點上面最重要的模塊,它負(fù)責(zé)維護(hù)和管理該Node上面的所有容器,但是如果容器不是通過Kubernetes創(chuàng)建的,它并不會管理。本質(zhì)上,它負(fù)責(zé)使Pod得運行狀態(tài)與期望的狀態(tài)一致。
1.3.3 Pod
? ? ? Pod是k8s進(jìn)行資源調(diào)度的最小單位,每個Pod中運行著一個或多個密切相關(guān)的業(yè)務(wù)容器,這些業(yè)務(wù)容器共享這個Pause容器的IP和Volume,我們以這個不易死亡的Pause容器作為Pod的根容器,以它的狀態(tài)表示整個容器組的狀態(tài)。一個Pod一旦被創(chuàng)建就會放到Etcd中存儲,然后由Master調(diào)度到一個Node綁定,由這個Node上的Kubelet進(jìn)行實例化。
每個Pod會被分配一個單獨的Pod IP,Pod IP + ContainerPort 組成了一個Endpoint。
1.3.4 Service
? ? ? Service其功能使應(yīng)用暴露,Pods 是有生命周期的,也有獨立的 IP 地址,隨著 Pods 的創(chuàng)建與銷毀,一個必不可少的工作就是保證各個應(yīng)用能夠感知這種變化。這就要提到 Service 了,Service 是 YAML 或 JSON 定義的由 Pods 通過某種策略的邏輯組合。更重要的是,Pods 的獨立 IP 需要通過 Service 暴露到網(wǎng)絡(luò)中。
二、準(zhǔn)備工作
2.1、系統(tǒng)環(huán)境
| ? | ? | ? | ? |
| ? | ? | ? | ? |
| ? | ? | ? | ? |
下面兩個節(jié)點都要配置
2.2、檢查hosts--配置后檢查是否能解析外網(wǎng)
192.168.56.129 master
192.168.56.130 slave1
2.3、暫時關(guān)閉防火墻和seLinux
2.4、開啟IPV4轉(zhuǎn)發(fā)
在/etc/sysctl.conf新添加如下參數(shù)
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0
生效命令:
[root@master ~]# sysctl -p
查看
[root@master ~]# sysctl -a|grep "ip_forward"
2.5、關(guān)閉Swap交換分區(qū)
2.6、安裝Docker1.12.6版本
什么版本的Docker才能適配Rancher和Kubernetes
請參考:http://rancher.com/docs/rancher/v1.6/zh/hosts/#docker
1)執(zhí)行命令:
[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
2)啟動
[root@master ~]# systemctl enable docker
[root@master ~]# systemctl start docker
3)查看版本
[root@master ~]# docker version
2.7、設(shè)置Docker鏡像加速
此時如果用docker pull命令下載鏡像,本地會連接hub.docker.com網(wǎng)站去下載,耗時較長,因此我們可以設(shè)置docker鏡像加速,使得本地連接去國內(nèi)鏡像倉庫下載,鏡像加速的設(shè)置有很多種,本章以阿里云的設(shè)置為例,步驟如下:
1)創(chuàng)建目錄:
[root@master ~]# mkdir /etc/docker
2)設(shè)置鏡像倉庫地址:
tee /etc/docker/daemon.json <<-'EOF'{ ?"registry-mirrors": ["https://xwx6wxd1.mirror.aliyuncs.com"] }EOF
3)重新加載配置:
[root@master ~]# systemctl daemon-reload
4)重啟服務(wù)
[root@master ~]# systemctl restart docker.service
備注:slave1節(jié)點操作一致
三、安裝rancher
官方安裝文檔:https://www.cnrancher.com/docs/rancher/v2.x/cn/overview/
3.1、在master機(jī)器執(zhí)行以下命令,即可安裝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
報錯如下:
參考地址:https://blog.csdn.net/shida_csdn/article/details/79376761
[root@master ~]# pkill docker ? ? ? ? ? ? ? ? ? ? ? ? #終止進(jìn)程
[root@master ~]# iptables -t nat -F ? ? ? ? ? ? ? ? #清空nat表的所有鏈
[root@master ~]# ifconfig docker0 down ? ? ? ?#停止docker默認(rèn)網(wǎng)橋
[root@master ~]# brctl delbr docker0 ? ? ? ? ? ? #刪除網(wǎng)橋
[root@master ~]# systemctl restart docker ? ? ? #重啟docker
查看即可
3.2、在瀏覽器訪問http://192.168.56.129:8080,可以看到初始頁面,在頁面的右下角選擇“簡體中文”后,頁面如下所示:
至此,rancher安裝成功,接下來就是kubernetes的搭建工作。
3.3、配置環(huán)境模板
1)、環(huán)境配置---“Default”選擇“環(huán)境管理”,如圖
2)添加環(huán)境模塊
輸入項目名:k8s-TempLate
如下圖,下拉菜單只有一個選擇,請選中
上圖四個紅框填入的內(nèi)容如下表所示:
| ? | ? |
| ? | ? |
| ? | ? |
| ? | ? |
| ? | ? |
3)將頁面拖動到最底部,點擊“設(shè)置”按鈕,如下圖:
4)再將頁面拖動到最底部,點擊“創(chuàng)建”按鈕,如下圖:
這樣我們就完成了環(huán)境模板的配置,這里面的參數(shù)幫助rancher尋找國內(nèi)的鏡像倉庫,從而避免了無法從google倉庫下載鏡像的問題,在以往這個問題是通過上網(wǎng)來解決的;
3.4、創(chuàng)建Kubernetes
1)點擊“創(chuàng)建環(huán)境”按鈕,如下圖紅框:
2)在創(chuàng)建環(huán)境的頁面中,輸入新的環(huán)境的名稱:master-k8s,選擇我們剛才創(chuàng)建的環(huán)境模板,在點擊底部的“創(chuàng)建”按鈕,如下圖:
3)如下圖紅框所示,在左上角位置選擇剛剛創(chuàng)建的環(huán)境,可以看到目前環(huán)境已經(jīng)OK,正在等待node的加入:
至此,Kubernetes的master已經(jīng)搭建完畢!!!!
3.5、添加節(jié)點——將機(jī)器加入到K8S環(huán)境
1)master機(jī)器的IP是192.168.56.129,所以在瀏覽器打開地址192.168.56.129:8080,左上角選擇新增的環(huán)境,可以看到如下圖的頁面,點擊紅框中的“添加主機(jī)”:
2)如下圖,在頁面上確認(rèn)紅框中的IP地址是不是你的master機(jī)器對外暴露的地址(多網(wǎng)卡的機(jī)器要關(guān)注),確認(rèn)無誤后點擊“保存”?.
3)如下圖,點擊紅框按鈕,會將此按鈕左側(cè)的文本信息復(fù)制下來:
4)登錄slave1節(jié)點,執(zhí)行上面復(fù)制下來的命令,該命令會先下載docker鏡像,然后啟動容器去加入到K8S環(huán)境,此時再去刷新管理頁面,見到如下圖所示,已經(jīng)感知到機(jī)器的加入,開始接下來的一系列操作,此時請耐心等待(等待時間比較,喝杯茶再回來):?
有可能節(jié)點獲取不到東西,建議檢查一下安全規(guī)則(防火墻、轉(zhuǎn)發(fā)、selinux),配置后重啟即可
5)節(jié)點加入成功后,頁面如下圖所示,點擊紅框中的按鈕就進(jìn)入了K8S的dashboard:?
報Service unavailable錯誤:等待十分鐘左右即可,啟動接口有點慢
下文安裝kubectl裝好之后,在控制臺用kubectl describe命令查看dashbroad的pod和service的執(zhí)行進(jìn)度,查看錯誤日志。
至此,我們已經(jīng)完成了節(jié)點機(jī)器加入K8S環(huán)境的操作,接下來我們快速體驗在K8S環(huán)境創(chuàng)建Pod和Service的操作;
體驗K8S環(huán)境
1)創(chuàng)建一個文件tomcat.yaml,內(nèi)容如下:
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文件,操作如下圖所示:?
3)等鏡像下載和容器創(chuàng)建成功后,在dashboard的部署頁面可以看到tomcat001的部署情況,如下圖
4)創(chuàng)建一個文件tomcat-svc.yaml,內(nèi)容如下:
apiVersion:?v1
kind:?Service
metadata:?
? ?name: tomcat001
spec:??
? ?type: NodePort ?
? ?ports:? ? ? ?
? ? ? ? ? - port:?8080?? ? ? ??
? ? ? ? ?nodePort:?30018?
? selector: ? ?
? ? ? name: tomcat001
5)如同上個步驟,上傳后在dashboard的“服務(wù)”頁面查看
6)通過業(yè)務(wù)節(jié)點slave1的IP地址訪問
http://192.168.56.130:30018/
3.5、安裝kubectl工具
1)下載kubectl工具
有兩種下載方式,您可以選擇其中任意一種:
(1)在我的GitHub下載,地址是:https://github.com/zq2599/blog_demos/blob/master/k8s_tools/kubectl/linux/kubectl.zip,在這個頁面點擊”download”按鈕即可下載,下載后記得解壓;
?(2)在linux機(jī)器上執(zhí)行以下命令下載:
# 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)設(shè)置工具
(1)kubectl文件上傳到linux機(jī)器后,授權(quán)
# chmod +x kubectl
(2)將kubectl移動到可以全局訪問的目錄下
# mv ./kubectl /usr/local/bin/
(3)測試,任意目錄執(zhí)行一下語句
工具已經(jīng)準(zhǔn)備好,接下來我們把配置做好,使得kubectl可以連接到K8S上執(zhí)行命令;
3)配置參數(shù)
(1)在rancher的管理頁面上,點擊下圖紅框1中的”CLI”,在出現(xiàn)的頁面中點擊紅框2中的”生成配置“:
(2)如下圖,點擊紅框中的”復(fù)制到剪切板“,將按鈕上方的配置信息復(fù)制下來:
(3)創(chuàng)建文件,復(fù)制上面的參數(shù)
# mkdir ~/.kub
(4)查看進(jìn)程服務(wù)
# kubectl get service -a -o wide --all-namespaces
到此,部署完畢!!!!
問題來了,每次訪問rancher直接進(jìn)入了管理平臺,一點安全性可言都沒有,下來我們來設(shè)置“系統(tǒng)管理”
?
四、賬號安全設(shè)置
4.1、日志審計
只有管理員用戶有權(quán)限訪問審計日志。審計日志在系統(tǒng)管理->審計日志。
Rancher的審計日志是不同事件類型的集合:
(1)任何帶有前綴api的事件是API的一次調(diào)用。事件類型將記錄API操作,誰執(zhí)行的操作以及API調(diào)用的方式(即通過UI,通過API密鑰)。
(2)何沒有帶api前綴的事件都是Rancher Server做的事情。例如,在協(xié)調(diào)服務(wù)的容器期間,在實例創(chuàng)建時會產(chǎn)生一個instance.create事件。
4.2、賬號設(shè)置
編輯“環(huán)境管理”---master-k8s
4.3、訪問控制
用戶在訪問你的Rancher服務(wù)之前,需要進(jìn)行身份認(rèn)證。同時,只有擁有合法的API密鑰才能使用Rancher API。
(1)活動目錄
選擇活動目錄圖標(biāo)。 如果你想要通過TLS來使用活動目錄,請確保你已經(jīng)使用了相應(yīng)的證書來啟動Rancher Server。填寫相關(guān)信息后,通過點擊身份認(rèn)證進(jìn)行認(rèn)證校驗。 當(dāng)活動目錄認(rèn)證成功后,你將自動以已認(rèn)證的用戶名身份登錄。并且把你的賬號設(shè)置為了管理員權(quán)限。
(2)Azure AD 驗證
選擇Azure AD圖標(biāo)。 填寫相應(yīng)信息并單擊Azure認(rèn)證進(jìn)行認(rèn)證校驗。 當(dāng)認(rèn)證成功后,你將自動以已認(rèn)證的用戶名身份登錄。并且把你的賬號設(shè)置為了管理員權(quán)限。
(3)GitHub
選擇GitHub圖標(biāo),并按照用戶界面中的說明將Rancher注冊為GitHub應(yīng)用程序。 點擊使用GitHub進(jìn)行身份認(rèn)證后,當(dāng)認(rèn)證成功后,你將自動以已認(rèn)證的Github賬號登錄。并且把你的賬號設(shè)置為了管理員權(quán)限。
(4)local
選擇本地圖標(biāo)。 通過提供登錄用戶名,全名和密碼來創(chuàng)建管理員用戶。 點擊啟用本地認(rèn)證來啟用本地身份認(rèn)證。 通過單擊此按鈕,管理員用戶將被創(chuàng)建并保存在數(shù)據(jù)庫中。這時你將自動用剛剛創(chuàng)建的管理員帳戶登錄到Rancher服務(wù)。
(5)OpenLDAP
填寫對應(yīng)信息后,通過點擊身份認(rèn)證進(jìn)行認(rèn)證校驗。當(dāng)OpenLDAP認(rèn)證成功后,你將自動以已認(rèn)證的用戶名身份登錄。并且把你的賬號設(shè)置為了管理員權(quán)限。
(6)Shibboleth
選擇Shibboleth圖標(biāo)。 填寫Shibboleth帳戶的配置信息,點擊保存保存信息,然后點擊測試來測試訪問控制是否正常工作。
在使用Shibboleth時,你應(yīng)該注意一些已知的問題:
(1)不支持搜索或查找功能。 在添加用戶時,請確保輸入的用戶ID是準(zhǔn)確的,這樣才能保證用戶被添加成功。
(2)當(dāng)添加用戶到一個環(huán)境時, 不支持組ID,除非管理員是該組的成員之一。
功能模塊比較復(fù)雜,后續(xù)補(bǔ)充。。。。。
轉(zhuǎn)載于:https://www.cnblogs.com/duwamish/p/10950766.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的企业级rancher搭建Kubernetes(采用rancher管理平台搭建k8s)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vivado安装教程
- 下一篇: queryList爬虫获取内容的几种方法