[Linux][Kubernetes][fabric8]安裝fabric8全攻略
前言
之前專案要求安裝fabric8,在官網,各大部落格中瀏覽無數,發現坑實在太多,特地寫下這篇文章,希望對後來想嘗試kubernetes和fabric8的同學們有所幫助。
什麼是docker
docker是一個開源的容器平臺,我們可以粗略的理解為虛擬機器,使用者使用image掛載一個docker之後,就可以像虛擬機器一樣訪問一個資源,docker相對於虛擬機器有很多優勢,比如它更加輕量級,更加容易啟動和管理等。當然,由於它不算一個完整的虛擬機器,和真正虛擬化還是有一定差距的。
什麼是Kubernets
Kubernetes (K8s)是一個開源的容器叢集管理平臺,它在docker的基礎上,增加的任務排程和任務部署,docker的單位是一個個images掛載上去的docker容器,而k8s的執行單位則是一個個pod,一個pod可以理解為一個任務,它在一個或者幾個機子上啟動相同的docker,從而實現任務執行在docker的叢集排程和執行。使用者不必關心pod到底執行在哪,而只要關心pod是否啟動和執行效果即可。
什麼是fabric8
fabric8是個開源的ci工具,通過這個工具,開發者可以在上面進行程式碼編寫,版本管理,測試以及釋出等一系列流程。fabric8依賴於k8s,而k8s則依賴於docker,我們的最終目的是搭建一個比較大型的ci開發流程工具網站。
開始搭建
以下搭建過程均執行在ubuntu 16.04版本,如果執行在其它平臺上的需求,請查閱相關命令或者聯絡我。
安裝docker
$ sudo apt-get update
$ sudo apt-get install -y docker.io
安裝k8s所需檔案
$ apt-get update && apt-get install -y apt-transport-https
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
$ cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
> deb http://apt.kubernetes.io/ kubernetes-xenial main
> EOF
$ apt-get update
$ apt-get install -y kubelet kubeadm kubectl
為避免出現安裝warning,需要安裝如下工具
$ apt-get install ebtables ethtool
設定k8s
$ apt-get update && apt-get upgrade
$ kubeadm init
之後系統回提示你,master設定完成,你可以在其它機子上使用kubeadm設定為node,然後連線master機器,諸如
(other machine to set node)
$ kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>
檢視master是否連線
(master machine)
$ kubectl get nodes
在k8s叢集上安裝fabric8
gofabric8是一個官方釋出的專門安裝fabric8的軟體工具,我們使用這個工具安裝。
$ curl -sS https://get.fabric8.io/download.txt | bash
$ export PATH=$PATH:$HOME/.fabric8/bin
然後我們使用它部署
$ gofabric8 deploy --domain=xxx
這之後我們就等待它安裝docker image就好了,可以使用以下命令在另一個shell裡檢視
kubectl get pods -n default
之後我們驗證是是否安裝好並且是否依賴缺少
$ gofabric8 validate
$ gofabric8 volumes
請注意,這裡我們需要把RBAC關掉
$ kubectl create clusterrolebinding permissive-binding --clusterrole=cluster-admin --user=admin --user=kubelet --group=system:serviceaccounts
使用gofabric8開啟網頁埠
$ gofabric8 console
由於這個埠僅僅暴露在k8s叢集內部,所以我們需要loadblancer把它暴露到叢集外部
$ kubectl expose deployment gofabric8 --type=LoadBalancer --name=myfabric
檢視下埠
$ kubectl get service
myfab LoadBalancer 10.98.231.216 <pending> 9090:32451/TCP,9191:31460/TCP 18h
這時我們訪問master所在機器的32451埠就可以了。
由於官方的錯誤,所以到這裡應該有gogs無法啟動,我們需要在頁面上,找到gogs的配置檔案,在containers的前面一行,加入
initContainers:
- name: init
image: busybox
command:
- chmod
- '777'
- /app/gogs/data
resources: {}
volumeMounts:
- name: gogs-data
mountPath: /app/gogs/data
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: IfNotPresent
到這裡,所有的fabric8就可以在kubernets上運行了。
單機使用fabric8
當然,如果你沒有叢集條件,我們可以根據官網所說,使用虛擬機器安裝k8s,在測試環境上使用fabric8。如果你有mac,那麼非常簡單,使用brew安裝gofabric8, 直接使用gofabric8 deploy 部署執行就可以(我覺得這裡表示,蘋果是親爸爸)
如果你是用的是其它linux系統,那麼就稍微有點麻煩。
首先,需要看下你的電腦是否支援虛擬化
$ egrep '^flags.*(vmx|svm)' /proc/cpuinfo
如果有輸出,那麼就支援虛擬化。在有虛擬化支援的基礎上,你需要根據系統版本安裝virtualBOX或者是kvm,下面列出kvm的安裝,virtualbox類似
$ sudo apt install libvirt-bin qemu-kvm
$ sudo usermod -a -G libvirtd $(whoami)
$ newgrp libvirtd
$ sudo apt-get install qemu-guest-agent
$ sudo /usr/sbin/kvm-ok
$ ln -s /usr/local/bin/qemu-system-x86_64 /usr/bin/qemu
然後重啟它。
之後從官網下載gofabric8和其它軟體
$ curl -sS https://get.fabric8.io/download.txt | bash
$ export PATH=$PATH:$HOME/.fabric8/bin
$ sudo gofabric8 start
這時gofabric8會執行一個minikube(一個小型的k8s環境,執行在虛擬機器上)。然後由於我們的環境問題,有可能虛擬機器無法聯網,需要登陸進去更改dns
minikube ssh
$ sudo vi /etc/resolv.conf (change to 144.144.144.144)
虛擬機器有時會自動更改dns,我們需要使用一個硬連線防止其更改
$ sudo cp /etc/resolv.conf /etc/init.d/resolv.conf
$ sudo vi /etc/init.d/resolv.conf # change the DNS
$ sudo rm /etc/resolv.conf
$ sudo ln /etc/init.d/resolv.conf /etc/resolv.conf
在虛擬機器外部,我們使用gofabric8獲取網站入口
$ gofabric8 service fabric8 --url
之後就可以訪問了~~