编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

8. 玩转树莓派——使用Helm安装Spinnaker

wxchong 2024-10-18 14:32:15 开源技术 10 ℃ 0 评论

Helm

Helm是Kubernetes 的首选包管理工具。 Helm Chart为Kubernetes YAML清单文件提供了模板化语法。 一个chart在一个集群可以安装多次,每次安装会创建新的Release。 Repository类似与docker hub,用于存放和共享charts。

  1. 安装Helm
  • 脚本安装
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 
chmod 700 get_helm.sh 
./get_helm.sh
  • 二进制版本安装
curl -SL -o helm-v3.6.3-linux-arm64.tar.gz 
https://get.helm.sh/helm-v3.6.3-linux-arm64.tar.gz 
tar -zxvf helm-v3.6.3-linux-arm64.tar.gz 
mv linux-arm64/helm /usr/local/bin/helm

Spinnaker

Spinnaker意为三角帆,可以配合jenkins等CI工具来实现持续部署(CD)。

Spinnaker由多个微服务组成:Deck是WebUI,Gate是API网关,Orca用于流水线编排,Clouddriver适配云服务商并提供缓存与索引部署资源,Front50用于持久化应用/流水线/项目/通知的元数据,Rosco负责产生虚拟机镜像,Ignor可以与其它持续集成应用结合来触发流水线,Echo作为事件总线可以发送SMS/email/Slack通知并接收网络回调(webhooks),Fiat作为鉴权服务,Kayenta提供自动化的金丝雀分析,Keel负责人工介入的交付,Halyard作为配置服务,管理这些独立服务的生命周期,但仅在Spinnaker启动、更新、回滚时交互。

注意Spinnaker的硬件要求较高(4核16G内存),希望树莓派5快点出来,能支持16G甚至32G内存

  • 安装Halyard

Halyard意为帆的升降索,可以配置、安装/升级Spinnaker。 可以直接使用安装脚步安装,也可以运行docker镜像.

# 下载安装脚本,不使用HTTPS,避免证书认证
curl -O http://raw.githubusercontent.com/spinnaker/halyard/master/install/debian/InstallHalyard.sh
# 安装
sudo bash InstallHalyard.sh
# 检查安装是否成功
hal -v
# 卸载
# hal deploy clean
# sudo ~/.hal/uninstall.sh
  • 选择云服务商 Spinnaker支持多个云服务商,比如国内的AKS,国外的AWS, AZure, GAE等.自建的Kubernetes也支持. 使用Kubernetes时需要创建ServiceAccount,并设置对应的角色.
# https://spinnaker.io/docs/setup/install/providers/kubernetes-v2/
hal config provider kubernetes enable
hal config provider kubernetes account add default
  • 选择部署用途
# 分布式,用于大资源池、高可用场景
# hal config deploy edit --type distributed --account-name default
# 默认本地包,用于小规模部署
hal config deploy edit --type localdebian
# 本机源码安装(需先安装git, curl, netcat, redis-server, jdk, node, yarn等),适用于Spinnaker开发人员
# hal config deploy edit --type localgit --git-origin-user=iMinusMinus
# hal config version edit --version branch:upstream/master
  • 配置外部存储

Spinnaker依赖外部存储来持久化应用设置和配置的流水线,支持的外部存储有Azure Storage, Google Cloud Storage, Oracle Object Storagre, MinIO, Redis(不推荐在生产环境使用)。

hal config storage edit --type redis
# MinIO是一个兼容AWS S3协议的高性能、云原生、开源的对象存储服务
# https://spinnaker.io/docs/setup/install/storage/minio/
# hal config storage edit --type s3
  • 部署Spinnaker
# 列出版本
hal version list
# 选择版本
hal config version edit --version $VERSION
# 部署Spinnaker
hal deploy apply
# 启动deck
hal deploy connect
# 浏览器访问localhost:9000,或使用8084端口访问网关

使用Helm安装Spinnaker

  • Halyard方式Spinnaker的helm包本身就是对之前几个步骤的固化:安装halyard、配置存储、设置镜像仓库和云服务提供商(kubernetes),然后安装。详细细节可参考spinnaker/templates/configmap/halyard-config.yml。
helm repo add stable https://charts.helm.sh/stable 
# 访问https://hub.helm.sh/charts,了解哪些仓库有spinnaker 
# https://artifacthub.io/packages/helm/opsmx/spinnaker 
helm repo add opsmx https://helmcharts.opsmx.com/ 
helm search repo spinnaker 
helm repo update 
# Error: Kubernetes cluster unreachable: Get "https://localhost:6443/version?timeout=32s": x509: certificate signed by unknown authority 
# 证书默认域名为:k3s, kubernetes, kubernetes.default, kubernetes.default.svc, kubernetes.default.svc.cluster.local, localhost;默认IP: 127.0.0.1,安装时的ip 
# 访问https://k3s:6443,然后导出证书为k3s.pem(base64编码) 
# cat k3s.pem >> /etc/pki/tls/certs/ca-bundle.trust.crt 
# helm install stable/spinnaker --generate-name --kubeconfig /etc/rancher/k3s/k3s.yaml 
# Error: template: spinnaker/charts/minio/templates/deployment.yaml:210:20: executing "spinnaker/charts/minio/templates/deployment.yaml" at <(not .Values.gcsgateway.enabled) (not .Values.azuregateway.enabled) (not .Values.s3gateway.enabled) (not .Values.b2gateway.enabled)>: can't give argument to non-function not .Values.gcsgateway.enabled 
# 此错误貌似是helm和go版本不匹配导致,先禁用minio 
# helm install stable/spinnaker --generate-name --kubeconfig /etc/rancher/k3s/k3s.yaml --set minio.enabled=false 
# halyard默认镜像地址为gcr会拉取镜像失败,redis默认使用8G内存!可以使用"--set"覆盖默认值,也可以指定文件("-f values.yaml")覆盖默认值 
helm install stable/spinnaker --generate-name --kubeconfig /etc/rancher/k3s/k3s.yaml --create-namespace --set redis.enabled=false,persistence.size=1Gi,halyard.image.repository=gcr.azk8s.cn/spinnaker-marketplace/halyard
  • Kebernetes Operator方式
# 创建目录并下载资源 
mkdir -p spinnaker-operator && cd spinnaker-operator 
bash -c 'curl -L https://github.com/armory/spinnaker-operator/releases/latest/download/manifests.tgz | tar -xz' 
# 安装/更新CRD(定制资源定义的版本偏低,应当由"apiextensions.k8s.io/v1beta1"升级到"apiextensions.k8s.io/v1") 
kubectl apply -f deploy/crds/ # 创建新的命名空间并部署spinnkaer-operator, halyard。以及对应的角色、服务账号 
kubectl create ns spinnaker-operator 
# kubectl -n spinnaker-operator apply -f deploy/operator/cluster 
kubectl -n spinnaker-operator apply -f deploy/operator/basic 
# 创建新的命名空间并安装spinnaker(spinsvc) 
kubectl create ns spinnaker 
kubectl -n spinnaker apply -f deploy/spinnaker/basic 
# 查看安装进度 
kubectl -n spinnaker get spinsvc spinnaker -w

上述的安装方式也可以使用如下方式替代:

# https://operatorhub.io/operator/spinnaker-operator 
# 下载install.sh并执行,此时会往k8s安装定制资源描述(crds.yaml,类似于XML文件的DTD/schema)、创建命名空间/服务账号/集群角色/部署olm(olm.yaml) 
curl -sL https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.18.3/install.sh | bash -s v0.18.3 
kubectl create -f https://operatorhub.io/install/spinnaker-operator.yaml 
# 在operators命名空间下查看ClusterServiceVersion/ClusterServiceVersionSpec 
kubectl get csv -n operators

k3s下Helm安装Chart

k3s会将"/var/lib/rancher/k3s/server/manifests"目录下的的任何Kubernetes清单将以类似kubectl apply的方式自动部署到K3s。

curl  -fsSL -o helm-charts.zip https://codeload.github.com/helm/charts/zip/refs/heads/master
unzip helm-charts.zip
# helm fetch stable/spinnaker ## 下载spinnaker-*.tar.gz到当前目录 
# 编写 spinnaker相关的helm crd放到/var/lib/rancher/k3s/server/manifests/spinnaker.yaml, /var/lib/rancher/k3s/server/static/charts/spinnaker-{version}.tar.gz
# helm package charts-master/stable/spinnaker
# Error: found in Chart.yaml, but missing in charts/ directory: redis, minio
helm package charts-master/stable/spinnaker -u --version 2.2.6 -d /var/lib/rancher/k3s/server/static/charts/
cat > /var/lib/rancher/k3s/server/manifests/spinnaker.yaml << "EOF"
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
  name: spinnaker
  namespace: spinnaker
spec:
  chart: https://%{KUBERNETES_API}%/static/charts/spinnaker-2.2.6.tgz
EOF

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表