在滴滴雲上學習 Kubernetes v1.13.0:叢集搭建

java06051515發表於2018-12-24

前言

Kubernetes 1.13 在 2018 年 12 初 GA,這是今年的第四次也是最後一次大版本。此版本繼續關注 Kubernetes 的穩定性和可擴充套件性,其中在儲存和群集生命週期領域的三個主要功能實現普遍可用(GA);Kubeadm 簡化叢集管理、容器儲存介面(CSI)和 CoreDNS 作為預設 DNS。

我們用最新的版本來學習,透過使用 Kubeadm 來安裝 Kubernetes1.13.0。Kubernetes 的網路要求各節點間可以相互通訊, 滴滴雲 的 VPC 環境是天然的支援。

1. 目標

第一次安裝,我們設一個簡單的目標:

  • 完成 Kubernetes 1.13 最簡單的安裝

  • 可以在叢集中部署簡單的服務

2. 準備環境

滴滴雲 上建立三臺 DC2(虛擬機器)

其實不用每個 DC2 都申請 EIP,這裡為了安裝簡單,都配置上。(如果部署單機版,則建立一臺,其安裝區別是單機版安裝後,把 master 設定為可以部署應用,下面安裝的時候會有提示)

節點屬性 外網 IP 內網 IP 作業系統 配置
master 116.85.57.121 10.254.11.44 CentOS 7.4 4核/8G記憶體/40G
node-1 116.85.10.12 10.254.203.71 CentOS 7.4 4核/8G記憶體/40G
node-2 116.85.45.220 10.254.56.33 CentOS 7.4 2核/4G記憶體/40G

後面的安裝均以 root 使用者進行操作,切換到 root,在命令列中 root 使用者的提示符為 #,普通使用者的為 $

  [ dc2 - user @ 10 - 254 - 165 - 64   ~ ] $   sudo   - i

  [ root @ 10 - 254 - 165 - 64   ~ ] #

預設情況下 滴滴雲 的 DC2 的防火牆是關著的,這裡不用再關閉。如果你的環境開著,先關閉。關閉的方式如下:

3. 安裝

新增 Kubernetes yum 源

執行 yum 安裝

  [ root @ 10 - 254 - 165 - 64   ~ ] # yum install -y docker kubelet kubeadm kubectl kubernetes-cni

安裝完成後,可以看見下面安裝成功的提示:

安裝好後檢查一下 Docker和 Kubeadm 版本

啟動 Docker 和 Kubelet 服務

執行  kubeadm config images list  檢視安裝 Kubernetes 需要哪些依賴

這個操作會卡一會兒,提示  dl.k8s.io  不可達,但是會輸出需要的映象源及對應的版本,這一步可以直接跳過。

下載依賴包,國內的網路環境下載依賴包比較困難,筆者已經把對應的包同步到 Docker Hub 上面了


上面的內容在每個節點上面都執行,下面的在 master 上面執行。


初始化叢集
這兒帶上引數  --kubernetes-version=v1.13.0  是為了防止以後看教程的時候版本更新了,會安裝更新的版本,導致安裝失敗。使用  --pod-network-cidr=172.16.0.0/12  是為了支援 CNI 網路外掛。

  [ root @ 10 - 254 - 11 - 44   ~ ] # kubeadm init --pod-network-cidr=172.16.0.0/12 --kubernetes-version=v1.13.0

看見下面的輸出,表示初始化成功了, 輸出的結果中的   kubeadm join ...  的內容為以後在 Node 節點上面新增到叢集中需要執行的命令。

初始化成功後執行正面的命令複製配置檔案到 root 使用者和普通使用者的 home 目錄下,以便連上叢集使用,執行上面提示中的三行語句

新增 Weave 網路外掛

  [ root @ 10 - 254 - 165 - 64   ~ ] # kubectl apply -f "(kubectl version | base64 | tr -d '\n')"

新增成功後提示:

如果是單機版本,則執行下面的命令讓 master 可以部署應用

  [ root @ 10 - 254 - 165 - 64   ~ ] # kubectl taint nodes --all node-role.kubernetes.io/master-

如果新增其它節點,則在其它兩個 Node 節點上做完 Docker 和 Kubeadm 的安裝後 執行新增 Node 命令,新增節點到叢集中,下面的內容從上面的 kubeadm init 的結果中查詢,然後複製執行(切記不要複製教程中的)

  [ root @ 10 - 254 - 165 - 64   ~ ] # kubeadm join 10.254.11.44:6443 --token iqq37y.cx5jpycw939zpkfn --discovery-token-ca-cert-hash

  sha256:15b997b2e6e127b453a96a96476cb0d68c89c82c42c0aa80cd1169e5bbd6af2e

檢視叢集中 Node 情況

到這一步,叢集的安裝已經完成,下面寫兩個指令碼驗證是否可用。

4. 驗證 K8s 叢集

下面的操作可以使用普通使用者來操作 K8s 叢集了,一般操作使用普通使用者來操作是一個良好的習慣。

透過 ReplicaSet 配置 Tomcat Web 叢集

使用 Kubectl 命令建立 ReplicaSet

  [ dc2 - user @ 10 - 254 - 11 - 44   helloworld ] $   kubectl  create   - f   web - rc . yaml

  replicationcontroller / web  created

檢視我們剛部署的兩個 Tomcat 的 pod, 剛開始時 pod 的狀態可能為 ContainerCreating,使用命令檢視,可以看見是在拉取對應的映象

使用命令檢視,可以看見是在拉取 Tomcat的映象:

過一會兒,拉取完後,可以看見兩個 pod 處於執行狀態:

檢視 pod 的 IP,並使用 pod IP 對 Tomcat 進行訪問

目前只能在伺服器上透過 podIP 對服務進行訪問,但是我們的 Web 服務肯定是需要向外提供服務的。下面透過建立 Service,對外暴露服務:

建立一個 Tomcat 的 Service 對外暴露服務

Service 的配置中 nodePort: 30303 把服務埠對映到物理機, 同時設定 Service 的 type 為 NodePort, spec.selector 中 app: web 與我們之前建立的  web-rc.yaml  中的 label 一樣。

建立 Service

  [ dc2 - user @ 10 - 254 - 11 - 44   helloworld ] $   kubectl  create   - f   web - svc - out . yaml

  service / web  created

檢視 Service

訪問服務

在叢集中可以使用  叢集 IP+ 埠  對服務進行訪問:

在叢集外可以透過  DC2 的內/外網 IP  對叢集進行訪問:

OK, 小目標完成。

5. 總結

  • 在安裝填坑的過程中,網路是最大的問題,解決好網路的問題後,其它相對來說都是小問題

  • 在使用 Docker Tag 做  k8s.gcr.io  的包的過程中,不小心把 ETCD 的 image 搞錯了,導致安裝過程總是不成功,使用  docker save load  方式匯出本機的 image 又可用。所以在安裝過程中需要非常仔細

  • 多看官網文件

最後,把安裝 master 的相關命令,寫成了指令碼,可以把 指令碼 複製到虛機上面默默地看著自動安裝:

  [ root @ 10 - 254 - 165 - 64   ~ ] # sh -x init-k8s.sh


參考文件:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559758/viewspace-2284937/,如需轉載,請註明出處,否則將追究法律責任。

相關文章