在進行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: #master和etcd節點 - 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
此處是在windows下安裝,因此下載kubectl.exe,下載地址:https://storage.googleapis.com/kubernetes-release/release/v1.9.0/bin/windows/amd64/kubectl.exe。
並將kubectl.exe所在的地址添加至Windows的環境變量的Path中。
其他操作系統下安裝kubectl,請參考:https://kubernetes.io/docs/tasks/tools/install-kubectl/#tabset-2
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文件
通過:https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml 地址,能夠下載下載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)添加Token至kubeconfig文件
通過編輯工具打開kubeconfig文件(~/.kube/config),並添加Token。
5)導入kubeconfig文件
在界面中導入kubeconfig文件。
5.3 刪除集羣
RKE支持rke remove命令。該命令執行以下操作:
連接到每個主機並刪除部署在其上的Kubernetes服務。
從服務所在的目錄中清除每個主機:
- /etc/kubernetes/ssl
- /var/lib/etcd
- /etc/cni
- /opt/cni
請注意,這個命令是不可逆的,它將徹底摧毀Kubernetes集羣。
本文轉自kubernetes中文社區-Kubernetes-基於RKE進行Kubernetes的安裝部署