1. 程式人生 > >[Linux][Kubernetes][fabric8]安裝fabric8全攻略

[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

之後就可以訪問了~~