44
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Oracle Cloud Free Tierで0円KubernetesをTerraform+Ansibleで自動構築する

Last updated at Posted at 2020-08-30

はじめに

2019年のOracle OpenWorld 2019で特定の機能を期限なく無料で使える「Always Free」が発表されました。

https://www.oracle.com/jp/cloud/free/
Oracle Cloud Free Tierには下記が含まれます。

  • 30日間の無償トライアル
    • 300米ドルの無償クレジット。
      • データベース、アナリティクス、コンピュート、Container Engine for Kubernetesなどの幅広いOracle Cloudサービスに30日間アクセス可能
      • すべての使用可能なサービスで最大8つのインスタンス
      • 最大5TBのストレージ
      • etc...
  • Always Freeサービス
    • 無期限に使用できるサービス。
      • Oracle Application Express(APEX)やOracle SQL Developerなどの強力なツールを含む、2つのOracle Autonomous Database
      • 2つのOracle Cloud Infrastructure Compute VM、ブロック・ストレージ、オブジェクト・ストレージ、アーカイブ・ストレージ、ロード・バランサとデータ・エグレス、監視と通知

このAlways Free Resourceを使ってKubernetesクラスタを自動で組んでしまおうというのが本記事の主旨になります。

作成したTerraformのHCLやAnsible Playbookについては下記に配置しています。
https://github.com/gashirar/kubernetes-on-oci-free-tier

構成図

Always Freeの2つのインスタンスをそれぞれMasterとWorkerとしたKubernetesクラスタをKubeadmで構築します。
ネットワークやインスタンスの構築までをTerraformで実施し、インスタンス上のコンテナランタイムの設定やKubeadmの実行はAnsibleで行います。

[2022/03/14 追記]
VCNのCIDRですが、正しくは10.0.0.0/16です。
指摘がありがとうございます。

architectur.png

構築の流れ

OCI CLIの設定

こちらをどうぞ。
https://docs.cloud.oracle.com/ja-jp/iaas/Content/API/SDKDocs/cliinstall.htm

テナンシOCIDの取得

右上のアイコンから「テナンシ」をクリックし、テナンシのOCIDを取得します。

image.png

ユーザーOCIDの取得

右上のアイコンから「ユーザー設定」をクリックし、ユーザのOCIDを取得します。

image.png

コンパートメントの作成とOCIDの取得

Oracle Cloud Infrastructureのコンパートメントについては下記が詳しいです。
https://blogs.techvan.co.jp/oci/2019/02/06/oracle-cloud-infrastructureのコンパートメントについて/

左側のメニューから「アイデンティティ」→「コンパートメント」と選択し、コンパートメントを作成します。

image.png

上記の「OCID」を後の工程で使うのでメモしておきましょう。

Terraformのパラメータ設定

リポジトリのterraform/main.tfvars.exampleをコピーし、terraform/main.tfvarsを作成します。

# OCI Provider Settings
tenancy_ocid         = "<テナンシのOCID>"
compartment_ocid     = "<コンパートメントのOCID>"
user_ocid            = "<ユーザのOCID>"
private_key_path     = "<OCI CLIの秘密鍵の絶対パス>"
private_key_password = "<OCI CLIの秘密鍵のパスフレーズ>"
fingerprint          = "<OCI CLIのフィンガープリント>"
region               = "ap-tokyo-1"
ssh_public_key_path  = "<SSHログイン用の公開鍵の絶対パス>"
cluster_name         = "任意のクラスタ名"

# VCN
vcn_cidr_block           = "10.0.0.0/16"
master_subnet_cidr_block = "10.0.0.0/24"
worker_subnet_cidr_block = "10.0.1.0/24"

shape = "VM.Standard.E2.1.Micro"

## Oracle-Linux-7.8
os_user  = "opc"
image_id = "ocid1.image.oc1.ap-tokyo-1.aaaaaaaawuqkyea4y5khemhmw4j3yqmekacaan4d5yb2kvkkustj737fikqa"

設定後に./bin/terraform.shを実行すると、OCI上に各種リソースが作成されます。

Ansible Playbookの実行

./bin/terraform.shの実行後、ansibleディレクトリにhosts.iniが作成されているはずです。
正しく生成されていることを確認したら、./bin/ansible.shを実行することでKubeadmによるクラスタの構築が行われます。

kubectlによるクラスタの操作

Ansible PlaybookでホームディレクトリにAdmin用のkubeconfigファイルadmin.confが生成されるので、それをkubectlに設定してください。

クラスタの削除

./bin/destroy.shterraform destroyが実行されます。

実装ポイント

メモリ不足を補うためにSwapをOnにする

Free Tierで利用できるインスタンスですが、1GBであるためKubeadmで構築したKubernetesクラスタを実行するには少々貧弱です。そのメモリ不足を補うためにも、今回はswapをonにした状態で構築できるようにしました。

通常のKubernetesクラスタであればNodeのSwapはOffにすることが推奨となっており、Onの場合はエラーで構築ができません。
今回はkubeadmのインストール時のパラメータを変更することでSwap onのままでも構築できるようにしています。

ansible/roles/kubernetes/master/tasks/init.yaml

- name: Init Kubernetes cluster
  when: reset_cluster is succeeded
  shell: |
    kubeadm init --config "/etc/kubernetes/kubeadm-config.yaml" \
                 --upload-certs \
                 --ignore-preflight-errors=swap ★swapのエラーは無視する設定

ansible/roles/kubernetes/master/templates/kubeadm-config.yaml.j2

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
failSwapOn: false ★swapが有効化されていてもエラーで終了しないように

Swap周りについては下記のブログを参考にしました。ありがとうございます。
https://inajob.hatenablog.jp/entry/always-free-kubernetes

TODO

Oracle Cloud Free TierにはLoadBalancerも1つ無料で利用できるので、このロードバランサ―をつかってIngressも自動で構築するのもよさそうですね。また時間があるときに。

本当に無料?

とりあえず稼働させてみてますが、トライアルクレジットが33,000円から変化がないので(多分)大丈夫だと思われます。
image.png

参考

https://blog.potproject.net/2019/11/05/oracle-cloud-kubernetes-k3s-cluster
https://inajob.hatenablog.jp/entry/always-free-kubernetes

44
37
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?