Helm簡介
Helm 是 Kubernetes 的軟件包管理工具,類似於Ubuntu 中使用的apt、Centos中使用的yum 或者Python中的 pip,能快速查找、下載和安裝軟件包。包含幾個基本概念:
- Chart:一個 Helm 包,封裝kubernetes原生應用程序的yaml文件
- Release: 在 Kubernetes 集群上運行的 Chart 的一個實例。在同一個集群上,一個 Chart 可以安裝很多次。每次安裝都會創建一個新的 release。
- Repository:用於發布和存儲 Chart 的倉庫。
- config:包含了應用發布配置信息
使用Helm安裝spinnaker
開始安裝前,默認K8S集群已經准備完畢。
安裝Helm
軟件包下載地址:https://github.com/helm/helm/releases
$ wget https://get.helm.sh/helm-v3.2.0-linux-amd64.tar.gz
$ tar -zxvf helm-v3.2.0-linux-amd64.tar.gz
$ mv linux-amd64/helm /usr/local/bin/helm
$ helm version
version.BuildInfo{Version:"v3.2.0", GitCommit:"xx", GitTreeState:"clean", GoVersion:"go1.13.5"}
下載spinnaker charts
下載地址:https://github.com/helm/charts/tree/master/stable/spinnaker
下載好,需要修改values文件,用來適配我們自己的k8s環境。
設置掛載
本文k8s集群在阿里雲中,所以掛載點選擇的雲盤,用來放redis緩存及各種配置文件。
persistence:
enabled: true
accessModes:
- ReadWriteOnce
size: 30Gi
storageClass: "alicloud"
設置additionalProfileConfigMaps
此處設置之后,文件會掛載到/home/spinnaker/.hal/default/profiles目錄下,與權限設置有關系。
additionalProfileConfigMaps:
data:
fiat-local.yml:
fiat:
admin:
roles:
- administrator
orca-local.yml:
tasks:
useManagedServiceAccounts: true
settings-local.js:
window.spinnakerSettings.feature.managedServiceAccounts = true;
設置additionalServiceSettings
此處設置后,文件會掛載到/home/spinnaker/.hal/default/service-settings,將spinnaker需要的鏡像設置為自己的鏡像倉庫地址。
fiat.yml:
artifactId: xxxx(你的倉庫地址)
kubernetes:
imagePullSecrets:
- (私有倉庫設置)
其余配置插件也是同樣設置。
設置bom
此處設置后,文件會掛載到/home/spinnaker/.hal/.boms/bom,設置bom,spinnaker就會從你設置的鏡像倉庫中拉取鏡像了。
bom: |-
version: 1.19.6
timestamp: '2020-04-21 08:00:59'
services:
echo:
version: 2.11.3-20200421040016
commit: 37f1dab07bc77dfd466806d5289a9b890bf75ffa
clouddriver:
version: 6.7.3-20200401190525
commit: 77c774d185de42bb83dffde1f813f719f712994b
deck:
version: 3.0.3-20200415122124
commit: d7fae58cc712674f0f0fe5aa84f5578396afbcad
fiat:
version: 1.10.3-20200421040016
commit: 546552369de7ab108d32f085495166016ba5b019
front50:
version: 0.22.1-20200401121252
commit: ef1e7feff41797beb2d1695c1c3c0face550fe4b
gate:
version: 1.15.2-20200415095112
commit: 14d7678ea7602e7fa2947e0b5650e10e13ba51cd
igor:
version: 1.9.2-20200401121252
commit: 576235bcfce0c48bc139e9c94fe98b3467d3d170
kayenta:
version: 0.14.0-20200304112817
commit: 85f590de74db46d54f016d88862418c990a17747
orca:
version: 2.13.4-20200416040016
commit: 6d92294e8f94df042cd1bf6ae48448ec2ea70a6a
rosco:
version: 0.18.1-20200401121252
commit: 9a20165e9c0d33e538d0038d5d02cb480e27f8c3
defaultArtifact: {}
monitoring-third-party:
version: 0.16.2-20200228142642
commit: 94c6e9cd3006347efe3101c0e6d8f98ce65f9053
monitoring-daemon:
version: 0.16.2-20200228142642
commit: 94c6e9cd3006347efe3101c0e6d8f98ce65f9053
dependencies:
redis:
version: 2:2.8.4-2
consul:
version: 0.7.5
vault:
version: 0.7.0
artifactSources:
debianRepository: https://dl.bintray.com/spinnaker-releases/debians
dockerRegistry: xxxxxxx googleImageProject: marketplace-spinnaker-release
gitPrefix: https://github.com/spinnaker
注意,版本需要對應,查看版本方法:hal version bom
設置env代理
halyard在安裝的時候,會從gcs拉取配置,比對版本,此處設置代理,使得halyard可以訪問外網。當然也可以禁用hal比對,但是就需要將所有的配置文件下載到本地,比較麻煩,具體可以看我上一篇文章。
env:
- name: JAVA_OPTS
value: '"-Djava.security.egd=file:/dev/./urandom" "-Dspring.config.additional-location=/opt/spinnaker/config/" "-Dhttp.proxyHost=192.168.xx" "-Dhttp.proxyPort=80" "-Dhttps.proxyHost=192.168.xx" "-Dhttps.proxyPort=80" "-Dhttp.nonProxyHosts=\"localhost|*.example.com\""'
設置docker倉庫
dockerRegistries選項,按照提示輸入自己的倉庫地址、用戶名密碼。
設置kubeConfig
設置我們自己的k8s集群,需要提前做secret。
$ kubectl create secret generic kubeconfig --from-file=./config
kubeConfig:
enabled: true
secretName: kubeconfig
secretKey: config
contexts:
- spin
deploymentContext: spin omittedNameSpaces:
- kube-system
- kube-public
onlySpinnakerManaged:
enabled: true
設置s3存儲
spinnaker各種配置保存的地方。
s3:
enabled: true
bucket: "spinnaker"
rootFolder: xx
pathStyleAccess: true
endpoint: http://xx:9000
accessKey: "xx"
secretKey: "xx"
做好這一切前置動作之后,就可以直接安裝spinnaker了。
$ helm install -n spinnaker stable/spinnaker -f values.yaml --timeout 3600 --namespace spinnaker
-n:spinnaker 指明安裝的 Spinnaker 別名為 spinnaker,生成的 Pod 都會以該名稱開頭。
-f:values.yaml 指明安裝時使用 values.yaml 作為默認配置。
–timeout 3600:指明 Helm 安裝等待超時時間為 3600s
–namespace:spinnaker 指明本次安裝的 Chart 都將在名稱為 spinnaker 的命名空間內
若在安裝過程中,出現安裝失敗的情況,可以使用helm delete spinnaker 刪除,重新安裝。
訪問spinnaker
需要為spinnaker創建ingress后,可以訪問。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: spinnaker
namespace: spinnaker
annotations:
kubernetes.io/ingress.class: nginx-internet
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- secretName: ingress-niucache
hosts:
- spinnaker.xx
- spin-gate.xx
rules:
- host: spinnaker.xx
http:
paths:
- path: /
backend:
serviceName: spin-deck
servicePort: 9000
- host: spin-gate.xx
http:
paths:
- path: /
backend:
serviceName: spin-gate
servicePort: 8084
$ kubectl create -f ingress.yaml
創建完ingress之后就可以用spinnaker.xx域名來訪問spinnaker了。
后記
spinnaker在國內安裝一直是個大問題,雖然官方提供了完全離線安裝的方法,但是比較繁瑣,如果可以,還是建議halyard增加代理,鏡像換成我們自己鏡像倉庫的這種安裝方式。