Spinnaker 高可用安裝構思與實踐
由於官方沒有提供高可用的方案。官方直接建議由K8S進行排程,但是由於網路原因往往無法安裝成功。生產環境如果是單點方案,死掉一個以後,恢復的時間由於網路原因時間會非常長。著急上線或者部署的話會出現很大的問題。 Spinnaker所有的配置檔案由minio進行儲存。Minio高可用的話,可以解決儲存的問題。但是還是不能解決spinnaker掛掉一個然後不影響使用的問題 基本構思是,先安裝一個minio叢集,然後將另外一套spinnaker直接連線相同的k8s,相同的minio,然後達到高可用的方案。 國內安裝spinnaker需要解決翻牆的問題、儲存的問題、服務恢復的問題、使用IP登入的問題、等等。
一、 準備環境
直接安裝在主機上,spinnaker只支援ubuntu。選擇了較為新的ubuntu18.04. Ubuntu翻牆方案。採用shadowsocks+ privoxy的方案來分別使用http+https的代理方式 下載檔案 wget https://bootstrap.pypa.io/get-pip.py –no-check-certificate 執行安裝 sudo python get-pip.py
{ “server”:”XXX.XXX.XXX.XXX”, “server_port”:10367, “local_address”:”127.0.0.1”, “local_port”:1080, “password”:”XXX”, “timeout”:300, “method”:”rc4-md5”, “fast_open”:false, “workers”: 1 } 這個是自己的伺服器。後期估計隨時有可能斷線,需要搭建ssl伺服器 執行 sslocal sudo nohup sslocal -c /etc/shadowsocks.json &>> /var/log/sslocal.log & 安裝完了shadowsocks以後 需要使用代理連結 apt-get install privoxy -y echo “forward-socks5 / 127.0.0.1:1080 .” >>/etc/privoxy/config systemctl restart privoxy
二、 安裝hal
sudo apt-get install software-properties-common -y sudo apt-get install openjdk-8-jdk -y
sudo bash InstallHalyard.sh
安裝完成,不能安裝的話 多重複幾遍。 安裝完成以後設定翻牆 sudo vi /opt/halyard/bin/halyard DEFAULT_JVM_OPTS=’”-Djava.security.egd=file:/dev/./urandom” “-Dspring.config.location=/opt/spinnaker/config/” “-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=8118”’ 重啟hal服務 hal shutdown hal
三、安裝minio叢集
以上安裝了hal官方建議的管理程式。接下來安裝minio叢集。這邊有四臺伺服器,來組建一個minio的最小叢集方案,官方建議最小的是4個minio節點,minio的埠跟spinnaker的埠衝突了。這裡修改為9001。 下載minio的二進位制包 curl -O https://dl.minio.io/server/minio/release/linux-amd64/minio sudo chmod +x minio sudo mv minio /usr/local/bin
安裝完成以後,配置systemd管理方式
vim /lib/systemd/system/minio.service
[Unit] Description=Minio service Documentation=https://docs.minio.io/
[Service] WorkingDirectory=/opt/minio/ ExecStart=/opt/minio/run.sh
Restart=on-failure RestartSec=5
[Install] WantedBy=multi-user.target
chmod +x /lib/systemd/system/minio.service
編輯minio的啟動指令碼 vim /opt/minio/run.sh
!/bin/bash
chmod +x /opt/minio/run.sh
這個指令碼注意每個機器上面的IP地址不對,需要根據實際IP進行變動,每臺機器上面放一個 。 啟動minio systemctl start minio 將minio新增到開機啟動 systemctl enable minio
四、開始安裝spinnaker
設定儲存minio export MINIO_SECRET_KEY=“minio123“ export ENDPOINT=“http://172.16.2.109:9001“ export MINIO_ACCESS_KEY=“minio“
echo ENDPOINT \ –access-key-id $MINIO_ACCESS_KEY \ –secret-access-key # will be read on STDIN to avoid polluting your
~/.bash_history with a secret
mkdir ~/.hal/default/profiles echo “spinnaker.s3.versioning: false” >> ~/.hal/default/profiles/front50-local.yml hal config storage edit –type s3 檢視版本 hal version list
選擇版本 hal config version edit –version 1.9.3
安裝版本 sudo hal deploy apply
順利的話,多試幾遍是能成功的,不順利的話,就試更多遍
五、配置與K8S的連線
將kubeconfig檔案放到主機的/home/ubuntu/.kube/config這個位置,然後 hal config provider kubernetes enable hal config provider kubernetes account add my-k8s-v2-account \ –provider-version v2 \ –context $(kubectl config current-context) hal config features edit –artifacts true sudo hal deploy apply 接著檢視clouddriver是否啟動正常。
六、安裝另外一臺高可用的節點
這臺的基本構思就是使用主伺服器的配置在副節點上回放。然後將檔案都改成本地的配置,讓他們基於minio進行資料的同步。這樣就可以完成高可用的方案。 首先需要準備幾個檔案哈 1. 主機器的/home/ubuntu/.hal/config 複製到另外一臺機器上相同的目錄。 2. 在另外一臺機器上面復現翻牆的工具,安裝hal與上面方法相同。副機器不需要配置與K8S的連線,完全由主機器配置。 3. 完成以上步驟的話,sudo hal deploy apply 等待完成以後,檢視是否OK
七、配置IP訪問spinnaker
由於官方只提供了基於域名的訪問方式,公司的環境所有人配上DNS,難度略大。所以使用IP加埠的方式訪問。需要修改以下檔案。
修改apache2-deck的配置檔案,配置轉發IP vim /opt/deck/html/settings.js
修改apache服務啟動繫結ip vim /etc/apache2/ports.conf vim /etc/apache2/sites-enabled/spinnaker.conf 修改上面兩個檔案中的host 從localhost to 0.0.0.0 內網使用者可以訪問 重啟apache systemctl restart apache2
修改spinnaker 的gate服務的host 修改 /opt/spinnaker/config/gate.yml 檔案中的 address 為 0.0.0.0 重啟gate服務 systemctl restart gate 如果有可能的話 spinnaker整個重啟一下。 systemctl restart spinnaker 訪問http://172.16.2.109:9000 與http://172.16.2.112:9000 然後隨便建立一個application看是否能與另外一個同步,如果能同步就代表高可用已經完成。
八、後續同步方案
主節點新增K8S新增jenkins新增