Sign inSign up

sacloud/cluster-api-provider-sakuracloud

By sacloud

Updated almost 7 years ago

Kubernetes-native declarative infrastructure for SakuraCloud

Image
0

585

sacloud/cluster-api-provider-sakuracloud repository overview

cluster-api-provider-sakuracloud

Kubernetes-native declarative infrastructure for SakuraCloud.

What is the Cluster API Provider SakuraCloud

Cluster APIのさくらのクラウド向けプロバイダー実装

対応バージョン

Cluster API v1alpha1 (v0.1)Cluster API v1alpha2 (v0.2)
SakuraCloud Provider v1alpha2 (v0.1)

This provider's versions are able to install and manage the following versions of Kubernetes:

Kubernetes 1.14Kubernetes 1.15Kubernetes 1.16
SakuraCloud Provider v1alpha2 (v0.1)

Quick Start

  • さくらのクラウド APIキーの取得/環境変数へ設定
  • ソースアーカイブのビルド
  • マニフェストの生成
  • Management Clusterの作成
  • Cluster API/Bootstrap Provider/Infrastructure Provider(さくらのクラウド向け)のデプロイ
  • Control Planeの作成
  • アドオン(CNIなど)のデプロイ
  • Machineの作成
さくらのクラウド APIキーの作成/環境変数へ設定

さくらのクラウド APIキーを作成し、環境変数に設定しておきます。

export SAKURACLOUD_ACCESS_TOKEN=<APIトークン>
export SAKURACLOUD_ACCESS_TOKEN_SECRET=<APIシークレット>
export SAKURACLOUD_ZONE=is1a
ソースアーカイブの準備

ソースアーカイブをビルドするためにpacker,ansible,qemu-img,usacloudが必要です。
事前にインストールしておいてください。

まずUbuntuのクラウドイメージをさくらのクラウドのアーカイブとしてアップロードします。

# ダウンロード(今回は18.04を利用)
curl -sL -o ubuntu.img https://cloud-images.ubuntu.com/releases/bionic/release/ubuntu-18.04-server-cloudimg-amd64.img 

# qcowからraw形式(sparse)へ変換
qemu-img convert ubuntu.img ubuntu-sparse.raw

# non-sparseファイルにする
cp --sparse=never ubuntu-sparse.raw ubuntu.raw

# さくらのクラウド上にアーカイブとしてアップロード
usacloud archive create --name cloud-image-ubuntu-18.04 --size 20 --archive-file ubuntu.raw  

次に、Packerでのアーカイブ作成時に利用するcloud-initのNoCloudデータソース用ISOイメージを作成してさくらのクラウドにアップロードします。

# 作業用ディレクトリ作成
mkdir workdir

# SSH公開鍵(任意のパスに置き換えてください)
export SSH_AUTHORIZED_KEY=`cat ~/.ssh/id_rsa.pub`

# user-dataファイルの作成
cat >workdir/user-data <<EOF
#cloud-config
ssh_authorized_keys:
- ${SSH_AUTHORIZED_KEY}
EOF

# meta-dataファイルの作成
touch workdir/meta-data

# ISOイメージの作成(linux上で作業する場合)
mkisofs -R -V cidata -o cloud-init.iso workdir/

# ISOイメージの作成)mac上で作業する場合)
# hdiutil makehybrid -iso -joliet -default-volume-name cidata -o cloud-init.iso workdir/

# さくらのクラウド上にISOファイルをアップロード
usacloud iso-image create --name packer-capi-image-builder --iso-file cloud-init.iso

その後Packerでアーカイブ作成を行います。

# ソースアーカイブのビルドスクリプトのリポジトリをクローン
git clone https://github.com/sacloud/image-builder.git ; cd image-builder/images/capi

# Packerプラグインのインストール
$(cd packer/sakuracloud; make plugins)

# ビルド
ARCHIVE_ID="$(usacloud archive read -q cloud-image-ubuntu-18.04)"
ISO_IMAGE_ID="$(usacloud iso-image read -q packer-capi-image-builder)"
PACKER_FLAGS="-var 'source_archive_id=${ARCHIVE_ID}' -var 'cloud_init_iso_image_id=${ISO_IMAGE_ID}'"
make build-sakuracloud-default 

デフォルトでcapi-kubernetes-templateという名前のアーカイブが作成されます。

マニフェストの生成
# リポジトリをクローン
git clone https://github.com/sacloud/cluster-api-provider-sakuracloud; cd cluster-api-provider-sakuracloud

# 作成するサーバに対しSSH接続したい場合は以下の環境変数を指定しておく(ユーザー名: caps)
export SSH_AUTHORIZED_KEY="$(cat ~/.ssh/id_rsa.pub)"

# マニフェストの生成(デフォルトではout/caps-exampleディレクトリ配下に出力される)
examples/generate.sh
Management Clusterの作成

ここではkindを利用します。
事前にインストールしておいてください。

# Management Clusterの作成
kind create cluster --name=clusterapi

# kubeconfigを作成したクラスタに向ける
export KUBECONFIG="$(kind get kubeconfig-path --name="clusterapi")"
Cluster API/Bootstrap Provider/Infrastructure Provider(さくらのクラウド向け)のデプロイ
kubectl apply -f out/caps-example/provider-components.yaml
Control Planeの作成
kubectl apply -f out/caps-example/cluster.yaml
kubectl apply -f out/caps-example/controlplane.yaml

サーバが作成されたあと、以下のコマンドで作成されたクラスタのkubeconfigを取得します。

kubectl get secret caps-example-kubeconfig -o json | jq -r .data.value | base64 --decode > caps-example.kubeconfig
アドオン(CNIなど)のデプロイ

ここではCNIプラグインとしてCalicoをデプロイします。 (作成されたクラスタに対してデプロイします)

kubectl --kubeconfig=caps-example.kubeconfig apply -f out/caps-example/addons.yaml
Machineの作成
kubectl -f out/caps-example/machinedeployment.yaml

kubectl edit machinedeployment caps-example-md-0コマンドで.spec.replicasを変更することでワーカーノードの増減が行えます。

CRDs

SakuraCloudCluster
apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2
kind: SakuraCloudCluster
metadata:
  name: caps-example
  namespace: default
spec:
  cloudProviderConfiguration:
    zone: 'is1a'
  zone: 'is1a'
SakuraCloudMachine
# Control Plane
apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2
kind: SakuraCloudMachine
metadata:
  labels:
    cluster.x-k8s.io/cluster-name: caps-example
    cluster.x-k8s.io/control-plane: "true"
  name: caps-example-controlplane-0
  namespace: default
spec:
  sourceArchive:
    filters:
    - name: Name
      values:
      - capi-kubernetes-template
  cpus: 2
  diskGB: 20
  memoryGB: 4
SakuraCloudMachineTemplate
# Worker nodes
apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2
kind: SakuraCloudMachineTemplate
metadata:
  name: caps-example-md-0
  namespace: default
spec:
  template:
    spec:
      sourceArchive:
        filters:
        - name: Name
          values:
          - capi-kubernetes-template
      cpus: 2
      diskGB: 20
      memoryGB: 2

License

cluster-api-provider-sakuracloud Copyright (C) 2019 Kazumichi Yamamoto.

This project is published under Apache 2.0 License.

Author

Tag summary

Content type

Image

Digest

Size

21.7 MB

Last updated

almost 7 years ago

docker pull sacloud/cluster-api-provider-sakuracloud