1. 程式人生 > >基於RKE進行Kubernetes的安裝部署_Kubernetes中文社群

基於RKE進行Kubernetes的安裝部署_Kubernetes中文社群

在進行Kubernetes的深入學習之前,首先要做的一件事情就是Kubernetes環境的安裝部署。由於Kubernetes本身的複雜性,因此決定安裝過程相當較為複雜,在安裝過程中需要考慮諸多的因素。在本文中,將使用Kubernetes的輕量級工具——Rancher Kubernetes Engine(RKE)進行Kubernetes的安裝部署。RKE是一個用Golang編寫的Kubernetes安裝程式,相對於其它的工具來說,更加簡單易用和上手。

1、環境準備

1.1 作業系統

1)建議使用Ubuntu 16.04.3 LTS版本;如果使用CentOS 7,建議7.3以上版本;

序號

角色

作業系統

IP

主機

1 RKE CentOS7 10.0.32.134 rancher-server
2 etcd CentOS7 10.0.32.175 rancher2-server
3 Master Node CentOS7 10.0.32.175 rachenr2-server
4 Worker Node CentOS7 10.0.32.177 rancher2-node01
5 Worker Node CentOS7 10.0.32.178 rancher2-node02

2)各主機的hostname主機名必須不同!

3)hosts檔案設定:/etc/hosts要配置正確,一定要有127.0.0.1 localhost 這一項;hosts檔案中包含所有主機節點的IP和名稱列表。

1.2 Docker

  • Kubernetes1.8需要Docker 1.12.6、1.13.1、17.03;
  • Kubernetes1.8不支援更高版本的Docker。

1.3 關閉Selinux

Ubuntu 16.04預設未安裝,無需設定。

1)CentOS7下可修改配置檔案

#vi /etc/sysconfig/selinux

2)設定 SELINUX=disabled,重啟後永久關閉。

1.4 設定IPV4轉發

必須開啟!Ubuntu 16.04下預設已啟用,無需設定。

1)CentOS7 下可編輯配置檔案:

# vi /etc/sysctl.conf

2)設定:

net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

3)執行如下命令生效:

#sudo sysctl -p

1.5 設定防火牆策略

開放叢集主機節點之間6443、2379、2380埠,如果是剛開始試用,可以先關閉防火牆;

#systemctl stop firewalld

Ubuntu預設未啟用UFW防火牆,無需設定。也可手工關閉:sudo ufw disable

1.6 禁用Swap

一定要禁用swap,否則kubelet元件無法執行。

1)永久禁用swap

可以直接修改

# vi /etc/fstab

檔案,註釋掉swap項。

2)臨時禁用

# swapoff -a

1.7啟用cgroup

修改配置檔案/etc/default/grub,啟用cgroup記憶體限額功能,配置兩個引數:

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

注意:要執行sudo update-grub 更新grub,然後重啟系統後生效。

1.8 設定SSH

RKE通過SSH tunnel進行安裝部署,需要事先建立RKE到各節點的SSH免密登入。如果叢集中有3個節點,需要在RKE機器上執行1遍祕鑰生成命令ssh-keygen,並將生成側公鑰通過分發命令:ssh-copy-id {user}@{ip}。

1)在各個節點(10.0.32.177、10.0.32.178、10.0.32.175)上建立ssh使用者,並將其新增至docker組中:

#useradd docker_user
#usermod -aG docker docker_user

注意:重啟系統以後才能生效,只重啟Docker服務是不行的!重啟後,docker_user使用者也可以直接使用docker run命令。

2)在rke所在主機上建立金鑰:

#ssh-keygen

3)將所生成的金鑰的公鑰分發到各個節點:

#ssh-copy-id [email protected]
#ssh-copy-id [email protected]
#ssh-copy-id [email protected]

2、安裝Kubernetes

2.1 安裝RKE

從Rancher的官方GitHub倉庫安裝下載RKE。 RKE可以在Linux和MacOS機器上執行。安裝完成後,執行以下程式碼,確保您使用的是最新版本:

./rke --version
rke version v0.0.6-dev
./rke --help
NAME:
   rke - Rancher Kubernetes Engine, Running kubernetes cluster in the cloud
USAGE:
   rke [global options] command [command options] [arguments...]
VERSION:
   v0.0.6-dev
AUTHOR(S):
   Rancher Labs, Inc.   
COMMANDS:
     up              Bring the cluster up
     remove          Teardown the cluster and clean cluster nodes
     version         Show cluster Kubernetes version
     config, config  Setup cluster configuration
     help, h         Shows a list of commands or help for one command
GLOBAL OPTIONS:
   --debug, -d    Debug logging
   --help, -h     show help
   --version, -v  print the version

2.2 叢集配置檔案

預設情況下,RKE將查詢名為cluster.yml的檔案,該檔案中包含有關將在伺服器上執行的遠端伺服器和服務的資訊。cluster.yml檔案應該是這樣的:

#節點資訊
nodes:  
 #masteretcd節點
  - address: 10.0.32.175 
    user: docker_user
    role: [controlplane,etcd]
#工作節點
  - address: 10.0.32.177  
    user: docker_user
    ssh_key_path: ~/.ssh/id_rsa
    role: [worker]
  - address: 10.0.32.178
    ssh_key_path: ~/.ssh/id_rsa
    user: docker_user
    role: [worker]
#服務資訊
services: 
  etcd:
     image: quay.io/coreos/etcd:latest  
   kube-api:
     pod_security_policy: false
     image: rancher/k8s:v1.8.5-rancher4     
     service_cluster_ip_range: 10.233.0.0/18
   kube-controller:
     cluster_cidr: 10.233.64.0/18  
     image: rancher/k8s:v1.8.5-rancher4  
   scheduler:
     image: rancher/k8s:v1.8.5-rancher4  
   kubelet:
     cluster_domain: cluster.local
     cluster_dns_server: 10.233.0.3 
     infra_container_image: gcr.io/google_containers/pause-amd64:3.0     
     image: rancher/k8s:v1.8.5-rancher4  
    kubeproxy:
     image: rancher/k8s:v1.8.5-rancher4
#網路模式
network: 
  plugin: flannel
#映象
system_images:
  flannel: rancher/coreos-flannel:v0.9.1  
  kubedns: rancher/k8s-dns-kube-dns-amd64:1.14.5  
  dnsmasq: rancher/k8s-dns-dnsmasq-nanny-amd64:1.14.5  
  kubedns_sidecar: rancher/k8s-dns-sidecar-amd64:1.14.5  
  kubedns_autoscaler: rancher/cluster-proportional-autoscaler-amd64:1.0.0  
  dashboard: k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3
#認證模式
authentication: 
  strategy: x509

叢集配置檔案包含一個節點列表。每個節點至少應包含以下值:

  • 地址 – 伺服器的SSH IP
  • 使用者 – 連線到伺服器的SSH使用者
  • 角色 – 主機角色列表:worker,controlplane或etcd

另一節是“服務”,其中包含有關將在遠端伺服器上部署的Kubernetes元件的資訊。

有三種類型的角色可以使用主機:

  • etcd – 這些主機可以用來儲存叢集的資料。
  • controlplane – 這些主機可以用來存放執行K8s所需的Kubernetes API伺服器和其他元件。
  • worker – 這些是您的應用程式可以部署的主機。

2.3 安裝Kubernetes

要執行RKE,首先要確保cluster.yml檔案在同一個目錄下,然後執行如下命令:

➜ ./rke up

若想指向另一個配置檔案,執行如下命令:

➜ ./rke up --config /tmp/config.yml

輸出情況將如下所示:

2.4 安裝網路外掛

RKE是一個冪等工具,可以執行多次,且每次均產生相同的輸出。如下的網路外掛它均可以支援部署:

  • Calico
  • Flannel (default)
  • Canal

要使用不同的網路外掛,您可以在配置檔案中指定:

network: 
    plugin: calico

2.5 附件選項(add-on

RKE支援在叢集載入程式中使用可插拔的外掛。使用者可以在cluster.yml檔案中指定外掛的YAML。

RKE在叢集啟動後會部署外掛的YAML。RKE首先會將這個YAML檔案作為配置對映上傳到Kubernetes叢集中,然後執行一個Kubernetes作業來掛載這個配置對映並部署這些外掛。

請注意,RKE暫不支援刪除外掛。外掛部署完成後,就不能使用RKE來改變它們了。

要開始使用外掛,請使用叢集配置檔案中的addons:選項,例如:

請注意,我們使用|-,因為外掛是一個多行字串選項,您可以在其中指定多個YAML檔案並用“—”將它們分開。

2.7 新增或刪除節點

RKE支援為角色為worker和controlplane的主機新增或刪除節點。

1)新增節點:

要新增其他節點,只需要更新具有其他節點的叢集配置檔案,並使用相同的檔案執行叢集配置即可。

2)刪除節點:

要刪除節點,只需從叢集配置檔案中的節點列表中刪除它們,然後重新執行rke up命令。

2.8 高可用

RKE工具是滿足高可用的。您可以在叢集配置檔案中指定多個控制面板主機,RKE將在其上部署主控元件。

預設情況下,kubelets被配置為連線到nginx-proxy服務的地址——127.0.0.1:6443,該代理會向所有主節點發送請求。

要啟動HA叢集,只需使用controlplane角色指定多個主機,然後正常啟動叢集即可。

3、測試驗證

3.1 安裝kubectl

1)下載kubectl

並將kubectl.exe所在的地址新增至Windows的環境變數的Path中。

2)配置kubeconfig檔案

RKE會在配置檔案所在的目錄下部署一個本地檔案,該檔案中包含kube配置資訊以連線到新生成的群集。

預設情況下,kube配置檔案被稱為.kube_config_cluster.yml。將這個檔案複製到你的本地~/.kube/config,就可以在本地使用kubectl了。

需要注意的是,部署的本地kube配置名稱是和叢集配置檔案相關的。例如,如果您使用名為mycluster.yml的配置檔案,則本地kube配置將被命名為.kube_config_mycluster.yml。

3.2 驗證

執行kubectl命令,獲取nodes的資訊:

$ kubectl get nodes

5、附錄

5.1 證書管理

RKE預設使用x509身份驗證方法來設定Kubernetes元件和使用者之間的身份驗證。RKE會首先為每個元件和使用者元件生成證書。

生成證書後,RKE會將生成的證書部署到/etc/kubernetes/ssl伺服器,並儲存本地kube配置檔案,其中包含主使用者證書,在想要刪除或升級叢集時可以與RKE一起使用。

然後,RKE會將每個服務元件部署為可以相互通訊的容器。RKE還會將叢集狀態儲存在Kubernetes中作為配置對映以備後用。

5.2 安裝Web UI

5.2.1 安裝

1)下kubernetes-dashboard.yaml檔案

2)編輯kubernetes-dashboard.yaml檔案

通過編輯工具開啟kubernetes-dashboard.yaml,並在此檔案中的Service部分下新增type: NodePort和nodePort: 30001,新增位置如下圖所示。

3)通過執行如下的命令部署Web UI

# kubectl create -f  {path}/kubernetes-dashboard.yaml

5.2.2 訪問Web UI

1)在瀏覽器中輸入:https://{Master IP}:30001,此處為https://10.0.32.175:3001,開啟頁面如下:

2)建立一個管理員使用者

建立amind-user.yaml檔案,檔案內容如下:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system

---

apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRoleBinding 
metadata: 
  name: admin-user
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system

通過執行如下命令建立admin-user:

#kubectl create -f {path}/admin-user.yaml

3)獲取管理員使用者的Token

通過執行如下命令獲取系統Token資訊:

#kubectl describe  secret admin-user --namespace=kube-system

4)新增Tokenkubeconfig檔案

通過編輯工具開啟kubeconfig檔案(~/.kube/config),並新增Token。

5)匯入kubeconfig檔案

在介面中匯入kubeconfig檔案。

5.3 刪除叢集

RKE支援rke remove命令。該命令執行以下操作:

連線到每個主機並刪除部署在其上的Kubernetes服務。

從服務所在的目錄中清除每個主機:

  • /etc/kubernetes/ssl
  • /var/lib/etcd
  • /etc/cni
  • /opt/cni

請注意,這個命令是不可逆的,它將徹底摧毀Kubernetes叢集。

參考資料

1. 《rke》地址:https://github.com/rancher/rke

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