Kubernetes-基於Rancher進行Kubernetes的離線安裝
1、環境準備
在進行Kubernetes部署之前,需要提供其要求的軟硬體環境。此文件描述的場景:在無法直接連線網際網路的情況下,如何進行安裝部署Kubernetes。
1.1 作業系統
作業系統推薦使用:
序號 | 主機 | 角色 | 軟硬體環境 | 硬體配置 | 備註 |
---|---|---|---|---|---|
1 | k8s-master | 主節點 |
|
|
部署Kunbernetes叢集主節點和etcd,用於管理和監控Kubernetes其它的工作節點和存在狀態資訊。 |
2 | k8s-worker01 | 工作節點 |
|
|
部署Kubernetes叢集的工作節點,用於執行容器化的應用。 |
3 | k8s-worker02 | 工作節點 |
|
|
部署Kubernetes叢集的工作節點,用於執行容器化的應用。 |
4 | k8s-worker03 | 工作節點 |
|
|
部署Kubernetes叢集的工作節點,用於執行容器化的應用。 |
5 | nfs-server | NFS伺服器 |
|
|
部署nfs服務,用於為上層所有的應用提供持久化儲存。 |
6 | registry-server | 私有映象倉庫 |
|
|
部署映象倉庫,用於提供映象的儲存和拉取。 |
7 | kubectl/helm | 工具節點 |
|
|
|
8 | public | 下載資源 |
|
|
1.2 設定防火牆策略
需要開放如下的埠:
協議 | 埠 | 描述 |
TCP | 80 | Rancher UI/API when external SSL termination is used |
TCP | 443 | Rancher agent, Rancher UI/API, kubectl |
TCP | 6443 | Kubernetes apiserver |
TCP | 22 | SSH provisioning of nodes using Node Driver |
TCP | 2379 | etcd client requests |
TCP | 2380 | etcd peer communication |
UDP | 8472 | Canal/Flannel VXLAN overlay networking |
TCP | 10250 | kubelet |
TCP/UDP | 30000-32767 | NodePort port range |
TCP | 8081 | Nexus Port |
TCP | 5001 | Registry Port |
如果是剛開始試用,可以先關閉防火牆:
$ systemctl stop firewalld
Ubuntu預設未啟用UFW防火牆,無需設定。也可手工關閉:
$ sudo ufw disable
1.3 環境清理(可選)
1)請檢查有沒有/var/lib/rancher/state/這個資料夾,如果有則刪除;
2)如果以前有通過 ofollow,noindex">Rancher 安裝過kubernetes,請執行命令:
#刪除正在執行的容器
$ docker rm -f -v $(docker ps -aq)
# 刪除儲存卷
$ docker volume rm $(docker volume ls)
#刪除遺留的目錄
$ rm -rf /etc/kubernetes/ssl $ rm -rf /var/lib/etcd $ rm -rf /etc/cni $ rm -rf /opt/cni $ rm -rf /var/run/calico
2、安裝介質下載和準備
1)docker
下載docker的安裝檔案docker-engine-1.12.6-1.el7.centos.x86_64.rpm和docker-engine-selinux-1.12.6-1.el7.centos.noarch.rpm:
$ wget https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-1.12.6-1.el7.centos.x86_64.rpm $ wget https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-selinux-1.12.6-1.el7.centos.noarch.rpm
2)私有映象倉庫
下載nexus3的映象,後續將以nexus3作為私有映象倉庫:
$ docker pull sonatype/nexus3:latest $ docker save sonatype/nexus3:latest > nexus3.tar
3)rancher映象
下載拉取映象的指令碼: rancher-save-images.sh 和上傳映象至映象倉庫的指令碼: rancher-load-images.sh 。
$ wget https://github.com/rancher/rancher/releases/tag/v2.0.0/rancher-save-images.sh $ wget https://github.com/rancher/rancher/releases/tag/v2.0.0/rancher-load-images.sh
通過執行rancher-save-images.sh拉取映象:
$ . rancher-save-images.sh
此指令碼用以下載部署時所需的所有映象,並將這些映象壓縮到 rancher-images.tar.gz 中。
4)kubectl
下載在windows下使用的 kubectl 工具:
$ wget https://storage.googleapis.com/kubernetes-release/release/v1.9.0/bin/windows/amd64/kubectl.exe
5)helm
下載helm客戶端,此處下載的是Windows下的2.8.0版本:
$ wget https://storage.googleapis.com/kubernetes-helm/helm-v2.8.0-windows-amd64.tar.gz
下載helm服務端tiller,此處下載的是Windows下的2.8.0版本:
$ docker pull rancher/tiller:v2.8.2 $ docker save rancher/tiller:v2.8.2 > tiller.tar
3、Docker
Kubernetes1.8需要Docker 1.12.6、1.13.1、17.03;Kubernetes1.8不支援更高版本的Docker。
3.1 Docker安裝
將下載的docker-engine-1.12.6-1.el7.centos.x86_64.rpm和docker-engine-selinux-1.12.6-1.el7.centos.noarch.rpm拷貝至各臺需要安裝Docker的機器上,通過yum localinstall命令進行安裝:
$ yum localinstall -y docker-engine-1.12.6-1.el7.centos.x86_64.rpm docker-engine-selinux-1.12.6-1.el7.centos.noarch.rpm
3.2 設定根目錄(可選)
在docker安裝成功後,通過執行如下的命令可以檢視docker的資訊:
$ docker info
預設情況,docker的根目錄為 /var/lib/docker ,它將會佔據大量的磁碟空間。因此需要預先為其提供足夠的磁碟空間,此處為其掛接一塊專用的磁碟。假設這裡存在一個新增的/dev/vdc磁碟。
1)建立新的專用的根目錄:
$ mkdir /docker-root
2)將磁碟掛接至新的根目錄
$ mount /dev/vdc /docker-root
3)設定掛接永久有效
$ echo “/dev/vdc /docker-root ext4 defaults 0 0” > /etc/fstab
4)將docker設定為使用新的根目錄
$ vi /etc/docker/daemon.json
新增:” graph":
"
/docker-root"
{ "graph":"/docker-root" }
5)重啟docker
$ systemctl daemon-reload $ systemctl restart docker
4、提供網路儲存(可選)
此處以nfs中文網路儲存。
4.1 配置共享目錄
在nfs伺服器中為客戶端配置共享目錄:
# 建立共享根目錄 $ mkdir /nfs-share # 建立私有映象倉庫目錄 $ mkdir /nfs-share/docker-registry $ echo "/nfs-share *(rw,async,no_root_squash)" >> /etc/exports
通過執行如下命令是配置生效:
$exportfs -r
4.2 啟動服務
1)由於必須先啟動rpcbind服務,再啟動nfs服務,這樣才能讓nfs服務在rpcbind服務上註冊成功:
$ systemctl start rpcbind
2)啟動nfs服務:
$ systemctl start nfs-server
3)設定rpcbind和nfs-server開機啟動:
$ systemctl enable rpcbind $ systemctl enable nfs-server
4.3 檢查nfs服務是否正常啟動
$ showmount -e localhost $ mount -t nfs 127.0.0.1:/data /mnt
5、安裝私有映象倉庫
1)匯入映象
複製nexus.tar檔案到需要安裝映象倉庫的機器,並通過docker load命令匯入映象:
$ docker load < nexus.tar
2)設定儲存目錄
建立持久化目錄,並掛接nfs的共享目錄:
$ mkdir /mnt/nexus-data && chmod 777 /mnt/nexus-data $ mount -t nfs {nfs-server}:/nfs-share/docker-registry /mnt/nexus-data
3)執行私有映象倉庫
執行nexus3容器,並8081埠和5001埠,5001埠為docker私有映象倉庫的對外埠:
$ docker run -d -p 8081:8081 -p 5001:5001 -v /mnt/nexus-data:/nexus-data --name nexus sonatype/nexus3
4)建立docker映象倉庫
在nexus3中建立一個名稱為docker的映象倉庫,埠為5001。
6 安裝部署
拷貝tiller.tar、rancher-images.tar.gz和rancher-load-images.sh到安裝rancher服務的機器上。
1)上傳rancher相關映象至私有映象倉庫
執行rancher-load-images.sh:
$ . rancher-load-images.sh
系統會匯入所有的映象,並將其打上私有映象倉庫的標籤,並上傳至私有映象倉庫。
2)上傳tiller映象至私有映象倉庫
# 匯入tiller映象 $ docker load < tiller.tar # 將tiller打上私有映象的標籤 $ docker tag rancher/tiller:v2.8.2 {registry-ip}/rancher/tiller:v2.8.2 # 上傳至私有映象倉庫 $ docker push 10.10.30.190:5001/rancher/tiller:v2.8.2
6.1 安裝rancher服務
通過執行docker run的命令,進行rancher服務的安裝:
$ sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 {registry-ip}/rancher/rancher:2.0.0
6.2 建立叢集
6.2.1 登入系統
1)登入rancher
在rancher服務正常啟動後,通過瀏覽器訪問rancher。
2)設定管理員密碼
在此次登入時,根據提示設定管理員的密碼。
3)設定訪問地址
在設定好管理員的密碼後,設定rancher的對外訪問地址。
4)設定私有映象倉庫
將system-default-registry設定為本文前面建立的私有映象倉庫,此處為10.10.30.190:5001。

6.2.2 建立叢集
進入rancher後,建立名稱為demo的custom型別叢集。
6.3 新增節點
6.3.1 新增Master和etcd
在新增建立叢集的頁面,選擇node角色為“etcd”和“control”,即新增的為Master和etcd節點:
並在叢集上執行如下的命令,以將機器新增到叢集中作為Master和etcd節點。
$ sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes \ -v /var/run:/var/run {registry-ip}/rancher/rancher-agent:v2.0.0 --server https://10.0.32.172 \ --token pn7g52q7htck8s5pgmpdvbsq2lrplw8cxnvhjm4rp5kvf2k9ntx7tt \ --ca-checksum d8be0a0b9f16c3238836e23b338630ab0c737051ceb14ccc35afd13c2898369a --etcd --controlplane
6.3 新增worker
在新增建立叢集的頁面,選擇node角色為“worker”,即新增的為Worker節點:

並在叢集上執行如下的命令,以將機器新增到叢集中作為Worker節點。
$ sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes \ -v /var/run:/var/run {registry-ip}/rancher/rancher-agent:v2.0.0 --server https://10.0.32.172 \ --token pn7g52q7htck8s5pgmpdvbsq2lrplw8cxnvhjm4rp5kvf2k9ntx7tt \ --ca-checksum d8be0a0b9f16c3238836e23b338630ab0c737051ceb14ccc35afd13c2898369a --worker
7 安裝kubectl
此處的kubectl安裝在Windows作業系統中:
1)安裝部署kubectl
拷貝kubectl,並將kubectl.exe所在的地址新增至Windows的環境變數的Path中。
2)配置kubeconfig檔案
在當前使用者的目錄下,建立./kube資料夾,並建立config檔案。
rancher系統中,進入所建立的叢集的主頁,通過點選“Kube config File”進入kubeconfig資訊頁面。並將kubeconfig檔案的內容拷貝到~/.kube/config中。

3)驗證
通過執行如下的命令,驗證kubectl配置是否成功:
$ kubectl get nodes
8 安裝helm
此處的kubectl安裝在Windows作業系統中,並與kubectl處於同一臺機器:
8.1 安裝Helm客戶端
拷貝helm-v2.8.0-windows-amd64.tar.gz,並將其解壓縮到本地,並將helm.exe所在的地址新增至Windows的環境變數的Path中。
8.2 安裝Tiller伺服器
1)建立一個名為tiller的Service Account
$ kubectl create serviceaccount tiller --namespace kube-system
2)授予名為tiller的Service Account叢集管理員角色cluster-admin:
將tiller繫結至叢集管理員角色的的yaml檔案如下所示:
apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: tiller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system
通過執行kubectl create -f將授予tiller叢集管理員角色:
$ kubectl create -f rbac-config.yaml
3)安裝Tiller伺服器
由於是離線安裝,先啟動本地的chart倉庫:
$ helm serve
通過helm init命令在Kubernetes叢集中安裝Tiller伺服器端,在這裡通過–service-account欄位設定訪問使用者為tiller,通過–stable-repo-url欄位設定所使用的倉庫為本地倉庫,通過–tiller-image欄位指定使用私有映象倉庫中的tiller:v2.8.2映象。
$ helm init --service-account=tiller --stable-repo-url=http://127.0.0.1:8879 \ -–tiller-image={registry-ip}/rancher/tiller:v2.8.2
8.3 驗證安裝
在安裝完成後,可以通過執行如下命令來檢查是安裝成功:
$ helm version
如果正確顯示Helm客戶端和Tiller伺服器的版本,這表示安裝成功。
或者通過執行kubectl的如下命令來檢視是否已正常按照Tiller伺服器:
$ kubectl get pods -n kube-system
參考資料
1.《Single Node Installation》地址:https://rancher.com/docs/rancher/v2.x/en/installation/single-node-install
2.《Quick Start Guide》地址:https://rancher.com/docs/rancher/v2.x/en/quick-start-guide/
3. 《Installation》地址:https://rancher.com/docs/rancher/v2.x/en/installation/
本文轉自中文社群- Kubernetes-基於Rancher進行Kubernetes的離線安裝