企業級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、系統環境

主機名

系統

IP

作用

master

CentOS7.4

192.168.56.129

主控制節點

slave1

CentOS7.4

192.168.56.130

業務節點

下面兩個節點都要配置

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

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

名稱

Private Registry for Add-Ons and Pod Infra Container Image

registry.cn-shenzhen.aliyuncs.com

Image namespace for Add-Ons and Pod Infra Container Image

rancher_cn

Image namespace for kubernetes-helm Image

rancher_cn

Pod Infra Container Image

rancher_cn/pause-amd64:3.0

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,除非管理員是該組的成員之一。

功能模塊比較複雜,後續補充。。。。。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章