上次講了k8s的理論部分,從這次開始實踐部分。從環境搭建的實際操作中,深入瞭解k8s的組件和它的架構設計。對於新手來說,搭建一個完整的k8s的環境真心困難啊,至少我在中級搭建的時候感覺很麻煩,如果你科學上網的話,可以通過kubernetes-admin的方式,但是相信大部分的老鐵,還是綠色的上網環境,特別k8s的服務器,根本不具備科學上網能力的,對於這個問題,社區也推出來了很多自研的部署方案,經過迭代也踊躍了很多種的方案。都不太適合新手來,雖然好解決,但是安裝節點對你來說還是個黑盒,這些方案的學習成本都非常的高,有的不夠靈活,想特殊配置的。源碼:https://github.com/limingios/msA-docker swarm分支 vagrant/k8s 和 https://github.com/limingios/kubernetes-starter
參考高手總結的k8s的安裝
https://github.com/limingios/kubernetes-starter
- 綠色網絡情況下愉快的安裝網絡集羣
- 安裝的過程加深對k8s的深入理解
儘量讓部署變的簡單,第一次安裝,剝離了認證和授權部分,非必須安裝的放在最後,從整體上把握k8s的運行機制。最後加上認證授權。k8s的難點就是認證和授權,加入進去後會讓人感覺整個過程,讓人感覺非常非常的複雜,所以在這裏第一次安裝的時候做了剝離。
- 腳本gen-config.sh
腳本非常的簡單,就是幫助各位老鐵生成一些配置文件,因爲k8s涉及到的腳本也非常多,不可能手動一點一滴的去敲,配置寫成了模板,通過腳本生成適應自己環境的配置文件。比如你的機器的hostname,ip,文件的存放路徑各有不同。
預先環境準備
- 虛擬機介紹和安裝
3臺虛擬機還是通過vagrant來生成對應的虛擬機。vagrant已經安裝了 對應的docker。
系統類型 | IP地址 | 節點角色 | CPU | Memory | Hostname |
---|---|---|---|---|---|
Centos7 | 192.168.66.101 | master | 1 | 2G | server01 |
Centos7 | 192.168.66.102 | worker | 1 | 1G | server02 |
Centos7 | 192.168.66.103 | worker | 1 | 1G | server03 |
- 三臺機器接受所有ip的數據包轉發
$ vi /lib/systemd/system/docker.service #找到ExecStart=xxx,在這行上面加入一行,內容如下:(k8s的網絡需要) ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT
- 三臺機器啓動服務
$ systemctl daemon-reload $ service docker start
系統設置(所有節點)
關閉、禁用防火牆(讓所有機器之間都可以通過任意端口建立連接)
systemctl stop firewalld systemctl disable firewalld #查看狀態 systemctl status firewalld
設置系統參數 - 允許路由轉發,不對bridge的數據進行處理
#寫入配置文件 $ cat <<EOF > /etc/sysctl.d/k8s.conf net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF #生效配置文件 $ sysctl -p /etc/sysctl.d/k8s.conf
配置host文件
#配置host,使每個Node都可以通過名字解析到ip地址 $ vi /etc/hosts #加入如下片段(ip地址和servername替換成自己的) 192.168.66.101 server01 192.168.66.102 server02 192.168.66.103 server03
準備二進制文件(所有節點)
kubernetes的安裝有幾種方式,不管是kube-admin還是社區貢獻的部署方案都離不開這幾種方式:
- 使用現成的二進制文件
直接從官方或其他第三方下載,就是kubernetes各個組件的可執行文件。拿來就可以直接運行了。不管是centos,ubuntu還是其他的linux發行版本,只要gcc編譯環境沒有太大的區別就可以直接運行的。使用較新的系統一般不會有什麼跨平臺的問題。
- 使用源碼編譯安裝
編譯結果也是各個組件的二進制文件,所以如果能直接下載到需要的二進制文件基本沒有什麼編譯的必要性了。
- 使用鏡像的方式運行
同樣一個功能使用二進制文件提供的服務,也可以選擇使用鏡像的方式。就像nginx,像mysql,我們可以使用安裝版,搞一個可執行文件運行起來,也可以使用它們的鏡像運行起來,提供同樣的服務。kubernetes也是一樣的道理,二進制文件提供的服務鏡像也一樣可以提供。
從上面的三種方式中其實使用鏡像是比較優雅的方案,容器的好處自然不用多說。但從初學者的角度來說容器的方案會顯得有些複雜,不那麼純粹,會有很多容器的配置文件以及關於類似二進制文件提供的服務如何在容器中提供的問題,容易跑偏。 所以我們這裏使用二進制的方式來部署。二進制文件已經這裏備好,大家可以打包下載,把下載好的文件放到每個節點上,放在哪個目錄隨你喜歡,放好後最好設置一下環境變量$PATH,方便後面可以直接使用命令。(科學上網的老鐵也可以自己去官網找找)
[下載地址(kubernetes 1.9.0版本)] (https://pan.baidu.com/s/1bMnqWY)
- 三臺機器mac開通遠程登錄root用戶下
#設置 PasswordAuthentication yes vi /etc/ssh/sshd_config sudo systemctl restart sshd
- 將下載的k8s上傳到linux服務器上
密碼都是vagrant
scp kubernetes-bins.tar.gz [email protected]:~ scp kubernetes-bins.tar.gz [email protected]:~ scp kubernetes-bins.tar.gz [email protected]:~
- 解壓k8s,改名
解壓後,改名成bin就是爲了不在配置環境變量
tar -xvf kubernetes-bins.tar.gz mv kubernetes-bins/ bin
準備配置文件(所有節點)
上一步我們下載了kubernetes各個組件的二進制文件,這些可執行文件的運行也是需要添加很多參數的,包括有的還會依賴一些配置文件。現在我們就把運行它們需要的參數和配置文件都準備好。
下載配置文件
#安裝git yum -y install git #到home目錄下載項目 git clone https://github.com/limingios/kubernetes-starter.git #看看git內容 cd ~/kubernetes-starter && ll
文件說明
- gen-config.sh
shell腳本,用來根據每個老鐵自己的集羣環境(ip,hostname等),根據下面的模板,生成適合大家各自環境的配置文件。生成的文件會放到target文件夾下。
- kubernetes-simple
簡易版kubernetes配置模板(剝離了認證授權)。 適合剛接觸kubernetes的老鐵,首先會讓大家在和kubernetes初次見面不會印象太差(太複雜啦~~),再有就是讓大家更容易抓住kubernetes的核心部分,把注意力集中到核心組件及組件的聯繫,從整體上把握kubernetes的運行機制。
- kubernetes-with-ca
在simple基礎上增加認證授權部分。大家可以自行對比生成的配置文件,看看跟simple版的差異,更容易理解認證授權的(認證授權也是kubernetes學習曲線較高的重要原因)
- service-config
這個先不用關注,它是我們曾經開發的那些微服務配置。 等我們熟悉了kubernetes後,實踐用的,通過這些配置,把我們的微服務都運行到kubernetes集羣中。
3臺機器生成配置
這裏會根據大家各自的環境生成kubernetes部署過程需要的配置文件。 在每個節點上都生成一遍,把所有配置都生成好,後面會根據節點類型去使用相關的配置。
#cd到之前下載的git代碼目錄 cd ~/kubernetes-starter #編輯屬性配置(根據文件註釋中的說明填寫好每個key-value) vi config.properties #生成配置文件,確保執行過程沒有異常信息
#生成簡易版本 ./gen-config.sh simple #查看生成的配置文件,確保腳本執行成功 find target/ -type f
執行gen-config.sh常見問題:
- gen-config.sh: 3: gen-config.sh: Syntax error: "(" unexpected
- bash版本過低,運行:bash -version查看版本,如果小於4需要升級
- 不要使用 sh gen-config.sh的方式運行(sh和bash可能不一樣哦)
- config.properties文件填寫錯誤,需要重新生成 再執行一次./gen-config.sh simple即可,不需要手動刪除target
PS:下一步將一步一步的使用這些文件,到那個時間說說每個文件的功能。