Giaosucan's blog - Chia sẻ kiến thức theo cách bá đạo

Ticker

20/recent/ticker-posts

Vọc banh xác với Spinnaker - Part 2

Image result for spinnaker on GCE
Tiếp tục phần 1, bài này sẽ hướng dẫn các bạn cách setup spinnaker. Bạn có thể cài đặt Spinnaker trên máy local, trên GCE hoặc EKS, ECS. Mỗi môi trường có những cách cài đặt khác nhau, giaosucan’s blog sẽ trình bày chi tiết trong những bài tiếp theo. Bài này sẽ cài đặt Spinnaker trên GCE kubernetes

Điều kiện ban đầu

Bạn cần 1 tài khoản GCE, GCE cho free trial 1 year với 300$ tài khoản đủ xài thoải mái
Tạo 1 Kubernetes cluster trên GCE, muốn hiểu Kubernetes là gì thì đọc nhá
Máy tính Linux cài sẵn gcloud SDK tool

Cài đặt Spinnaker

Trên Linux terminal, connect vào Kubernetes cluster ở trên
gcloud container clusters get-credentials demo-spinnaker --zone us-central1-a --project inlaid-fuze-237009

Configure identity and access management

Bạn cần Cloud IAM (Một loại Identity có permission để access vào GCE resource) service account để delegate permission cho Spinnaker.

Tạo service account

gcloud iam service-accounts create  spinnaker-account \
    --display-name spinnaker-account
Lưu service account email address và project ID vào biến môi trường

export SA_EMAIL=$(gcloud iam service-accounts list \
    --filter="displayName:spinnaker-account" \
    --format='value(email)')
export PROJECT=$(gcloud info --format='value(config.project)')
Gán quyền storage.admin role cho service account trên. Role này sẽ cho phép service account có thể truy cập vào Google Cloud storage

gcloud projects add-iam-policy-binding \
    $PROJECT --role roles/storage.admin --member serviceAccount:$SA_EMAIL
Download service account key này về để dùng cho sau này

gcloud iam service-accounts keys create spinnaker-sa.json --iam-account $SA_EMAIL

Dùng Helm để deploy Spinnaker

Helm gọi là Kubernetes Package Manager, dùng để cài đặt ứng dụng trên Kubernetes. Bạn có thể download Helm về rồi cài đặt như guideline trên mạng
Server side của Helm gọi là Tiller, grant Tiller này quyền admin trên cluster của bạn

kubectl create clusterrolebinding user-admin-binding --clusterrole=cluster-admin --user=$(gcloud config get-value account)
kubectl create serviceaccount tiller --namespace kube-system
kubectl create clusterrolebinding tiller-admin-binding --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl create clusterrolebinding --clusterrole=cluster-admin --serviceaccount=default:default spinnaker-admin
Khởi tạo Helm để install Tiller vào cluster
./helm init --service-account=tiller
./helm update
Run lệnh ./helm version để kiểm tra helm đã install thành công chưa

Configure Spinnaker

Tạo 1 bucket để Spinnaker lưu những thông tin về pipeline
export PROJECT=$(gcloud info \
    --format='value(config.project)')
export BUCKET=$PROJECT-spinnaker-config
gsutil mb -c regional -l us-central1 gs://$BUCKET
Tạo 1 file spinnaker-config.yaml để mô tả những thông tin cấu hình của Spinnaker

export SA_JSON=$(cat spinnaker-sa.json)
export PROJECT=$(gcloud info --format='value(config.project)')
export BUCKET=$PROJECT-spinnaker-config
cat > spinnaker-config.yaml <<EOF
gcs:
  enabled: true
  bucket: $BUCKET
  project: $PROJECT
  jsonKey: '$SA_JSON'

dockerRegistries:
- name: gcr
  address: https://gcr.io
  username: _json_key
  password: '$SA_JSON'
  email: 1234@5678.com

# Disable minio as the default storage backend
minio:
  enabled: false

# Configure Spinnaker to enable GCP services
halyard:
  spinnakerVersion: 1.10.2
  image:
    tag: 1.12.0
  additionalScripts:
    create: true
    data:
      enable_gcs_artifacts.sh: |-
        \$HAL_COMMAND config artifact gcs account add gcs-$PROJECT --json-path /opt/gcs/key.json
        \$HAL_COMMAND config artifact gcs enable
      enable_pubsub_triggers.sh: |-
        \$HAL_COMMAND config pubsub google enable
        \$HAL_COMMAND config pubsub google subscription add gcr-triggers \
          --subscription-name gcr-triggers \
          --json-path /opt/gcs/key.json \
          --project $PROJECT \
          --message-format GCR
EOF

Deploy the Spinnaker chart

Dùng helm command để deploy chart 
./helm install -n cd stable/spinnaker -f spinnaker-config.yaml --timeout 600 \ --version 1.1.6 --wait
Sau lệnh này, helm sẽ tự động deploy các service của Spinnaker 
Dùng lệnh kubectl get pods sẽ thấy danh sách các pod được helm deploy lên

Expose Spinnaker to User

Tuy nhiên nếu chỉ dừng ở đây, bạn chỉ có thể truy cập Spinnaker trên localhost. Cần phải expose Spinnaker public ra internet để user sử dụng
Spinnaker cần 2 microservice cần expose là spin-gate và spin-deck. Spin-deck port 9000 là browser GUI, còn spin-gate port 8084 là gateway API của Spinnaker. Ta cần tạo 2 service dạng LoadBalancer để expose chúng. 
kubectl expose service spin-gate --type LoadBalancer \
  --port 80
  --target-port 8084 \
  --name spin-gate-public
kubectl  expose service spin-deck --type LoadBalancer \
  --port 80

Run lệnh kubectl get svc sẽ thấy 2 LoadBalancer được tạo
 
2 service open port 80 sẽ forward để target port của spin deck và gate. 
Bây giờ có thể truy cập public Spinnaker qua external IP
Ngoài ra bạn có thể tạo DNS cho spinnaker này để point vào load balancer nếu cần


Spinnaker này khi được launch lên thì hoàn toàn trống trơn, bạn muốn Spinnaker có thể làm việc với cloud provider khác như AWS, Azure hay Jenkins, Docker registry thì cần phải config cho nó. Việc này sẽ được trình bày ở bài sau

Đăng nhận xét

0 Nhận xét