Rancher是一個開源的全棧化企業級容器管理平臺,經過極簡的操做體驗和強大完善的功能,讓企業用戶在生產環境中輕鬆落地容器技術。html
首先安裝 docker, 而且啓動docker。node
yum -y install docker
service docker start
複製代碼
安裝rancher。(注意檢查端口是否被佔用)nginx
sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
複製代碼
啓動後打開 https://SERVER_IP SERVER_IP 爲你的ip地址,能夠看到:docker
輸入密碼而且確認好你的ip地址就能夠進入控制檯了。json
至此,rancher安裝成功。api
在控制檯中咱們新建一個集羣。bash
這裏選擇k8s的集羣而且填寫咱們須要的名稱,點擊下一步。服務器
這裏須要把etcd和control都鉤上,公網地址須要填寫另外的一臺服務器ip來充當這三種角色,內網名稱也同樣,節點名稱就填你須要的。app
最後按照提示把下面的命令複製到你剛剛填寫的公網地址的服務器來執行。負載均衡
點擊完成再回到控制檯,等待比較長的一段時間後能夠看到集羣已經被建立起來了。
能夠看到具體節點的cpu和內存的使用。
點擊菜單上的主機,就能夠看到主機的基本狀況了。
點擊編輯集羣,再爲此添加一個節點(搶佔式服務器)
這一個節點只須要充當worker角色,主機地址和內網地址一樣填寫,下面的步驟和第一次添加節點一致。
添加完畢後能夠在控制檯看到兩個節點已經被添加到集羣上了。
爲了後面鏡像的更新方便,必須弄一套本身的私有docker倉庫,rancher就有現成的配置和插件。
點擊集羣上的system,而後點擊應用商店。
開啓應用商店而且找到docker-reistry安裝。
商店還有不少能夠用的插件(自行了解)。
安裝完畢後能夠點擊詳情看到咱們的倉庫被創建在某個節點上。
至此咱們只須要往這地址推送咱們的鏡像便可。(若是沒有負載域名的記得開啓docker的daemon.json裏的insecure-registrie配置)。
講述一下pod,deployment,service,pvc和storageClass的yml的簡單編寫,詳情
apiVersion: v1 #必選,版本號,例如v1
kind: Pod #必選,Pod
metadata: #必選,元數據
name: helloworld #必選,Pod名稱
namespace: string #必選,Pod所屬的命名空間
labels: #自定義標籤
- name: helloworld #自定義標籤名字
spec: #必選,Pod中容器的詳細定義
containers: #必選,Pod中容器列表
- name: helloworld #必選,容器名稱
image: 10.101.171.110:5000/test/nginx:v1 #必選,容器的鏡像名稱
imagePullPolicy: IfNotPresent #獲取鏡像的策略 Alawys表示下載鏡像 IfnotPresent表示優先使用本地鏡像,不然下載鏡像,Nerver表示僅使用本地鏡像
ports: #須要暴露的端口庫號列表
- name: string #端口號名稱
containerPort: 80 #容器須要監聽的端口號
env: #容器運行前需設置的環境變量列表
- name: string #環境變量名稱
value: string #環境變量的值
resources: #資源限制和請求的設置
limits: #資源限制的設置
cpu: 25m #Cpu的限制,單位爲core數,將用於docker run --cpu-shares參數
memory: 128Mi #內存限制,單位能夠爲Mib/Gib,將用於docker run --memory參數
requests: #資源請求的設置
cpu: 5m #Cpu請求,容器啓動的初始可用數量
memory: 64Mi #內存清楚,容器啓動的初始可用數量
複製代碼
比較重要的是metadata下的名稱和標籤,由於後面說到的service就是經過標籤來識別的,其餘的參數比較簡單就很少闡述了。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: helloworld
spec:
replicas: 2 #容器數量
template:
metadata:
labels:
app: helloworld #標籤
spec:
# volumes:
# - name: content-storage
# persistentVolumeClaim:
# claimName: nfs-pvc
containers:
- name: helloword-pod
image: 47.103.120.54:31418/test/nginx
imagePullPolicy: Always #老是拉取鏡像
ports:
- containerPort: 80
# volumeMounts:
# - mountPath: "/usr/share/nginx/html"
# name: content-storage
resources: #資源限制和請求的設置
limits: #資源限制的設置
cpu: 25m #Cpu的限制,單位爲core數,將用於docker run --cpu-shares參數
memory: 128Mi #內存限制,單位能夠爲Mib/Gib,將用於docker run --memory參數
requests: #資源請求的設置
cpu: 5m #Cpu請求,容器啓動的初始可用數量
memory: 64Mi #內存清楚,容器啓動的初始可用數量
複製代碼
日常只須要添加deployment就能夠了,由於負載都是已部署爲單位的,參數裏面有一個volumeMounts是指pvc的名稱和持久卷要掛載的路徑。
apiVersion: v1
kind: Service
metadata:
name: helloworld-service
labels:
name: helloworld-service
spec:
type: NodePort #這裏表明是NodePort類型的
ports:
- port: 80 #這裏的端口和clusterIP(10.97.114.36)對應,即10.97.114.36:80,供內部訪問。
targetPort: 80 #端口必定要和container暴露出來的端口對應,nginx暴露出來的端口是80,因此這裏也應是80
protocol: TCP
nodePort: 32143 # 全部的節點都會開放此端口,此端口供外部調用。
selector:
app: helloworld #這裏選擇器必定要選擇容器的標籤
複製代碼
service是提供外部訪問的,全部必須提供外部端口,在後面增長了負載之後會自動建立sercice。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-storageclass
provisioner: nfs-provisioner
複製代碼
StorageClass 爲管理員提供了描述存儲 "class(類)" 的方法。 不一樣的 class 可能會映射到不一樣的服務質量等級或備份策略,或由羣集管理員肯定的任意策略。 Kubernetes 自己不清楚各類 class 表明的什麼。這個概念在其餘存儲系統中有時被稱爲「配置文件」。簡單來講就是爲了建立pv而使用的一個類。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: nfs-storageclass
resources:
requests:
storage: 1Mi
複製代碼
PersistentVolumeClaim(PVC)是用戶存儲的請求。它與 Pod 類似。Pod 消耗節點資源,PVC 消耗 PV 資源。Pod 能夠請求特定級別的資源(CPU 和內存)。聲明能夠請求特定的大小和訪問模式(例如,能夠以讀/寫一次或 只讀屢次模式掛載)。必須注意的是accessModes 和 storageClassName,一個是模式一個是剛剛註冊的storageClass。
在rancher控制檯中,點擊部署而且倒入yml進行添加deployment
導入寫好的yml能夠看到部署成功後deployment
能夠看到下面有不少調度規則和縮放策略等,能夠自行配置。
在集羣下能夠添加存儲類和持久卷。
以建立nfs存儲類爲例子,首先能夠先看上一篇文章爲你的服務器搭建nfs服務。
重寫storeageClass.yml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: grafana-nfs
namespace: default
provisioner: fuseim.pri/ifs
reclaimPolicy: Retain
複製代碼
重寫pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-claim
namespace: default
# annotations:
# volume.beta.kubernetes.io/storage-class: "grafana-nfs"
spec:
storageClassName: grafana-nfs
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Mi
複製代碼
重寫deployment.yml
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: helloworld
spec:
replicas: 2 #容器數量
template:
metadata:
labels:
app: helloworld #標籤
spec:
volumes:
- name: nfs-client-root
persistentVolumeClaim:
claimName: test-claim
# nfs:
# server: 47.102.40.125
# path: /home/pvc
containers:
- name: helloword-pod
image: 47.102.40.125:30009/test/nginx
imagePullPolicy: Always #老是拉取鏡像
ports:
- containerPort: 80
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: fuseim.pri/ifs
- name: NFS_SERVER
value: 47.102.40.125 # nfs服務的監聽地址
- name: NFS_PATH
value: /home/pvc
resources: #資源限制和請求的設置
limits: #資源限制的設置
cpu: 25m #Cpu的限制,單位爲core數,將用於docker run --cpu-shares參數
memory: 128Mi #內存限制,單位能夠爲Mib/Gib,將用於docker run --memory參數
requests: #資源請求的設置
cpu: 5m #Cpu請求,容器啓動的初始可用數量
memory: 64Mi #內存清楚,容器啓動的初始可用數量
複製代碼
注意 47.102.40.125 爲你的nfs服務地址,mountPath爲你pod掛載的目錄。
從新倒入這三個文件,在控制檯中再建立適應的pv
綁定成功後,查看pod裏面的文件夾,能夠看到掛載成功。
經過控制檯添加負載均衡入口
建立成功
訪問既可展現pod中的項目。
根據頁面提示添加完代碼庫後,能夠看到:
啓動須要構建的代碼庫,編輯配置,構建須要的流程。
第一步是默認的拉取代碼。第二步就是拉取所需的鏡像和推送鏡像的倉庫地址。第三步就是部署須要的pod。
在最後一步我並無實現,由於我是單機測試,而這裏的倉庫是須要https訪問的~若是有好的解決方法歡迎下面留言。