Kubernetes 離線部署 Spinnaker

離線部署 Spinnaker

離線部署 spinnaker 需要提前準備以下依賴項

  • halyard 安裝工具:該hal命令的apt源地址https://us-apt.pkg.dev/projects/spinnaker-community位于國外
  • halyard boms物料清單:Spinnaker 將其halyard boms配置存儲在公共谷歌云存儲 ( gs://halconfig ) 存儲桶中。該位置無法訪問,并且導致 hal 命令超時。
  • Spinnaker 微服務docker鏡像:微服務的鏡像存儲在 us-docker.pkg.dev/spinnaker-community/docker/ 鏡像倉庫中,從國內訪問該存儲庫同樣很困難。

在這里插入圖片描述

相關參數:

SPINNAKER_REPOSITORY_URL="https://us-apt.pkg.dev/projects/spinnaker-community"
SPINNAKER_DOCKER_REGISTRY="us-docker.pkg.dev/spinnaker-community/docker"
SPINNAKER_BOMS="gs://haconfig"

解決方法:

  • halyard 安裝工具:hal命令使用docker方式安裝
  • halyard boms物料清單:從google對象存儲桶下載到本地,修改halyard配置從本地目錄讀取boms文件
  • Spinnaker 微服務docker鏡像:將鏡像同步到阿里云ACR鏡像倉庫(個人版免費),修改halyard配置從阿里云鏡像倉庫拉取鏡像

在下載依賴階段依然需要能夠訪問外網,可以使用外網的免費CICD工具,例如githubAction、gitlabCI或circleCI。

或者免費的臨時虛擬機例如 google cloudshell、github codespace 或者購買一臺阿里云香港云主機。

準備kubernetes集群

查看節點信息,kubernetes版本為v1.27.7,容器運行時為containerd.

root@node40:~# kubectl get nodes -o wide
NAME     STATUS   ROLES           AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
node40   Ready    control-plane   11d   v1.27.7   192.168.72.40   <none>        Ubuntu 22.04.2 LTS   5.15.0-76-generic   containerd://1.6.24

已通過 helm 方式安裝 openebs,用于通過 storageclass 為minio 動態提供存儲卷

root@node40:~# kubectl -n openebs get pods
NAME                                           READY   STATUS    RESTARTS      AGE
openebs-localpv-provisioner-658c87d4bb-rtsc7   1/1     Running   2 (22m ago)   11d
root@node40:~# 
root@node40:~# kubectl get sc
NAME                         PROVISIONER        RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
openebs-hostpath (default)   openebs.io/local   Delete          WaitForFirstConsumer   false                  11d

已通過 helm 方式安裝 minio,spinnaker依賴S3存儲保存數據

root@node40:~# kubectl -n minio get pods
NAME                    READY   STATUS    RESTARTS   AGE
minio-8976fd4b7-42vkt   1/1     Running   0          103mroot@node40:~# kubectl -n minio get svc
NAME            TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
minio           NodePort   10.96.2.159   <none>        9000:32000/TCP   103m
minio-console   NodePort   10.96.1.5     <none>        9001:32001/TCP   103m

備注:記錄minio service連接地址及憑證,后續spinnaker指定存儲時需要使用,以上示例在集群內連接地址為http://minio.minio:9000

已通過 helm 方式安裝 metallb,為ingress-nginx提供LoadBalancer類型IP地址

root@node40:~# kubectl -n metallb-system get pods
NAME                                  READY   STATUS    RESTARTS   AGE
metallb-controller-5cd9b4944b-jwjbm   1/1     Running   0          104m
metallb-speaker-mqdh9                 4/4     Running   0          104m

已通過 helm 方式安裝 ingress-nginx 網關,后續通過創建ingress規則,連接spinnaker UI.

root@node40:~# kubectl -n ingress-nginx get pods
NAME                                      READY   STATUS    RESTARTS   AGE
ingress-nginx-controller-8db7bbbc-mdpsv   1/1     Running   0          107m
root@node40:~# kubectl -n ingress-nginx get svc
NAME                                 TYPE           CLUSTER-IP    EXTERNAL-IP      PORT(S)                      AGE
ingress-nginx-controller             LoadBalancer   10.96.3.108   192.168.72.191   80:31306/TCP,443:32253/TCP   107m
ingress-nginx-controller-admission   ClusterIP      10.96.2.255   <none>           443/TCP                      107m

備注:記錄metallb為 ingress-nginx 分配的EXTERNAL-IP: 192.168.72.191,后續訪問spinnaker解析ingress域名時需要使用。

下載spinnaker boms 依賴

halyard 配置存儲在google gcs 存儲桶中。所有標準安裝都將引用此位置的元數據,例如可用版本列表、各個微服務每個版本的物料清單 (bom) 等。

可以使用以下命令查看存儲桶中的文件,注意,執行該命令需要能夠訪問外網或配置代理。

docker run -it --rm --name gloud-cli docker.io/google/cloud-sdk:alpine \gcloud storage ls gs://halconfig

示例輸出如下:

$ docker run -it --rm --name gloud-cli docker.io/google/cloud-sdk:alpine \gcloud storage ls gs://halconfig
gs://halconfig/versions.yml
gs://halconfig/bom/
gs://halconfig/clouddriver/
gs://halconfig/deck/
gs://halconfig/echo/
gs://halconfig/fiat/
gs://halconfig/front50/
gs://halconfig/gate/
gs://halconfig/igor/
gs://halconfig/kayenta/
gs://halconfig/monitoring-daemon/
gs://halconfig/orca/
gs://halconfig/rosco/

創建 google-cloud-sdk 容器

docker run -d --name gloud-cli -v /workspace:/workspace -w /workspace \--env HTTP_PROXY=http://192.168.72.1:7890 \--env HTTPS_PROXY=http://192.168.72.1:7890 \docker.io/google/cloud-sdk:alpine sleep infinity

下載整個halconfig文件

可以下載整個halconfig存儲桶到本地,請注意, gsutil cp 命令可能需要相當長的時間,雖然大小僅有150M左右,但它有超過 55k 個文件需要拉取。

$ docker exec -it gloud-cli bash
gsutil cp -R -n gs://halconfig .
# gcloud storage cp -R -n gs://halconfig .
tar -zcvf halconfig.tar.gz halconfig

下載指定halconfig文件

實際我們只需要對應版本的boms文件,需要下載的文件列表如下:

gs://halconfig/versions.yml
gs://halconfig/bom/${spinnaker_version}.yml
gs://halconfig/clouddriver/${clouddriver_version}/
gs://halconfig/deck/${deck_version}/
gs://halconfig/echo/${echo_version}/
gs://halconfig/fiat/${fiat_version}/
gs://halconfig/front50/${front50_version}/
gs://halconfig/gate/${gate_version}/
gs://halconfig/igor/${igor_version}/
gs://halconfig/kayenta/${kayenta_version}/
gs://halconfig/monitoring-daemon/${monitoring-daemon_version}/
gs://halconfig/orca/${orca_version}/
gs://halconfig/rosco/${rosco_version}/

下面創建一個boms下載腳本

$ cat /workspace/download_boms.sh
#!/bin/bash
spinnaker_version=1.32.2
halconfig_path=./halconfig
spinnaker_bom_path=${halconfig_path}/bom
spinnaker_bom_file=${spinnaker_version}.ymlcurl -sL -o /usr/local/bin/yq https://github.com/mikefarah/yq/releases/download/v4.40.2/yq_linux_amd64
chmod a+x /usr/local/bin/yqmkdir -p ${spinnaker_bom_path}
gsutil -m cp -R gs://halconfig/versions.yml ./halconfig
gsutil -m cp -R gs://halconfig/bom/${spinnaker_bom_file} ${spinnaker_bom_path}
services=$(yq e '.services | keys | .[]' ${spinnaker_bom_path}/${spinnaker_bom_file})for service in ${services}; domkdir -p ${halconfig_path}/${service}spinnaker_service_path=${halconfig_path}/${service}version=$(service=${service} yq e '.services.[env(service)].version' ${spinnaker_bom_path}/${spinnaker_bom_file})gsutil -m cp -R gs://halconfig/${service}/${version} ${spinnaker_service_path}
done
yq e -i '.services.*.version |= "local:" + .' ${spinnaker_bom}
tar -zcvf halconfig.tar.gz ./halconfig

進入容器執行腳本下載boms

docker exec -it gloud-cli bash /workspace/download_boms.sh

查看下載并打包好的boms文件

root@ubuntu:~# ls /workspace/
download_boms.sh  halconfig  halconfig.tar.gz

下載docker鏡像

創建 skopeo 容器,使用skopeo工具在兩個遠程倉庫之間同步鏡像,將spinnaker鏡像轉存到國內阿里云acr鏡像倉庫。

docker run -d --name skopeo -v /workspace:/workspace -w /workspace --entrypoint="" \--env HTTP_PROXY=http://192.168.72.1:7890 \--env HTTPS_PROXY=http://192.168.72.1:7890 \quay.io/skopeo/stable:latest sleep infinity

創建鏡像下載腳本

$ cat /workspace/download_images.sh
#!/bin/bash
export spinnaker_version=1.32.2
export spinnaker_dockerRegistry="us-docker.pkg.dev/spinnaker-community/docker/"
export dockerhub_dockerRegistry="docker.io/library/"
export spinnaker_bom="./halconfig/bom/${spinnaker_version}.yml"export dest_registry=registry.cn-shenzhen.aliyuncs.com/cnmirror
export registry_username=xxxxxx
export registry_password=xxxxxxcurl -sL -o /usr/local/bin/yq https://github.com/mikefarah/yq/releases/download/v4.40.2/yq_linux_amd64
chmod a+x /usr/local/bin/yqyq -r '.services | to_entries | .[] | env(spinnaker_dockerRegistry) + .key + ":" + .value.version' ${spinnaker_bom} > spinnaker_images.txt
yq -r '.dependencies | to_entries | .[] | env(dockerhub_dockerRegistry) + .key + ":" + .value.version' ${spinnaker_bom} >> spinnaker_images.txt
echo "us-docker.pkg.dev/spinnaker-community/docker/halyard:stable" >> spinnaker_images.txtsed -i "s#docker.io/library/redis:.*#docker.io/library/redis:6.2#g" spinnaker_images.txt
sed -i '/monitoring-third-party/d' spinnaker_images.txtfor image in $(cat spinnaker_images.txt);doimage_name=$(echo $image | awk -F '/' '{print $NF}')skopeo sync --src docker --dest docker \--dest-username ${registry_username} --dest-password ${registry_password} \$image ${dest_registry}
done

進入容器執行腳本下載spinnaker鏡像

docker exec -it skopeo bash /workspace/download_images.sh

查看生成的鏡像清單,可能個別鏡像并不需要,另外redis鏡像tag需要從halyard源碼倉庫搜索獲取。

root@ubuntu:~# cat /workspace/spinnaker_images.txt 
us-docker.pkg.dev/spinnaker-community/docker/clouddriver:5.82.0
us-docker.pkg.dev/spinnaker-community/docker/deck:3.15.1
us-docker.pkg.dev/spinnaker-community/docker/echo:2.39.0
us-docker.pkg.dev/spinnaker-community/docker/fiat:1.42.0
us-docker.pkg.dev/spinnaker-community/docker/front50:2.30.1
us-docker.pkg.dev/spinnaker-community/docker/gate:6.60.1
us-docker.pkg.dev/spinnaker-community/docker/igor:4.13.3
us-docker.pkg.dev/spinnaker-community/docker/kayenta:2.38.0
us-docker.pkg.dev/spinnaker-community/docker/monitoring-daemon:1.4.0
us-docker.pkg.dev/spinnaker-community/docker/orca:8.36.0
us-docker.pkg.dev/spinnaker-community/docker/rosco:1.18.0
docker.io/library/consul:0.7.5
docker.io/library/redis:6.2
docker.io/library/vault:0.7.0
us-docker.pkg.dev/spinnaker-community/docker/halyard:stable

docker安裝halyard

以docker方式安裝halyard

docker run -d --name halyard \-p 8084:8084 -p 9000:9000 \-w /home/spinnaker \-v /home/spinnaker/.hal:/home/spinnaker/.hal \-v /home/spinnaker/.kube:/home/spinnaker/.kube \-e KUBECONFIG=/home/spinnaker/.kube/config \registry.cn-shenzhen.aliyuncs.com/cnmirror/halyard:1.62.0

復制kubeconfig文件

使用scp命令復制kubernetes節點上的/root/.kube/config文件到halyard節點/home/spinnaker/.kube/目錄下

cp config /home/spinnaker/.kube/config

修改主機目錄權限,避免后續安裝出現權限問題

uid=$(docker exec -it halyard id -u)
chown -R ${uid}:${uid} /home/spinnaker

進入halyard容器

docker exec -it halyard bash

驗證與集群連接是否正常

kubectl get nodes

復制boms到halyard目錄

解壓halconfig.tar.gz到/home/spinnaker/.hal/.boms/目錄下

mkdir -p /home/spinnaker/.hal/.boms/
tar -zxvf halconfig.tar.gz -C /home/spinnaker/.hal/.boms/ --strip=2
chown -R 1000:1000 /home/spinnaker/.hal/.boms/

boms目錄結構如下:

root@ubuntu:~# tree /home/spinnaker/.hal/.boms/
/home/spinnaker/.hal/.boms/
├── bom
│   └── 1.32.2.yml
├── clouddriver
│   └── 5.82.0
│       ├── clouddriver-bootstrap.yml
│       ├── clouddriver-caching.yml
│       ├── clouddriver-ro-deck.yml
│       ├── clouddriver-ro.yml
│       ├── clouddriver-rw.yml
│       ├── clouddriver.yml
│       └── README.md
├── deck
│   └── 3.15.1
│       ├── README.md
│       └── settings.js
├── echo
│   └── 2.39.0
│       ├── echo-scheduler.yml
│       ├── echo-worker.yml
│       ├── echo.yml
│       └── README.md
├── fiat
│   └── 1.42.0
│       ├── fiat.yml
│       └── README.md
├── front50
│   └── 2.30.1
│       ├── front50.yml
│       └── README.md
├── gate
│   └── 6.60.1
│       ├── gate.yml
│       └── README.md
├── igor
│   └── 4.13.3
│       ├── igor.yml
│       └── README.md
├── kayenta
│   └── 2.38.0
│       ├── kayenta.yml
│       └── README.md
├── monitoring-daemon
│   └── 1.4.0
│       ├── README.md
│       └── spinnaker-monitoring.yml
├── monitoring-third-party
├── orca
│   └── 8.36.0
│       ├── orca-bootstrap.yml
│       ├── orca.yml
│       └── README.md
├── rosco
│   └── 1.18.0
│       ├── images.yml
│       ├── packer.tar.gz
│       ├── README.md
│       └── rosco.yml
└── versions.yml

修改/home/spinnaker/.hal/.boms/bom/<version>.yml文件,其中services.*.version版本字段前需要加local。配置完成之后,hal在deploy的時候不會去google拉取版本配置,而是從本地讀取。

以下命令在download_boms.sh腳本中已執行,無需重復執行。

yq e -i '.services.*.version |= "local:" + .' /home/spinnaker/.hal/.boms/bom/1.32.2.yml

查看修改后的配置文件

root@ubuntu:~# cat /home/spinnaker/.hal/.boms/bom/1.32.2.yml
artifactSources:debianRepository: https://us-apt.pkg.dev/projects/spinnaker-communitydockerRegistry: registry.cn-shenzhen.aliyuncs.com/cnmirrorgitPrefix: https://github.com/spinnakergoogleImageProject: marketplace-spinnaker-release
dependencies:consul:version: 0.7.5redis:version: 2:2.8.4-2vault:version: 0.7.0
services:clouddriver:commit: 98204860175e00f8b1e01b43f8fa06670cc4cd2eversion: local:5.82.0deck:commit: 4bc0ae68f578f94fb5473a90d2db18d4c580944aversion: local:3.15.1echo:commit: c24b570673fc0f441a65fb69f6936027905c686dversion: local:2.39.0fiat:commit: 37a686b46d1bfe5569fff487151d6b8e84295169version: local:1.42.0front50:commit: f8d4d344e3858d9c3d45534d34a10e51181ece8eversion: local:2.30.1gate:commit: 431b73f62d5d2caec4619e64ca7084c0d61f7b9eversion: local:6.60.1igor:commit: 95c19bd7f49d5fd831104c8a0a92195a6eded154version: local:4.13.3kayenta:commit: 137036d870f9f4834eccd60d7895b212a42b9080version: local:2.38.0monitoring-daemon:commit: 96d510cb22f65dcf788324ed8b68447c31de255aversion: local:1.4.0monitoring-third-party:commit: 96d510cb22f65dcf788324ed8b68447c31de255aversion: local:1.4.0orca:commit: cb269b64cf2883317cd169cc7d82b75093ad6754version: local:8.36.0rosco:commit: a035e26d7fadeb258cb3c4206e386203c6ab1ac3version: local:1.18.0
timestamp: '2023-09-20 20:55:47'
version: 1.32.2

配置 halyard 以引用本地鏡像

配置 halyard 從國內鏡像倉庫拉取 Spinnaker 微服務鏡像。編輯 ~/.hal/.boms/bom 文件夾中的 <version>.yml 文件,修改dockerRegistry參數,例如:

$ vim /home/spinnaker/.hal/.boms/bom/1.32.2.yml
artifactSources:debianRepository: https://us-apt.pkg.dev/projects/spinnaker-communitydockerRegistry: registry.cn-shenzhen.aliyuncs.com/cnmirrorgitPrefix: https://github.com/spinnakergoogleImageProject: marketplace-spinnaker-release

本地 BOM 僅引用 Spinnaker 服務的私有注冊表,而不引用 Redis 等依賴服務。如果想從自己的私有注冊表中提取 Redis 映像,需要創建一個~/.hal/$DEPLOYMENT/service-settings/redis.yml文件,其中 $DEPLOYMENT 通常是默認值。

DEPLOYMENT=default
mkdir -p /home/spinnaker/.hal/$DEPLOYMENT/service-settings/
cat >/home/spinnaker/.hal/$DEPLOYMENT/service-settings/redis.yml<<EOF
artifactId: registry.cn-shenzhen.aliyuncs.com/cnmirror/redis:6.2
EOF
chown -R 1000:1000 /home/spinnaker

在單獨的 shell 中,以root身份連接到 Halyard:

docker exec -it -u root halyard bash

禁用gcs,配置halyard使用本地boms文件,可以新建halyard-local.yml或修改halyard.yml

cat >/opt/halyard/config/halyard-local.yml<<EOF
spinnaker:config:input:gcs:enabled: false
EOF

重新啟動halyard

docker restart halyard

halyard 配置 spinnaker

后續所有操作都在halyard容器中執行。

docker exec -it halyard bash

指定 Spinnaker 版本

列出當前halyard可用的spinnaker版本。

hal version list

選擇一個要部署的 spinnaker 版本,這里以 spinnaker 最新版本為例,讀取本地boms文件需要在版本號前加上local。

hal config version edit --version local:1.32.2

添加spinnaker賬戶

使用kubernetes cluster-admin作為spinnaker賬戶

hal config provider kubernetes account add spinnaker-admin \
--context $(kubectl config current-context)

為Spinnaker UI設置時區

hal config edit --timezone Asia/Shanghai

指定providers

配置提供程序,指定為kubernetes

hal config provider kubernetes enable

指定安裝環境

分布式安裝適用于資源占用量較大的開發組織,以及那些無法承受 Spinnaker 更新期間停機的情況。

使用您在配置提供程序時創建的$ACCOUNT名稱運行以下命令:

hal config deploy edit --type distributed --account-name spinnaker-admin

指定外置存儲

記錄值如下:

export ENDPOINT="http://minio.minio:9000"
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=minio123

鑒于 Minio 不支持版本控制對象,需要在 Spinnaker 中禁用它。將以下行添加到 ~/.hal/$DEPLOYMENT/profiles/front50-local.yml

DEPLOYMENT=default
mkdir -p /home/spinnaker/.hal/$DEPLOYMENT/profiles
echo "spinnaker.s3.versioning: false" > /home/spinnaker/.hal/$DEPLOYMENT/profiles/front50-local.yml

$DEPLOYMENT 通常是 default 。在這里內容。如果該文件不存在,則可能需要創建它。

編輯存儲設置,運行以下命令(請注意,我們選擇 S3 作為存儲類型,因為 Minio 實現了 S3 API):

echo $MINIO_SECRET_KEY | hal config storage s3 edit --path-style-access=true \--endpoint $ENDPOINT \--access-key-id $MINIO_ACCESS_KEY \--secret-access-key
hal config storage edit --type s3

配置spinnaker UI URL

修改Spinnaker Deck和Gate的域名配置,與后續創建的ingress規則域名一致。

hal config security ui edit --override-base-url http://spinnaker.example.com
hal config security api edit --override-base-url http://spinnaker.example.com/api/v1

修改gate組件配置,與override-base-url和ingress規則一致

mkdir -p /home/spinnaker/.hal/default/profiles
cat >/home/spinnaker/.hal/default/profiles/gate-local.yml<<EOF
server:servlet:context-path: /api/v1
EOFmkdir -p /home/spinnaker/.hal/default/service-settings
cat >/home/spinnaker/.hal/default/service-settings/gate.yml<<EOF
healthEndpoint: /api/v1/health
EOF

部署 Spinnaker

執行以下命令開始部署 Spinnaker 到 kubernetes 集群

hal deploy apply

命令輸出結果如下:

spinnaker@ubuntu:~$ hal deploy apply
+ Get current deploymentSuccess
+ Prep deploymentSuccess
Validation in default.stats:
- INFO Stats are currently ENABLED. Usage statistics are beingcollected. Thank you! These stats inform improvements to the product, and thathelps the community. To disable, run `hal config stats disable`. To learn moreabout what and how stats data is used, please seehttps://spinnaker.io/docs/community/stay-informed/stats.+ Preparation complete... deploying Spinnaker
+ Get current deploymentSuccess
+ Apply deploymentSuccess
+ Deploy spin-redisSuccess
+ Deploy spin-clouddriverSuccess
+ Deploy spin-front50Success
+ Deploy spin-orcaSuccess
+ Deploy spin-deckSuccess
+ Deploy spin-echoSuccess
+ Deploy spin-gateSuccess
+ Deploy spin-roscoSuccess
+ Run `hal deploy connect` to connect to Spinnaker.

查看創建的pods,所有pod完全運行可能需要5~10m,需要耐心等待。

root@node40:~# kubectl -n spinnaker get pods
NAME                                READY   STATUS    RESTARTS   AGE
spin-clouddriver-77b9989787-962xc   1/1     Running   0          5m59s
spin-deck-7b6d795dcb-8pxfk          1/1     Running   0          6m
spin-echo-bbcd4f8f-nnnsf            1/1     Running   0          6m
spin-front50-58bf57cbcf-hd55d       1/1     Running   0          5m58s
spin-gate-5d4f6c9dd9-ks6m6          1/1     Running   0          6m
spin-orca-5cbf687487-bgbvx          1/1     Running   0          5m59s
spin-redis-6d475cc85c-mcv2v         1/1     Running   0          6m1s
spin-rosco-5df7654856-8pd7q         1/1     Running   0          5m58s

查看創建的service

root@node40:~# kubectl -n spinnaker get svc
NAME               TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
spin-clouddriver   ClusterIP   10.96.0.171   <none>        7002/TCP   6m7s
spin-deck          ClusterIP   10.96.3.245   <none>        9000/TCP   6m6s
spin-echo          ClusterIP   10.96.2.106   <none>        8089/TCP   6m6s
spin-front50       ClusterIP   10.96.1.59    <none>        8080/TCP   6m7s
spin-gate          ClusterIP   10.96.1.2     <none>        8084/TCP   6m6s
spin-orca          ClusterIP   10.96.0.69    <none>        8083/TCP   6m7s
spin-redis         ClusterIP   10.96.3.62    <none>        6379/TCP   6m7s
spin-rosco         ClusterIP   10.96.2.66    <none>        8087/TCP   6m6s

查看pods鏡像,默認從阿里云鏡像倉庫拉取:

root@node40:~# kubectl -n spinnaker get pods  -o yaml  | grep image: | sort -uimage: registry.cn-shenzhen.aliyuncs.com/cnmirror/redis:6.2image: registry.cn-shenzhen.aliyuncs.com/cnmirror/clouddriver:5.82.0image: registry.cn-shenzhen.aliyuncs.com/cnmirror/deck:3.15.1- image: registry.cn-shenzhen.aliyuncs.com/cnmirror/deck:3.15.1image: registry.cn-shenzhen.aliyuncs.com/cnmirror/echo:2.39.0image: registry.cn-shenzhen.aliyuncs.com/cnmirror/front50:2.30.1image: registry.cn-shenzhen.aliyuncs.com/cnmirror/gate:6.60.1image: registry.cn-shenzhen.aliyuncs.com/cnmirror/orca:8.36.0image: registry.cn-shenzhen.aliyuncs.com/cnmirror/rosco:1.18.0

連接到 Spinnaker UI

這里使用ingress連接spinnaker UI,創建如下Ingress規則

cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: spin-ingressnamespace: spinnaker
spec:rules:- host: spinnaker.example.comhttp:paths:- path: /pathType: ImplementationSpecificbackend:service:name: spin-deckport:number: 9000- host: spinnaker.example.comhttp:paths:- path: /api/v1pathType: ImplementationSpecificbackend:service:name: spin-gateport:number: 8084
EOF

查看創建的ingress規則

root@node40:~# kubectl -n spinnaker get ingress
NAME           CLASS   HOSTS                                         ADDRESS          PORTS   AGE
spin-ingress   nginx   spinnaker.example.com,spinnaker.example.com   192.168.72.191   80      75s

本地配置hosts解析,其中 192.168.72.191 為ingress服務綁定的 EXTERNAL-IP

192.168.72.191 spinnaker.example.com

瀏覽器訪問spinnaker

http://spinnaker.example.com

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166142.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166142.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166142.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Divisibility Trick

Dmitry最近學會了一個簡單的規則來檢查一個整數是否可以被3整除。如果一個整數的位數之和可以被3整除&#xff0c;那么它就可以被3所整除。 后來他還了解到&#xff0c;同樣的規則也可以用來檢查一個整數是否可以被9整除。如果一個整數的位數之和可以被9整除&#xff0c;那么它…

如何在 Web 應用程序中查找端點?

如何在 Web 應用程序中查找端點? 這篇文章主要講述了如何在網絡應用中找到端點。以下是文章的主要要點: 端點是網絡服務的訪問地址,通過引用這個URL,客戶可以訪問服務提供的操作。端點提供了尋址Web服務端點所需的信息。 HTTP消息是服務器和客戶端之間交換數據的方式,包…

Anaconda深度學習環境配置命令參考

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 Anaconda深度學習環境配置 Anaconda 管理1. 檢查 Anaconda 版本2. 獲取版本號3. 列出所有的虛擬環境4. 查看環境管理的全部命令幫助5. conda升級6. conda升級后釋放空間 Anac…

2024免費MacBook清理工具CleanMyMac X4.15

CleanMyMac X 是一款專業的Mac清理軟件&#xff0c;可智能清理mac磁盤垃圾和多余語言安裝包&#xff0c;快速釋放電腦內存&#xff0c;輕松管理和升級 Mac 上的應用。同時 CleanMyMac X 可以強力卸載惡意軟件&#xff0c;修復系統漏洞&#xff0c;一鍵掃描和優化 Mac 系統&…

競賽知識點12【樹狀數組】

文章目錄 1、思路引入2、求lowbit(n)3、對某個元素進行加法操作(單點更新)4、查詢前綴和5、統計A[x]~A[y] 的值1、思路引入 如果線段樹每個節點維護的是對應區間的和,比如說計算從 s s s 到 t t t 的和 ( a s + … + a t ) (a_s+…+a_t) (as?+…+at?),在基于線段樹的實…

【ChatGLM3-6B】Docker下部署及微調

【ChatGLM2-6B】小白入門及Docker下部署 注意&#xff1a;Docker基于鏡像中網盤上上傳的有已經做好的鏡像&#xff0c;想要便捷使用的可以直接從Docker基于鏡像安裝看Docker從0安裝前提下載啟動訪問 Docker基于鏡像安裝容器打包操作&#xff08;生成鏡像時使用的命令&#xff0…

Nginx常用負載均衡策略

Nginx常用負載均衡策略 輪詢&#xff08;默認&#xff09; 注意&#xff1a;這里的輪詢并不是每個請求輪流分配到不同的后端服務器&#xff0c;與ip_hash類似&#xff0c;但是按照訪問url的hash結果來分配請求&#xff0c;使得每個url定向到同一個后端服務器&#xff0c;主要…

什么手機30萬?VERTU唐卡手機頂配56.8萬

近日,一則新聞在社交媒體上引發了廣泛關注。一名男子遺失了一部價值30萬的VERTU唐卡定制款手機,而一位女士在撿到這部手機后,誤以為是一部普通的老年機,引發了種種誤會。30萬的手機是什么牌子?VERTU唐卡手機浮出水面 據了解,這部VERTU唐卡定制款手機是一款豪華的奢侈品定制手機…

2-Python與設計模式--前言

0-Python與設計模式–前言 一 什么是設計模式 設計模式是面對各種問題進行提煉和抽象而形成的解決方案。這些設計方案是前人不斷試驗&#xff0c; 考慮了封裝性、復用性、效率、可修改、可移植等各種因素的高度總結。它不限于一種特定的語言&#xff0c; 它是一種解決問題的思…

GoogleNet詳解

一、亮點 AlexNet、VGG都只有一個輸出層。googlenet有三個&#xff08;其中兩個是輔助分類層&#xff09; 二、先看看Inception結構 1、Inception 之前的網絡&#xff1a; AlexNet、VGG都是串行結構 Inception&#xff1a; 并行結構 上一層的輸出同時傳入四個并行結構&…

有了傾斜攝影,如何搭建一座智慧城市?

隨著無人機航測、傾斜攝影等全新一代測繪信息技術方法的發展&#xff0c;可以迅速搜集制作精細化的城市三維模型&#xff0c;搭建城市地理信息基礎服務架構。 近期都在重點關注的“智慧城市”究竟是什么&#xff0c;有什么重大作用&#xff0c;同時又面臨著什么難關&#xff0c…

短劇付費變現小程序源碼系統+開通會員+在線充值 附帶完整的搭建教程

大家好啊&#xff0c;今天小編來給大家分享一款短劇付費變現小程序源碼系統。近年來&#xff0c;隨著互聯網技術的飛速發展&#xff0c;短劇成為了一個備受矚目的領域。短劇以其簡潔、緊湊的故事情節和制作周期短、傳播速度快的特點&#xff0c;成為了越來越多人的選擇。然而&a…

小紅書達人類型特點有哪些,創作形式總結!

小紅書自帶的社交電商屬性&#xff0c;吸引了眾多優秀的內容創作者和品牌達人。他們以不同的風格和主題&#xff0c;贏得了粉絲們的喜愛和關注。今天為大家分享下小紅書達人類型特點有哪些&#xff0c;創作形式總結&#xff01; 1. 內容創作風格 我們從內容上來區分小紅書達人類…

微信小程序開發學習——小程序基本架構

1.創建一個包含&#xff1a;首頁、咨詢、關于我們 3個標簽的小程序&#xff0c;每個標簽都有對應的頁面、圖標和標簽文字。 知識點&#xff1a;app.json文件對小程序進行全局配置&#xff0c;同名.json文件對本窗口進行配置 app.json屬性&#xff1a; pages用于指定小程序由哪…

設計模式之建造者(Builder)模式

目錄 1、什么是建造者Builder模式&#xff1f; 2、建造者Builder模式的利與弊 3、建造者Builder模式的應用場景 4、建造者模式中的指導者&#xff08;Director&#xff09;有什么作用&#xff1f; 5、建造者Builder模式與其他模式的關系 小結 1、什么是建造者Builder模式…

百分點科技入選《2023年央國企數字化升級研究報告》

近日&#xff0c;艾瑞咨詢發布了《2023年央國企數字化升級研究報告》&#xff0c;報告總結了央國企數字化升級的方向和特點&#xff0c;并重點研究了基礎平臺及關鍵技術工具、通用及綜合型應用、重要配套建設等方面。報告指出&#xff0c;數據治理是央國企數字化升級過程中的重…

【鴻蒙應用ArkTS開發系列】- 云開發入門實戰二 實現省市地區三級聯動地址選擇器組件(上)

目錄 概述 云數據庫開發 一、創建云數據庫的對象類型。 二、預置數據&#xff08;為對象類型添加數據條目&#xff09;。 三、部署云數據庫 云函數實現業務邏輯 一、創建云函數 二、云函數目錄講解 三、創建resources目錄 四、獲取云端憑據 五、導出之前創建的元數據…

HTML新手入門筆記整理:特殊符號

音標符 音標符 字符 Construct 輸出結果 ?、 a a a? ?′ a a a?n ? a a a? ?&#xff5e; a a a? ??、 O O O? ??′ O O O? ? O O O? ?&#xff5e; O O O? 字符 顯示結果 描述 實體名稱 實體編號 空格 <…

【數據結構】F : 道路建設 (Ver. I)

F : 道路建設 (Ver. I) Description 有N個村莊&#xff0c;編號從1到N&#xff0c;你應該建造一些道路&#xff0c;使每個村莊都可以相互連接。 兩個村A和B是相連的&#xff0c;當且僅當A和B之間有一條道路&#xff0c;或者存在一個村C使得在A和C之間有一條道路&#xff0c;并…

編程實例,隨機抽獎編程

編程實例&#xff0c;隨機抽獎編程 操作步驟&#xff1a; 1、將在本店消費的會員數據導入到抽獎池&#xff0c;可以設定最近多少天內的記錄。 2、點擊 開始隨機抽獎&#xff0c;軟件將從抽獎池隨機抽取9名&#xff0c;并不斷變化&#xff0c;每0.02秒重新隨機抽取9名顯示到屏…