在我們部署Spinnaker之前,我們需要一個YAML格式的配置文件,它會包含了一些配置信息。可以從Spinnaker Helm Chart repository[2]獲得這個文件。
$curl -Lo values.yaml https://raw.githubusercontent.com/kubernetes/charts/master/stable/spinnaker/values.yaml
%Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2950 100 2950 0 0 2950 0 0:00:01 --:--:-- 0:00:01 10535
現在我們可以安裝Spinnaker了。用下面的命令可以把它部署在我們的Kubernetes集群里:
$ helm install-n kubelive stable/spinnaker -f values.yaml --timeout 300 --version 0.3.5 --namespace spinnaker
這里的-f參數的意思是指出安裝的配置文件。--timeout會讓Helm在遇到錯誤的時候等待至少300秒再退出。這篇文章中我們用的是0.3.5的版本,是用--version指定的。最后我們用--namespace指定了安裝Spinnaker的namespace。
過了一會兒,我們應該可以看到下面的輸出。
NAME: kubelive
LAST DEPLOYED: Wed Jan 3 11:26:12 2018
NAMESPACE: spinnaker
STATUS: DEPLOYED
RESOURCES:
…..
NOTES:
You will need to create2port forwarding tunnels inordertoaccessthe Spinnaker UI:
exportDECK_POD=$(kubectl getpods --namespace spinnaker -l "component=deck,app=kubelive-spinnaker" -o jsonpath="{.items[0].metadata.name}")
kubectl port-forward --namespace spinnaker $DECK_POD 9000
Visit the Spinnaker UI byopening your browser to: http://127.0.0.1:9000
Formore info onthe Kubernetes integration forSpinnaker, visit:
http://www.spinnaker.io/docs/kubernetes-source-to-prod
如果你遇到錯誤超時退出,可以用helm del --purge kubelive 命令去刪除,並且重新運行安裝命令。
所有的Spinnaker的相關組件都已經部署到了Spinnaker的namespace里了,我們可以用下面的命令去確認。
$ kubectl get pod --namespace=spinnaker
NAME READY STATUS RESTARTS AGE
kubelive-jenkins -67bb8f6b96-w5rdp 1/ 1Running 053m
kubelive-minio -5946fc9bcc-fcvv8 1/ 1Running 053m
kubelive-redis -7bb9d95468-kt2vq 1/ 1Running 153m
kubelive-spinnaker-clouddriver -6cd89c9bd5 -8rwln 1/ 1Running 153m
kubelive-spinnaker-deck -7846d6497-bjg7b 1/ 1Running 053m
kubelive-spinnaker-echo -6fd649469d -2pxzd 1/ 1Running 153m
kubelive-spinnaker-front50 -85dd9fd58c-ktj6j 1/ 1Running 153m
kubelive-spinnaker-gate -5868d9f8ff-hjpvg 1/ 1Running 053m
kubelive-spinnaker-igor-fdbdcc9c8-hldsk 1/ 1Running 053m
kubelive-spinnaker-orca-dd79c8bc7-xmwc7 1/ 1Running 053m
kubelive-spinnaker-rosco -7b9f77b5bb-drxhs 1/ 1Running 053m
在我們通過瀏覽器訪問Spinnaker之前,我們需要用下面命令打開端口轉發功能。也就是說這個命令將會把Spinnaker Web UI的端口映射到主機的端口上。
$ export DECK_POD=$(kubectl get pods --namespace spinnaker -l "component=deck,app=kubelive-spinnaker"-o jsonpath= "{.items[0].metadata.name}")
$ kubectl port-forward --namespace spinnaker $DECK_POD 9000
現在可以通過http://localhost:9000去訪問Spinnaker了。
通過Spinnaker去部署一個容器化的應用
現在我們可以通過部署一個Nginx Web服務器去熟悉Spinnaker的概念和術語。
首先在右上角的“操作”菜單下單擊“Create Application”來創建應用程序。“application”是一個資源的邏輯集合,包括負載均衡、安全組、服務組和集群。
現在我們在這個application里去創建一個負載均衡器。單擊菜單頂部的"Load Balancer",並且點擊“Create Load Balancer” 按鈕。
當你創建了一個新的負載均衡器,輸入prod作為堆棧的名字。80端口作為Target Port,並且選擇NodePort類型,點擊Create按鈕。
在 Clusters里,選擇 Create Server Group。
在下拉框里選擇nginx:latest作為容器。選擇nginx-prod作為負載均衡器,輸入10作為副本數。
在Container設置里,選擇Probes去創建Readiness Probe和Liveness Probe。最后點擊Create按鈕。
當這個實例在Server Group里狀態變成可用,如果是紅色則代表這個實例還是不可能的狀態。
切換到終端,並且運行下面命令可以得到服務的NodePort。
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none>443/TCP 50m
nginx-prod NodePort 10.99.164.47 <none>80:31728/TCP 18m
這個負載均衡器已經被Spinnaker創建好,並且通過Kubernetes的NodePort對外提供訪問。我們現在可以直接通過Minikube的命令訪問了。
$ minikube service nginx-prod
Opening kubernetes service default/nginx-prod indefaultbrowser...
運行kubectl get pods可以顯示一共有10個Nginx的Pod被創建出來了。
$ kubectl getpods
NAME READY STATUS RESTARTS AGE
nginx-prod-v000 -6m642 1/ 1Running 09m
nginx-prod-v000 -9kxtv 1/ 1Running 09m
nginx-prod-v000-bpzw4 1/ 1Running 09m
nginx-prod-v000-f87gn 1/ 1Running 09m
nginx-prod-v000-h629g 1/ 1Running 09m
nginx-prod-v000-hkhjc 1/ 1Running 09m
nginx-prod-v000-jhnv2 1/ 1Running 09m
nginx-prod-v000-jmkgx 1/ 1Running 09m
nginx-prod-v000-s59pm 1/ 1Running 09m
nginx-prod-v000-ssz85 1/ 1Running 09m
在Spinnaker的儀表板擴展服務組(Server Group)一樣相同。
這篇文章涵蓋了在開發環境中,使用和運行Spinnaker的所有步驟。在本系列的下一篇文章里,我們會用Spinnaker去建立一個end-to-end的CI/CD pipeline環境,然后去發布一個應用的藍綠部署。敬請關注!
- https://www.thenewstack.io/tag/Learn-Spinnaker
- https://github.com/kubernetes/charts/tree/master/stable/spinnaker