天天看點

用Kubeadm-dind單機部署單節點Kubernetes(k8s)1 前言2 環境要求說明3 部署步驟4.問題總結5.參考6.其他比較不錯的資料(待驗證)

用Kubeadm-dind單機部署單節點k8s

  • 1 前言
  • 2 環境要求說明
  • 3 部署步驟
    • 3.1 解除安裝舊版本Docker
    • 3.2 安裝Docker
      • 3.2.1 安裝docker-ce-selinux
      • 3.2.2 安裝指定版本Docker
      • 3.2.3 設定docker鏡像
      • 3.2.4 重新開機docker daemon
    • 3.3 安裝kubectl
      • 3.3.1 編輯kubernets.repo
      • 3.3.2 安裝kubectl
    • 3.4 使用kubeadm-dind部署單節點k8s叢集
      • 3.4.1 下載下傳kubeadm-dind安裝腳本
      • 3.4.2 設定腳本執行權限
      • 3.4.3 設定環境變量
      • 3.4.4 修改dashboard部署檔案
      • 3.4.5 執行腳本部署叢集
  • 4.問題總結
    • 4.1 docker倉庫
    • 4.2 關于dashboard版本
    • 4.3 解決dashboard服務起來後,通路不了的問題
    • 4.4 安裝失敗,如何重新安裝?
  • 5.參考
  • 6.其他比較不錯的資料(待驗證)

1 前言

近幾年Google的Kubernetes(簡稱k8s)已經成為分布式容器編排和管理領域事實上的标準,在基于容器的微服務架構下的分布式應用開發、部署和運維管理等領域,會有越來越多的使用者部署和使用k8s平台。對于初學着來說,部署一個多機k8s叢集一來缺少環境、另外也相對比較複雜。為了滿足使用者嘗試和使用的便利性需要,可以使用兩種方法在一個單機環境下(實體機或者虛拟機)部署一個k8s環境:

Minikube: 這種方式是Google推薦的本地(單機)部署方法,它在一個虛拟機(或實體機)上部署一個單節點k8s叢集,用于開發或測試。

kubeadm-dind: 這種方式是在一個虛拟機(或實體機)上部署一個多節點k8s叢集(Minikube是單節點),它要求在虛拟機上有一個docker daemon運作。kubeadm-dind使用docker-in-docker(簡稱DinD)技術在虛拟機上首先以容器的方式啟動k8s的多個節點(master節點和多個woker node節點),然後在節點内部再啟動若幹容器運作k8s相應的元件以完成部署一個k8s叢集。

2 環境要求說明

  • 機器資源:一個VM,2 vCPU 、4GB 記憶體
  • 作業系統:CentOS 7.3或更高
  • Docker:17.03或更高
  • Kubectl:1.10.5或更高
  • 網絡:國内由于對很多google的站點進行了屏蔽,很多容器鏡像無法直接下載下傳,是以要采用變通的方法,具體描述見本文後面的描述。如果讀者有條件的化,可以購買阿裡雲或者UCloud海外雲主機,也可以解決這一問題。

    筆者環境:i7-2600(8核),8G,3.10.0-327.el7.x86_64

3 部署步驟

3.1 解除安裝舊版本Docker

舊版本的Docker命名為docker或docker-engine,如果有安裝舊版本,先解除安裝舊版本

sudo yum remove -y docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
           

3.2 安裝Docker

這裡介紹在CentoOS 7.4上安裝Docker 17.03社群版本的方法:

3.2.1 安裝docker-ce-selinux

先安裝docker-ce-selinux,否則會報錯。

yum install https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
           

3.2.2 安裝指定版本Docker

yum install https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
systemctl enable docker.service
systemctl start docker.service
           

3.2.3 設定docker鏡像

進入/etc/docker目錄,再輸入ls檢視裡面的檔案,沒有daemon.json檔案,那麼就自己建立這個檔案。

vi daemon.json打開檔案,輸入下面的josn代碼,按Esc退出編輯,最後輸入:wq儲存并退出。

{
"registry-mirrors":["https://hub-mirror.c.163.com"]
}
           

3.2.4 重新開機docker daemon

systemctl stop docker.service 
systemctl daemon-reload
systemctl start docker.service
           

3.3 安裝kubectl

3.3.1 編輯kubernets.repo

在/etc/yum.repos.d目錄中編輯kubernets.repo檔案,内容如下:

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
           

3.3.2 安裝kubectl

執行如下指令,安裝kubectl

yum install kubectl-1.10.5
           

3.4 使用kubeadm-dind部署單節點k8s叢集

在一個單機或一個虛拟機上,可以使用kubeadm-dind部署一個單節點k8s叢集,用于開發和測試。下面是具體的方法:

3.4.1 下載下傳kubeadm-dind安裝腳本

wget https://cdn.rawgit.com/kubernetes-sigs/kubeadm-dind-cluster/master/fixed/dind-cluster-v1.10.sh
           

下載下傳不了的童鞋,後面我會把連接配接提供給大家!

3.4.2 設定腳本執行權限

chmod +x dind-cluster-v1.10.sh
           

3.4.3 設定環境變量

export NUM_NODES=0  #除master外的工作節點個數,由于我們是單節點,隻保留master即可
export CNI_PLUGIN=flannel
export DASHBOARD_URL="kubernetes-dashboard.yaml"
           

3.4.4 修改dashboard部署檔案

在使用dind-cluster-v1.10.sh拉起k8s叢集時,需要修改kubernetes-dashboard.yaml的定義

  • 先下載下傳kubernetes-dashboard.yaml
wget https://rawgit.com/kubernetes/dashboard/bfab10151f012d1acc5dfb1979f3172e2400aa3c/src/deploy/kubernetes-dashboard.yaml
           

下載下傳不了的童鞋,後面我會把連接配接提供給大家

  • 修改kubernetes-dashboard.yaml

    把imagePullPolicy: Always修改為imagePullPolicy: IfNotPresent

imagePullPolicy: IfNotPresent
           

3.4.5 執行腳本部署叢集

./dind-cluster-v1.10.sh up
           

注意:在執行dind-cluster-v1.10.sh時,會在kube-master節點和kube-node-n節點上下載下傳k8s相應的某些鏡像。如果是國内使用者,由于網絡屏蔽的原因,這時就需要在dind-cluster腳本執行到某個特定時候執行下面的腳本下載下傳鏡像(如果是國外的主機,則不需要執行)。下圖是在主控端上的腳本目錄情況:

在主控端上執行上圖中的dind-cluster-v1.10.sh時,當部署進展到提示 " [init] This often takes around a minute; or longer if the control plane images have to be pulled." 時,需要執行do_getm.sh腳本,讓master節點下載下傳需要的k8s鏡像。

腳本代碼如下:

  • geti.sh檔案(被do_getm.sh腳本調用,在master節點上下載下傳k8s相關鏡像,解決google被屏蔽問題)
#!/bin/bash
db_ver=v1.6.0                                                                                                                                                                                                     
docker pull quay.io/coreos/flannel:v0.10.0-amd64
images=(etcd-amd64:3.1.12 pause-amd64:3.1 k8s-dns-sidecar-amd64:1.14.8 k8s-dns-kube-dns-amd64:1.14.8 k8s-dns-dnsmasq-nanny-amd64:1.14.8 kubernetes-dashboard-amd64:$db_ver)
for imageName in ${images[@]} ; do
    docker pull keveon/$imageName
    docker tag keveon/$imageName k8s.gcr.io/$imageName
    docker rmi keveon/$imageName
done
docker tag k8s.gcr.io/kubernetes-dashboard-amd64:$db_ver gcr.io/google_containers/kubernetes-dashboard-amd64:$db_ver
docker rmi k8s.gcr.io/kubernetes-dashboard-amd64:$db_ver
           
  • do_getm.sh檔案(在主控端節點上執行)
#!/bin/bash
master_id=$(docker ps | grep -i master | awk '{print $1}')
docker cp geti.sh ${master_id}:/root                                                                                                                                                                              
docker exec ${master_id} /root/geti.sh
           

4.問題總結

4.1 docker倉庫

這裡用的是keveon的docker倉庫, 可以解決國内使用者不能正确下載下傳鏡像的問題。

4.2 關于dashboard版本

實測:

1.6.0 英文界面

1.6.3 中文界面

1.8.3 中文界面

>>可以通過修改kubernetes-dashboard.yaml,geti.sh中的版本号實作對dashboard版本的修改!

4.3 解決dashboard服務起來後,通路不了的問題

此例中使用的是Nodeport方式。

現象:

  1. 通過指令kubectl get pod -n kube-system 可以發現dashboard已經處于running狀态
  2. 進入master節點裡面,發現可以通路10.244.0.5:9090。
  3. 主控端ping不通10.244.0.5
  4. 檢視路由發現沒有10.244.0.0/24的路由

解決:

  1. 添加一條到node裡面的路由
route add -net 10.244.0.0 netmask 255.255.255.0 gw 10.192.0.2 
           
  1. 添加dnat

    iptables -t nat -A PREROUTING -d 172.18.100.228 -p tcp -m tcp --dport 30001 -j DNAT --to-destination 10.244.0.5:9090

4.4 安裝失敗,如何重新安裝?

執行下面指令:

./dind-cluster-v1.10.sh down #關閉所有節點
./dind-cluster-v1.10.sh clean #清理
           

5.參考

  1. 在單機上使用Kubeadm-dind 部署多節點k8s叢集
  2. kubernetes中port、target port、node port的對比分析,以及kube-proxy代理

6.其他比較不錯的資料(待驗證)

  1. 深入玩轉K8S之使用kubeadm安裝Kubernetes v1.10以及常見問題解答
  2. 使用 kubeadmin 離線部署 kubernetes1.9