快速創建Kubernetes集羣,從零開始

入坑靠師傅,出坑靠本身!node

CI/CD是大規模數據中心不可缺乏的基礎設施,也是構建集羣化系統的第一步。linux

這裏介紹如何從零開始基於Kubernetes創建CI/CD集羣,以知足軟件企業和數據中心的軟件開發和部署的須要。nginx

咱們先創建一個「母機」,安裝的軟件包括:git

  1. MAAS 裝機服務,經過網絡啓動進行裸機操做系統安裝。
    • 須要聯機時將操做系統鏡像提早同步下來,或者直接拷貝到目錄裏面去。
    • 或者創建本身的mirror(參見 Select and Import Images
  2. ownCloud 自建雲盤,用於安裝過程當中各類文件的下載,包括Kubernetes的容器鏡像離線包。
    • 預先上傳*.iso、etcher等啓動盤製做工具。
  3. apt mirror 鏡像服務,提供各個節點apt安裝時須要用的軟件包,按期從archive.ubuntu.com更新。
    • 以及使用cron/kubernetes cronjob/rsync等按期同步,nginx/apache提供服務。
  4. IPFS 傳輸系統,用於快速傳輸、下載大的軟件包,如容器鏡像、大型數據文件等等。
    • 以及使用bt/aria/rsync傳輸和同步目錄。
  5. Harbor 容器鏡像服務,各個節點部署容器時直接從這裏獲取,避免從互聯網拉取鏡像耗費時間。
    • 可使用docker save/load來直接複製images文件,docker export/import複製container文件。
  6. Kubernetes Master,集羣主控機,能夠經過上面ownCloud下載離線包快速安裝。
  7. ansible工具,用於遠程操做節點主機,進行軟件安裝和版本更新。
  8. qTox,即時通信,用於各個節點間傳輸配置參數、軟件包等等。

有了上面的八樣神器,都配置在「母機上」,基本上能夠解決Kubernetes集羣部署中的任何問題。github

1、建立操做主機

操做主機是咱們創建集羣的原點。docker

須要建立一個啓動U盤,而後經過U盤啓動計算機,安裝Ubuntu操做系統。apache

  1. 下載 Ubuntu Desktop 18.04.01 LTS的ISO鏡像。
  2. Ubuntu的啓動U盤製做。可使用Ubuntu自帶的啓動盤製做工具,Unetboot或者Etcher來製做。
  3. U盤啓動,初始主機安裝Ubuntu。
    • 插入製做好的啓動U盤。
    • 開機時,按住del或者F2/F8(根據主板不一樣),設置啓動盤爲USB。
    • 啓動後,按照正常程序安裝Ubuntu操做系統。

2、建立集羣主機

建立集羣的多個個節點的初始系統有幾種方法:json

  • 定製U盤。
    • 使用U盤啓動,自動化安裝,而後使用cloud-init來初始化系統。
  • 系統盤克隆。優勢是速度快。
    • 先使用一個機器裝好,而後把系統盤克隆不少份,裝到其它的機器上。
    • 這樣系統網卡的MAC地址和IP地址是同樣的,直接啓動後沒法訪問網絡。
    • 須要在啓動後當即修改MAC地址和IP地址,並鏈接到中心服務器更新系統和參數。
  • 網絡啓動,安裝系統。
    • 可使用KickStart、Cobbler或者Ubuntu的MAAS系統,原理和內核基本是同樣的。
    • 可是不一樣的版本兼容性不大同樣,有的版本會有些坑,須要源碼作些修改。

一、網絡裝機,MAAS安裝、配置、啓用。

MAAS是Canonical爲Ubuntu開發的一個集中化裝機系統,能夠經過WebUI安裝基礎操做系統到多個節點上,而後經過cloud-init來初始化系統的配置。下一步,咱們能夠經過ansible來控制各個節點。ubuntu

二、安裝Ansible,操做、配置多個節點。

Amsible能夠集中地控制多個節點,批量地執行ssh命令。緩存

三、容器引擎,安裝Docker CE。

  • 設置apt的proxy參數:

$ nano /etc/apt/apt.conf
Acquire::http::Proxy "http://192.168.199.99:9999";
Acquire::https::Proxy "http://192.168.199.99:9999";
  • 添加key:
https_proxy=192.168.199.99:9999 wget https://download.docker.com/linux/ubuntu/gpg -O docker.key
sudo apt-key add docker.key
  • 添加安裝源:
sudo echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic edge" > /etc/apt/sources.list.d/docker.list
sudo apt update
sudo apt install docker-ce
  • 確保kubelet使用的cgroup driver 與 Docker的一致。要麼使用下面的方法更新 Docker:
cat << EOF > /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
  • 而後重啓Docker服務,運行:
sudo systemctl daemon-reload
sudo systemctl restart docker

3、安裝Kubernetes集羣主節點

一、安裝集羣管理服務,設置版本鎖定。

首先,安裝Kubeadm、Kubectl、Kubelet基礎工具和服務。

  • 添加安裝源的key:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 6A030B21BA07F4FB
  • 添加安裝源:
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
  • 安裝Kubernetes 1.11.3:
sudo apt update
sudo apt install kubeadm=1.11.3-00 kubectl=1.11.3-00 kubelet=1.11.3-00
sudo echo "kubeadm hold" | sudo dpkg --set-selections
sudo echo "kubectl hold" | sudo dpkg --set-selections
sudo echo "kubelet hold" | sudo dpkg --set-selections

而後,就能夠安裝Kubernetes容器集羣管理系統了。

二、系統工具,網絡、管理面板與應用管理

  • 容器網絡,Flannel安裝。提供容器集羣內部的虛擬化網絡支持,容器網絡的隔離和互通。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#啓用主控機同時做爲工做節點
kubectl taint nodes --all node-role.kubernetes.io/master-
  • 應用管理,Helm安裝。
  • 系統面板,Dashboard安裝。
  • 負載均衡,MetalLB,對外服務IP地址分配。
  • 服務入口,Ingress安裝。

三、基礎服務,網絡存儲、Ubuntu鏡像服務

A、爲了讓集羣中全部節點均可以訪問同一個存儲設備,須要配置網絡存儲,可使用NFS/Ceph/Gluster或其它的存儲系統(如SAN/iSCSI等)。對於小型的系統,這裏使用NFS。

B、多個節點都須要訪問apt安裝源來更新系統軟件包,將帶來較大的併發網絡流量並拖慢安裝的速度。經過創建局域網絡的apt鏡像,爲網內全部節點提供緩存的apt安裝源,所有鏡像下來須要1個多T的磁盤空間。我將其作成爲一個Kubernetes的按期任務來執行,而後在Kubernetes中建立apt mirror服務,存儲使用NFS服務。之後,考慮使用IPFS來創建apt mirror站點,提供更快、全球規模的加速服務。

四、持續交付,源碼管理、構建工具、容器倉庫

這裏創建一個最小的集合,包括GitLab源碼管理系統、Jenkins X持續交付系統、Harbor鏡像存儲系統。

  • GitLab,使用Git進行版本管理和源碼倉庫存儲,能夠與Github.com/oschina.net等交換代碼庫。
  • Jenkins X,支持基於流程的代碼構建,並推送到容器鏡像倉庫,供Kubernetes部署時使用。
  • Harbor,容器鏡像服務用於創建本地的鏡像倉庫,是Kubernetes部署的必備服務。
    • 最新的Harbor包含有一個Helm Chart倉庫管理模塊。
    • 也可使用其它的方式(如Github.com)來管理Helm Charts。

更多的參考:

相關文章
相關標籤/搜索