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

1、簡介node

Rancher簡介linux

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

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

Rancher由如下四個部分組成:算法

1.一、基礎設施編排docker

Rancher可使用任何公有云或者私有云的Linux主機資源。Linux主機能夠是虛擬機,也能夠是物理機。Rancher僅須要主機有CPU,內存,本地磁盤和網絡資源。從Rancher的角度來講,一臺雲廠商提供的雲主機和一臺本身的物理機是同樣的。數據庫

     Rancher爲運行容器化的應用實現了一層靈活的基礎設施服務。Rancher的基礎設施服務包括網絡, 存儲, 負載均衡, DNS和安全模塊。Rancher的基礎設施服務也是經過容器部署的,因此一樣Rancher的基礎設施服務能夠運行在任何Linux主機上。json

1.二、容器編排與調度後端

不少用戶都會選擇使用容器編排調度框架來運行容器化應用。Rancher包含了當前所有主流的編排調度引擎,例如Docker Swarm, Kubernetes, 和Mesos。同一個用戶能夠建立Swarm或者Kubernetes集羣。而且可使用原生的Swarm或者Kubernetes工具管理應用。centos

除了Swarm,Kubernetes和Mesos以外,Rancher還支持本身的Cattle容器編排調度引擎。Cattle被普遍用於編排Rancher本身的基礎設施服務以及用於Swarm集羣,Kubernetes集羣和Mesos集羣的配置,管理與升級。

1.三、應用商店

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

1.四、企業級權限管理

         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、準備工做

2.一、系統環境

       
       
       

下面兩個節點都要配置

2.二、檢查hosts--配置後檢查是否能解析外網

192.168.56.129 master

192.168.56.130 slave1

2.三、暫時關閉防火牆和seLinux

2.四、開啓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.五、關閉Swap交換分區

2.六、安裝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.七、設置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節點操做一致

3、安裝rancher

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

3.一、在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

參考地址:http://www.javashuo.com/article/p-nerwbacy-mh.html

[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.二、在瀏覽器訪問http://192.168.56.129:8080,能夠看到初始頁面,在頁面的右下角選擇「簡體中文」後,頁面以下所示:

8.png

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

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.四、建立Kubernetes

1)點擊「建立環境」按鈕,以下圖紅框:

16.png

2)在建立環境的頁面中,輸入新的環境的名稱:master-k8s,選擇咱們剛纔建立的環境模板,在點擊底部的「建立」按鈕,以下圖:

17.png

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

18.png

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

3.五、添加節點——將機器加入到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.五、安裝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、帳號安全設置

4.一、日誌審計

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

35.png

Rancher的審計日誌是不一樣事件類型的集合:

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

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

4.二、帳號設置

36.png

編輯「環境管理」---master-k8s

37.png

4.三、訪問控制

用戶在訪問你的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,除非管理員是該組的成員之一。

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

相關文章
相關標籤/搜索