前面用到過的 minikube 只是一個單節點的 k8s 集羣,這對於學習而言是不夠的。咱們須要有一個多節點集羣,才能用到各類調度/監控功能。並且單節點只能是一個加引號的「集羣」。html
kubernetes 是一個組件化的系統,安裝過程有很大的靈活性,不少組件都有多種實現,這些實現各有特色,讓初學者眼花繚亂。node
並且要把這些組件一個個安裝配置好而且能協同工做,也是很不容易的。python
所以社區出現了各類各樣的安裝方案。安裝方案如此之多,以至於我不曉得該用哪一個好。。因而特意調查了一番。將幾個流行的安裝方案羅列以下:nginx
此外社區還有 n 種方案可供選擇,五花八門。並且關注度(stars)都不低。貪多嚼不爛,我就不一一介紹了。git
一番搜索,我最終肯定了用 rancher 來部署個人第一個 kubernetes 多節點集羣(後來發現其實 rke 更適合個人使用場景),怎麼簡單怎麼來哈哈~github
除了多節點集羣,咱們每一個開發人員還須要一臺我的測試用的機器。目前公司的這些測試用的是單節點集羣,爲了快速部署,這些單節點集羣都是經過離線安裝包(或內網鏡像倉庫)、以容器方式部署的。docker
要部署多節點嘛,天然得先有多臺主機。我本身的機器內存夠用,就直接開了一臺 Ubuntu 虛擬機,而後克隆了四份。(這個克隆操做致使我後面掉進了坑。。)shell
主機的操做系統能夠用本身熟悉的 Ubuntu/Debian/CentOS 等。這裏主要強調一個坑:ubuntu
若是是使用 rke/kubespray 進行批量安裝,能夠直接在配置文件裏指定節點 hostname,這倆工具會幫你自動修改。api
具體的主機配置過程官方文檔寫得很是詳細,請移步 Rancher-基礎環境配置
首先在用作 rancher server 的虛擬機上跑官方給出的 docker 命令啓動 rancher server:
sudo docker run -d -v <主機路徑>:/var/lib/rancher/ --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher:stable
不過說實話我以爲用 docker-compose 的方式會更好一點。
部署好後訪問 https://<server-ip>
配置好帳號/密碼/url,這沒啥好說的。
如今進入了 rancher 首頁,點擊右上角的「添加集羣」,選擇「自定義」來添加本地集羣。
固然若是你用的是雲服務,那直接使用 rancher 提供的對應的功能顯然更方便。(在導航欄「工具」-「驅動管理」中能夠添加「阿里雲」「騰訊雲」「華爲雲」等國內雲服務支持)
而後輸入「集羣名稱」,「雲提供商」選擇「無」。
而後就是最後一步——在各個節點上部署 rancher agent——了。
只要你勾選了 worker
選項(其實就是添加了 --worker
參數),rancher agent 在運行時,就會自動在節點上部署 k8s
節點所須要的全部容器。
在多個節點上運行帶 --worker
的 rancher agnet 命令,就能獲得多個 k8s worker。而 etcd 和 controller 開發環境各部署一個就行了。
而後就能夠愉快地玩耍了hhh~
要使用 rancher 離線部署,首先須要一個 docker 私有鏡像倉庫,推薦使用 harbor.
雖然也可使用官方的 rancher_save_images.sh 把全部鏡像打包成 tar.gz 進行離線安裝,可是這並無使用私有倉庫的方式靈活簡便。(前提是你原本就已經有一個內網私有倉庫。。)
而後參照上一步 2. 部署 kubernetes 集羣
就行。
更新
今天嘗試了一下使用 kubespray 部署一個本地 k8s 集羣,總的來講,坑,仍是 rancher 最方便。。
使用 kubespary 部署,難點有二:
gcr.io
全都替換成 gcr.azk8s.cn
quay.io
全都替換成 quay.azk8s.cn
dockerhub.azk8s.cn
/usr/bin/python
,升級到最新版本才能識別到 /usr/bin/python3
趟完了上面說的坑以後,終於把 kubernetes 安裝上了。安裝體驗上來講比 rancher 差多了。不過這也可能和我想嚐鮮 k8s 1.16,因此使用了 master 分支有關。。
優點:
1. 節點只要有 python 就行,好像連 docker 均可以交給 kubespray 安裝(只要你能忍受它的速度。。)
1. 會自動配置節點的 hostname,不須要手動一臺臺地改了。
而後裝完後我才曉得,原來 kubeconfig 是須要手動生成的。。以前用 rancher 時它直接就給生成好了,我覺得這是自動的來着。。
=====
前面使用 rancher 部署了一個 k8s 集羣,可是那種方式不適合內網環境,由於它全部的鏡像都仍是會從外網拉取,遇到出口帶寬被限速,或者與公網物理隔離的狀況下,就無能爲力了。(rancher 的 UI 界面也能夠設置私有倉庫)
所以我改用 rke 進行部署,這種方式自定義程度更高,並且支持配置私有 docker 倉庫,經過 ssh 批量部署。其實用法和 kubespray 有點像,可是比 kubespray 簡單多了。(kuberspray 的配置文件實在太多了。。)
通過使用我發現,rke 纔是最簡單方便的 kubernetes 部署方式。流程以下:
ssh-keygen
建立密鑰對,經過 ssh-copy-id
將公鑰傳到各節點上。rke
,放到 PATH 路徑下(好比 /usr/local/bin
)。hostname_override
,覆蓋掉原有的 hostname,這很是方便。rke config --list-version --all
查看全部支持的版本號。kubectl
部署官方的 ingress-controller 才正常。。部署 dashboard 存在兩個問題
k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
被牆。kubernetes-dashboard
權限至關小,啥都看不了。解決辦法,首先下載官方的 yaml 文件,作以下修改:
gcr.azk8s.cn/google_containers/kubernetes-dashboard-amd64:v1.10.1
RoleBinding
那一部分的 yaml 配置,將服務帳號 kubernetes-dashboard
綁定到管理員角色 cluster-admin
上。詳見官方文檔:https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md#create-clusterrolebinding
而後再 kubectl create
kubectl proxy
提供一個訪問集羣內部 service 的入口http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
進入 dashboard 的 ui 界面authorization.mode
設爲了 none,那應該會有個 skip
的按鈕,點擊就能進入 dashboard 了。參照 NGINX Ingress Controller - 安裝指南
Prerequisite Generic Deployment Command
: kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/service-nodeport.yaml
nodePort
,會致使最後導出的 nodePort 是隨機分配的。。而後就可使用 ingress 啦。