純手工搭建kubernetes(k8s)1.9集羣 - (一)預先準備環境

一、預先準備環境

1. 準備服務器

這裏準備了三臺ubuntu虛擬機,每臺一核cpu和2G內存,配置好root賬戶,並安裝好了docker,後續的所有操作都是使用root賬戶。虛擬機具體信息如下表:

系統類型 IP地址 節點角色 CPU Memory Hostname
ubuntu16.04 192.168.1.101 worker 1 2G server01
ubuntu16.04 192.168.1.102 master 1 2G server02
ubuntu16.04 192.168.1.103 worker 1 2G server03

使用centos的同學也可以參考此文檔,需要注意替換系統命令即可

2. 安裝docker(所有節點)

一般情況使用下面的方法安裝即可

2.1 卸載舊版本(如果有的話)

$ apt-get remove docker docker-engine docker.io

2.2 更新apt-get源

$ add-apt-repository  "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ apt-get update

2.3 安裝apt的https支持包並添加gpg祕鑰

$ apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -

2.4 安裝docker-ce

  • 安裝最新的穩定版
    $ apt-get install -y docker-ce
  • 安裝指定版本
    
    #獲取版本列表
    $ apt-cache madison docker-ce

#指定版本安裝(比如版本是17.09.1~ce-0~ubuntu)
$ apt-get install -y docker-ce=17.09.1~ce-0~ubuntu

- 接受所有ip的數據包轉發
```bash
$ 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

遇到問題可以參考:官方教程

3. 系統設置(所有節點)

3.1 關閉、禁用防火牆(讓所有機器之間都可以通過任意端口建立連接)

$ ufw disable
#查看狀態
$ ufw status

3.2 設置系統參數 - 允許路由轉發,不對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

3.3 配置host文件

#配置host,使每個Node都可以通過名字解析到ip地址
$ vi /etc/hosts
#加入如下片段(ip地址和servername替換成自己的)
192.168.1.101 server01
192.168.1.102 server02
192.168.1.103 server03

4. 準備二進制文件(所有節點)

kubernetes的安裝有幾種方式,不管是kube-admin還是社區貢獻的部署方案都離不開這幾種方式:

  • 使用現成的二進制文件

    直接從官方或其他第三方下載,就是kubernetes各個組件的可執行文件。拿來就可以直接運行了。不管是centos,ubuntu還是其他的linux發行版本,只要gcc編譯環境沒有太大的區別就可以直接運行的。使用較新的系統一般不會有什麼跨平臺的問題。

  • 使用源碼編譯安裝

    編譯結果也是各個組件的二進制文件,所以如果能直接下載到需要的二進制文件基本沒有什麼編譯的必要性了。

  • 使用鏡像的方式運行

    同樣一個功能使用二進制文件提供的服務,也可以選擇使用鏡像的方式。就像nginx,像mysql,我們可以使用安裝版,搞一個可執行文件運行起來,也可以使用它們的鏡像運行起來,提供同樣的服務。kubernetes也是一樣的道理,二進制文件提供的服務鏡像也一樣可以提供。

從上面的三種方式中其實使用鏡像是比較優雅的方案,容器的好處自然不用多說。但從初學者的角度來說容器的方案會顯得有些複雜,不那麼純粹,會有很多容器的配置文件以及關於類似二進制文件提供的服務如何在容器中提供的問題,容易跑偏。
所以我們這裏使用二進制的方式來部署。二進制文件已經這裏備好,大家可以打包下載,把下載好的文件放到每個節點上,放在哪個目錄隨你喜歡,放好後最好設置一下環境變量$PATH,方便後面可以直接使用命令。(科學上網的同學也可以自己去官網找找)
####下載地址(kubernetes 1.9.0版本)

5. 準備配置文件(所有節點)

上一步我們下載了kubernetes各個組件的二進制文件,這些可執行文件的運行也是需要添加很多參數的,包括有的還會依賴一些配置文件。現在我們就把運行它們需要的參數和配置文件都準備好。

5.1 下載配置文件

#到home目錄下載項目
$ cd
$ git clone https://github.com/liuyi01/kubernetes-starter.git
#看看git內容
$ cd ~/kubernetes-starter && ls

5.2 文件說明

  • gen-config.sh

    shell腳本,用來根據每個同學自己的集羣環境(ip,hostname等),根據下面的模板,生成適合大家各自環境的配置文件。生成的文件會放到target文件夾下。

  • kubernetes-simple

    簡易版kubernetes配置模板(剝離了認證授權)。
    適合剛接觸kubernetes的同學,首先會讓大家在和kubernetes初次見面不會印象太差(太複雜啦~~),再有就是讓大家更容易抓住kubernetes的核心部分,把注意力集中到核心組件及組件的聯繫,從整體上把握kubernetes的運行機制。

  • kubernetes-with-ca

    在simple基礎上增加認證授權部分。大家可以自行對比生成的配置文件,看看跟simple版的差異,更容易理解認證授權的(認證授權也是kubernetes學習曲線較高的重要原因)

  • service-config

    這個先不用關注,它是我們曾經開發的那些微服務配置。
    等我們熟悉了kubernetes後,實踐用的,通過這些配置,把我們的微服務都運行到kubernetes集羣中。

5.3 生成配置

這裏會根據大家各自的環境生成kubernetes部署過程需要的配置文件。
在每個節點上都生成一遍,把所有配置都生成好,後面會根據節點類型去使用相關的配置。

#cd到之前下載的git代碼目錄
$ cd ~/kubernetes-starter
#編輯屬性配置(根據文件註釋中的說明填寫好每個key-value)
$ vi config.properties
#生成配置文件,確保執行過程沒有異常信息
$ ./gen-config.sh simple
#查看生成的配置文件,確保腳本執行成功
$ find target/ -type f
target/all-node/kube-calico.service
target/master-node/kube-controller-manager.service
target/master-node/kube-apiserver.service
target/master-node/etcd.service
target/master-node/kube-scheduler.service
target/worker-node/kube-proxy.kubeconfig
target/worker-node/kubelet.service
target/worker-node/10-calico.conf
target/worker-node/kubelet.kubeconfig
target/worker-node/kube-proxy.service
target/services/kube-dns.yaml

執行gen-config.sh常見問題:

  1. gen-config.sh: 3: gen-config.sh: Syntax error: "(" unexpected
    • bash版本過低,運行:bash -version查看版本,如果小於4需要升級
    • 不要使用 sh gen-config.sh的方式運行(sh和bash可能不一樣哦)
  2. config.properties文件填寫錯誤,需要重新生成
    再執行一次./gen-config.sh simple即可,不需要手動刪除target

附:完整內容目錄

〇、序

一、預先準備環境

二、核心模塊部署

三、認證授權和服務發現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章