1. 程式人生 > >基於Rancher進行Kubernetes的離線安裝_Kubernetes中文社群

基於Rancher進行Kubernetes的離線安裝_Kubernetes中文社群

1、環境準備

在進行Kubernetes部署之前,需要提供其要求的軟硬體環境。此文件描述的場景:在無法直接連線網際網路的情況下,如何進行安裝部署Kubernetes。

1.1 作業系統

作業系統推薦使用:

  • Ubuntu 16.04 (64-bit)
  • Red Hat Enterprise Linux 7.5 (64-bit)
序號 主機 角色 軟硬體環境 硬體配置 備註
1 k8s-master 主節點
  • 作業系統:CentOS Linux release 7.2.1511 (Core)
  • 容器環境:Docker version 1.13.1
  • CPU:8核
  • 記憶體:8GB
  • 磁碟:
    • 根磁碟:500GB
    • 所有磁碟:1TB
部署Kunbernetes叢集主節點和etcd,用於管理和監控Kubernetes其它的工作節點和存在狀態資訊。
2 k8s-worker01 工作節點
  • 作業系統:CentOS Linux release 7.2.1511 (Core)
  • 容器環境:Docker version 1.13.1
  • CPU:8核
  • 記憶體:8GB
  • 磁碟:
    • 根磁碟:500GB
    • 所有磁碟:1TB
部署Kubernetes叢集的工作節點,用於執行容器化的應用。
3 k8s-worker02 工作節點
  • 作業系統:CentOS Linux release 7.2.1511 (Core)
  • 容器環境:Docker version 1.13.1
  • CPU:8核
  • 記憶體:8GB
  • 磁碟:
    • 根磁碟:500GB
    • 所有磁碟:1TB
部署Kubernetes叢集的工作節點,用於執行容器化的應用。
4 k8s-worker03 工作節點
  • 作業系統:CentOS Linux release 7.2.1511 (Core)
  • 容器環境:Docker version 1.13.1
  • CPU:8核
  • 記憶體:8GB
  • 磁碟:
    • 根磁碟:500GB
    • 所有磁碟:1TB
部署Kubernetes叢集的工作節點,用於執行容器化的應用。
5 nfs-server NFS伺服器
  • 作業系統:CentOS Linux release 7.2.1511 (Core)
  • NFS:nfs v4
  • CPU:8核
  • 記憶體:8GB
  • 磁碟:
    • 根磁碟:1TB
    • 所有磁碟:2TB
部署nfs服務,用於為上層所有的應用提供持久化儲存。
6 registry-server 私有映象倉庫
  • 作業系統:CentOS Linux release 7.2.1511 (Core)
  • 容器環境:Docker version 1.13.1
  • 映象倉庫:sonatype/nexus3
  • CPU:8核
  • 記憶體:8GB
  • 磁碟:
    • 根磁碟:1TB
    • 所有磁碟:2TB
部署映象倉庫,用於提供映象的儲存和拉取。
7 kubectl/helm 工具節點
  • 作業系統:Windows
  • 命令列工具:kubectl
  • 包安裝工具:helm
  • CPU:8核
  • 記憶體:8GB
  • 磁碟:500GB
8 public 下載資源
  • 作業系統:CentOS Linux release 7.2.1511 (Core)
  • 容器環境:Docker version 1.13.1
  • CPU:8核
  • 記憶體:8GB
  • 磁碟:
    • 根磁碟:500GB
    • 所有磁碟:1TB

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)如果以前有通過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/

作者簡介:
季向遠,北京神舟航天軟體技術有限公司產品經理。本文版權歸原作者所有。

微信公眾號:ik8s