您好,登錄后才能下訂單哦!
一、簡介
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的主要組件和功能:
Kubernetes簡介
1.1 基礎概念
Kubernetes(通常寫成“k8s”)Kubernetes是Google開源的容器集群管理系統。其設計目標是在主機集群之間提供一個能夠自動化部署、可拓展、應用容器可運營的平臺。Kubernetes通常結合docker容器工具工作,并且整合多個運行著docker容器的主機集群,Kubernetes不僅僅支持Docker,還支持Rocket,這是另一種容器技術。
功能特性:
自動化容器部署與復制
隨時擴展或收縮容器規模
組織容器成組,提供容器間的負載均衡
快速更新及回滾容器版本
提供彈性伸縮,如果某個容器失效就進行替換
1.2 架構圖
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"
2.5、關閉Swap交換分區
2.6、安裝Docker1.12.6版本
什么版本的Docker才能適配Rancher和Kubernetes
請參考:http://rancher.com/docs/rancher/v1.6/zh/hosts/#docker
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
2)啟動
[root@master ~]# systemctl enable docker
[root@master ~]# systemctl start docker
3)查看版本
[root@master ~]# docker version
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
報錯如下:
參考地址: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,可以看到初始頁面,在頁面的右下角選擇“簡體中文”后,頁面如下所示:
至此,rancher安裝成功,接下來就是kubernetes的搭建工作。
3.3、配置環境模板
1)、環境配置---“Default”選擇“環境管理”,如圖
2)添加環境模塊
輸入項目名:k8s-TempLate
如下圖,下拉菜單只有一個選擇,請選中
上圖四個紅框填入的內容如下表所示:
名稱 | 值 |
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)將頁面拖動到最底部,點擊“設置”按鈕,如下圖:
4)再將頁面拖動到最底部,點擊“創建”按鈕,如下圖:
這樣我們就完成了環境模板的配置,這里面的參數幫助rancher尋找國內的鏡像倉庫,從而避免了無法從google倉庫下載鏡像的問題,在以往這個問題是通過科學上網來解決的;
3.4、創建Kubernetes
1)點擊“創建環境”按鈕,如下圖紅框:
2)在創建環境的頁面中,輸入新的環境的名稱:master-k8s,選擇我們剛才創建的環境模板,在點擊底部的“創建”按鈕,如下圖:
3)如下圖紅框所示,在左上角位置選擇剛剛創建的環境,可以看到目前環境已經OK,正在等待node的加入:
至此,Kubernetes的master已經搭建完畢!!!!
3.5、添加節點——將機器加入到K8S環境
1)master機器的IP是192.168.56.129,所以在瀏覽器打開地址192.168.56.129:8080,左上角選擇新增的環境,可以看到如下圖的頁面,點擊紅框中的“添加主機”:
2)如下圖,在頁面上確認紅框中的IP地址是不是你的master機器對外暴露的地址(多網卡的機器要關注),確認無誤后點擊“保存” .
3)如下圖,點擊紅框按鈕,會將此按鈕左側的文本信息復制下來:
4)登錄slave1節點,執行上面復制下來的命令,該命令會先下載docker鏡像,然后啟動容器去加入到K8S環境,此時再去刷新管理頁面,見到如下圖所示,已經感知到機器的加入,開始接下來的一系列操作,此時請耐心等待(等待時間比較,喝杯茶再回來):
有可能節點獲取不到東西,建議檢查一下安全規則(防火墻、轉發、selinux),配置后重啟即可
5)節點加入成功后,頁面如下圖所示,點擊紅框中的按鈕就進入了K8S的dashboard:
報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文件,操作如下圖所示:
3)等鏡像下載和容器創建成功后,在dashboard的部署頁面可以看到tomcat001的部署情況,如下圖
4)創建一個文件tomcat-svc.yaml,內容如下:
apiVersion: v1
kind: Service
metadata:
name: tomcat001
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30018
selector:
name: tomcat001
5)如同上個步驟,上傳后在dashboard的“服務”頁面查看
6)通過業務節點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機器上執行以下命令下載:
# 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)測試,任意目錄執行一下語句
工具已經準備好,接下來我們把配置做好,使得kubectl可以連接到K8S上執行命令;
3)配置參數
(1)在rancher的管理頁面上,點擊下圖紅框1中的”CLI”,在出現的頁面中點擊紅框2中的”生成配置“:
(2)如下圖,點擊紅框中的”復制到剪切板“,將按鈕上方的配置信息復制下來:
(3)創建文件,復制上面的參數
# mkdir ~/.kub
(4)查看進程服務
# kubectl get service -a -o wide --all-namespaces
到此,部署完畢!!!!
問題來了,每次訪問rancher直接進入了管理平臺,一點安全性可言都沒有,下來我們來設置“系統管理”
四、賬號安全設置
4.1、日志審計
只有管理員用戶有權限訪問審計日志。審計日志在系統管理->審計日志。
Rancher的審計日志是不同事件類型的集合:
(1)任何帶有前綴api的事件是API的一次調用。事件類型將記錄API操作,誰執行的操作以及API調用的方式(即通過UI,通過API密鑰)。
(2)何沒有帶api前綴的事件都是Rancher Server做的事情。例如,在協調服務的容器期間,在實例創建時會產生一個instance.create事件。
4.2、賬號設置
編輯“環境管理”---master-k8s
4.3、訪問控制
用戶在訪問你的Rancher服務之前,需要進行身份認證。同時,只有擁有合法的API密鑰才能使用Rancher API。
(1)活動目錄
選擇活動目錄圖標。 如果你想要通過TLS來使用活動目錄,請確保你已經使用了相應的證書來啟動Rancher Server。填寫相關信息后,通過點擊身份認證進行認證校驗。 當活動目錄認證成功后,你將自動以已認證的用戶名身份登錄。并且把你的賬號設置為了管理員權限。
(2)Azure AD 驗證
選擇Azure AD圖標。 填寫相應信息并單擊Azure認證進行認證校驗。 當認證成功后,你將自動以已認證的用戶名身份登錄。并且把你的賬號設置為了管理員權限。
(3)GitHub
選擇GitHub圖標,并按照用戶界面中的說明將Rancher注冊為GitHub應用程序。 點擊使用GitHub進行身份認證后,當認證成功后,你將自動以已認證的Github賬號登錄。并且把你的賬號設置為了管理員權限。
(4)local
選擇本地圖標。 通過提供登錄用戶名,全名和密碼來創建管理員用戶。 點擊啟用本地認證來啟用本地身份認證。 通過單擊此按鈕,管理員用戶將被創建并保存在數據庫中。這時你將自動用剛剛創建的管理員帳戶登錄到Rancher服務。
(5)OpenLDAP
填寫對應信息后,通過點擊身份認證進行認證校驗。當OpenLDAP認證成功后,你將自動以已認證的用戶名身份登錄。并且把你的賬號設置為了管理員權限。
(6)Shibboleth
選擇Shibboleth圖標。 填寫Shibboleth帳戶的配置信息,點擊保存保存信息,然后點擊測試來測試訪問控制是否正常工作。
在使用Shibboleth時,你應該注意一些已知的問題:
(1)不支持搜索或查找功能。 在添加用戶時,請確保輸入的用戶ID是準確的,這樣才能保證用戶被添加成功。
(2)當添加用戶到一個環境時, 不支持組ID,除非管理員是該組的成員之一。
功能模塊比較復雜,后續補充。。。。。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。