LoginSignup
9
2

More than 1 year has passed since last update.

TCE で OSS を始めよう!

Last updated at Posted at 2021-11-30

こんにちわ!TUNA-JP の運営をしております、佐藤寛貴と申します。

TUNA-JP を改めて簡単に紹介すると、VMware Tanzu と呼ばれる Kubernetes のプラットフォームと、そこで使われる OSS 郡を活用するための、日本のユーザーのためのコミュニティ として、この度立ち上げました。

VMwareと聞くと、「エンタープライズ向け製品の会社でしょ?興味ないなぁ・・」と思った方もいるかもしれません。でも本日ご紹介する Tanzu Community Edition (以下、TCE) は、なんと無料で使えちゃうんです!そして、そこで利用可能になる OSS エコシステムの機能は、vSphere ユーザ以外の方でも、魅力的な選択肢となるのではないかなと、思っております。

そう、今、TCE で Kubernetes がとても熱いんです!

TL;DR (この記事の要約)

  • TCE のことをざっくり学ぶ
  • tanzu package コマンドが凄い!

速習!TCEの予備知識

いきなりTCEの話を始めても「???」となってしまうかと思うので、まずは、いくつかの予備知識をインプットさせていただきます。(既に知っている人は読み飛ばして下さい)

質問1. そもそも Tanzu って何?

答え: Tanzu とは、日本語の タンス(コンテナを表現)と、スワヒリ語の (可能性の分岐を表現)をかけ合わせた造語です。それ以上に深い意味は無いはずなので、とりあえずは、VMware が提供している、 Kubernetes に関するエンタープライズ向けのなんか凄そうな製品群 と思えておいて下さい。

質問2. Tanzu のコミュニティ版 (TCE)って、どういうこと?

答え: まず前提として、Tanzuの製品群の中核にあたる、Tanzu Kubernetes Grid (以下、TKG) と呼ばれる マネージドKubernetesを実現するための製品 があるのですが、その TKG のコミュニティ版(無償利用可)として、TCE が最近発表 されました。

TKG と TCE の主な違いは、Redhat Enterprise Linux (=TKG) と Fedora (=TCE) の関係に似ています。つまり、どんどん TCE で新しい試みが行われ、TKG に安定版としてフィードバックされる予定です。また、TKG のみが VMware からサポートを受けられる形となります。

(ただし今のところ、フォークされたばかりなので、主要な機能は全て使えちゃいます!つまり、使うなら今がチャンス!w)

質問3. どうやったらTCEが使えるの?

答え: 基本的には、Getting Started の指示に沿って進めるだけで、割と簡単に導入出来ちゃいます。

  • 最低限、TCE を操作するためのクライアントマシンが必要 : Windows/Mac/LinuxいずれもOK。
  • Kubernetesを入れるためのインフラも必要 : 現バージョンでは、vSphere/AWS/Azure に加え、クライアントの Docker に直接インストールする方法もサポートされており、かなり幅が広いです。

質問4. TCEのことをもっと知りたい!

答え: そんなあなたに朗報です!つい先日、TUNA-JP のオープニングイベントを開催した際の録画を公開いたします。そこで、TCE に関する説明とデモ(21分40秒〜)を行いましたので、参考になるかと思います。

TUNA-JP では、上記のようなイベントや、他にも様々なイベントを定期的に企画したいと思いますので、良ければみんなでワイワイやりましょう!
(参加方法: https://tuna-jp.tech から、Slack に Join して下さい!)

TCE の OSS 周りの機能を少し紹介!

さてお待たせしました、本題です。
TCE(TKG) は、AKS/EKS/GKE といった各クラウドのマネージド K8s に比べ、最後発ということもあり、あまり知られていないと思うのですが、実は OSS との統合周りがかなり凄いんです!本日は、そんな TCE の特徴を少しだけ紹介させていただきます。

※ 以下、「TCEは〜」 という主語になっているところは、TKG でも同等の機能を有しております

Tanzu の Kubernetes クラスタには、最低限必要な OSS が予め組み込まれている!

まずは、導入した Tanzu Kubernetes Cluster (以下、TKC) に、以下のコマンドを叩いてみましょう。

# 現在クラスタにインストールされている OSS パッケージの一覧を表示
% tanzu package installed list -A
/ Retrieving installed packages...
  NAME            PACKAGE-NAME                     PACKAGE-VERSION  STATUS               NAMESPACE
  antrea          antrea.tanzu.vmware.com                           Reconcile succeeded  tkg-system
  metrics-server  metrics-server.tanzu.vmware.com                   Reconcile succeeded  tkg-system

# 利用可能な OSS パッケージの一覧を表示
% tanzu package available list -A
(以下省略)

※ 上記コマンドの対象となる Kubernetes クラスタは、現在のコンテキストが対象。よって、別クラスタを確認したい場合、kubectl config use-context (コンテキスト名) で切り替えることで、確認可能。

なお上記の結果は、Docker環境で作ったTKCのため、本当に最小限しか入っていません。それでも最初から Antrea という CNI と metrics-server (kubectl top が使える) が入ってくるのが、通常の Kubernetes にはない、便利ポイントです。
以下は、Core パッケージと呼ばれる、導入時に Kubernetes に統合されるパッケージの一覧です。

OSS パッケージ名 説明
tanzu-addons-manager Managementクラスタにインストールされ、各 TKC インストール時に必要なアドオンを管理
ako-operator NSX Advanced Load Balancer (以下、ALB)を利用する設定を行った場合、こちらがインストールされて連携される
antrea CNI (TKC デフォルト)。VMware が中心となって開発し、Open vSwitch のKubernetes実装を実現。
calico CNI。世界で最も実績のある CNI の一つ。TKCインストール時にこちらを選択することも可能。
kapp-controller K8s内で"app"という単位で複数のリソース状態をまとめて管理してくれる便利ツール。kubectl get app で参照可能。(最初から入っているように見えるので、tanzu package installed に何故か入ってないのが謎。誰か教えて・・・)
load-balancer-and-ingress-service ALBのコンポーネント。vSphere環境にL4+L7ロードバランシング提供。
metrics-server kubectl top で Pod のCPU/Mem 利用状況を把握可能に!地味に便利。
pinniped 導入時に設定を行うと、K8sで認証機能が利用可能になる。OIDCとLDAPに対応。
vsphere-cpi vSphereインフラと統合するためのCloud Provider Interface
vsphere-csi vSphereのストレージと統合するためのCloud Storage Interface

TCEは、使える OSS パッケージをどんどん増やせちゃう!

実は Core パッケージだけじゃありません。必要に応じて、TCE が独自に用意したパッケージ郡を追加することができちゃうんです。

# 現在利用可能なリポジトリの一覧を表示
% tanzu package repository list -A
/ Retrieving repositories...
  NAME        REPOSITORY                                                                  STATUS               DETAILS  NAMESPACE
  tanzu-core  projects.registry.vmware.com/tkg/packages/core/repo:v1.21.2_vmware.1-tkg.1  Reconcile succeeded           tkg-system

# Tanzu Community Edition package repository を追加
% tanzu package repository add tce-repo --url projects.registry.vmware.com/tce/main:0.9.1
/ Adding package repository 'tce-repo'...
 Added package repository 'tce-repo'

# 上記のリポジトリが追加されているのが分かる
% tanzu package repository list -A
/ Retrieving repositories...
  NAME        REPOSITORY                                                                  STATUS               DETAILS  NAMESPACE
  tce-repo    projects.registry.vmware.com/tce/main:0.9.1                                 Reconciling                   default
  tanzu-core  projects.registry.vmware.com/tkg/packages/core/repo:v1.21.2_vmware.1-tkg.1  Reconcile succeeded           tkg-system

※ 最後のコマンド実行時の、Reconciling という表示は、パッケージがインストール中である状態を示します。数分待つと、Reconcile succeeded に変わり、パッケージが利用可能な状態に変わります。

これで準備が完了です。新たなレポジトリが追加されたため、tanzu package available listを叩くと、インストール可能なパッケージが増えていることが分かるはずです。以下は、TCEが用意したパッケージの一覧です。

OSS パッケージ名 Advent Calendar 説明
cert-manager 9 日目 @hondy444 様々な発行元からの TLS 証明書の管理と発行を、自動化するためのKubernetesアドオン
Contour 2 日目 @hichtakk EnvoyベースのIngressコントローラ。通常のIngressの他に、より高度なルーティングを実現するHTTPProxyリソースが利用可能。
external-dns 7 日目 @vkbaba DNSサーバと連携して、K8s の Service/Ingress リソースにDNSレコードを動的に提供できる
fluent-bit 8 日目 @yama-s K8s のログやメトリクスを収集し、K8s 外部のサービスに配信
gatekeeper 12 日目 @hirosat OPA (Open Policy Agent) の K8s CRD 実装。ポリシー制御に用いる
grafana -- メトリクスを可視化し、ダッシュボードを提供。Prometheus とセットで用いられることが多い。
Harbor カレンダー2 10日目 @making プライベート用コンテナレジストリ
knative-serving 5 日目 @ipppppei K8s を用いたサーバーレス・コンテナのデプロイを提供
local-path-storage -- ローカルストレージ(hostPath)を利用して、Persistent Volume 機能を提供
multus-cni 16 日目 @tarowork64 CNI。K8s Pod に複数のネットワーク・インターフェースを提供
prometheus -- K8s で利用可能なモニタリングツールとして、最も有名
velero -- K8s リソースのバックアップツール

※ 上記の Advent Calendar 列は、12/12 時点にエントリしてくれた人の情報を反映しています。後日、該当する記事が増え、更新が可能であれば、アップデートしておきます。

個人的な感想としては、K8s を運用していく上で便利なツールが良く選定されていて、いいラインナップなんじゃないかなと、思います。
さらにこの機能が意味するところは、お作法に沿ったレポジトリを用意して、お作法に沿ったパッケージをそこに置けば、あなたのパッケージを追加することができちゃいます!上級者な方は、是非独自パッケージの公開にチャレンジしてみては如何でしょうか?!

TCE なら、OSS の追加も、コマンド一発でお手軽導入!

さて、導入可能なパッケージが増えたところで、実際に Contour のインストール例を見てみましょう。

# 事前準備として、設定ファイルを用意。(設定ファイル自体は任意だが、今回のDocker環境では、ClusterIPの指定が必須)
cat <<EOF >contour-values.yaml
envoy:
  service:
    type: ClusterIP
EOF

# 利用可能なパッケージ一覧を表示して、パッケージ名を探す
% tanzu package available list
/ Retrieving available packages...
  NAME                                           DISPLAY-NAME        SHORT-DESCRIPTION
  cert-manager.community.tanzu.vmware.com        cert-manager        Certificate management
  contour.community.tanzu.vmware.com             Contour             An ingress controller
(以下、省略)

# 次に、そのパッケージ名を指定すると、利用可能なバージョンの情報が出てくる。
% tanzu package available list contour.community.tanzu.vmware.com
/ Retrieving package versions for contour.community.tanzu.vmware.com...
  NAME                                VERSION  RELEASED-AT
  contour.community.tanzu.vmware.com  1.17.1   2021-07-23T18:00:00Z
  contour.community.tanzu.vmware.com  1.17.2   2021-07-23T18:00:00Z
  contour.community.tanzu.vmware.com  1.18.1   2021-07-23T18:00:00Z

# 上記の情報を用いてインストール。("my-contour" の箇所は、任意の名前で良い)
% tanzu package install my-contour --package-name contour.community.tanzu.vmware.com --version 1.18.1 --values-file contour-values.yaml
/ Installing package 'contour.community.tanzu.vmware.com'
| Getting namespace 'default'
| Getting package metadata for 'contour.community.tanzu.vmware.com'
| Creating service account 'my-contour-default-sa'
| Creating cluster admin role 'my-contour-default-cluster-role'
| Creating cluster role binding 'my-contour-default-cluster-rolebinding'
| Creating secret 'my-contour-default-values'
/ Creating package resource
| Package install status: Reconciling

 Added installed package 'my-contour' in namespace 'default'

# 対象のクラスタに、Contourがインストールされたことを確認
% tanzu package installed list
- Retrieving installed packages...
  NAME        PACKAGE-NAME                        PACKAGE-VERSION  STATUS
  my-contour  contour.community.tanzu.vmware.com  1.18.1           Reconcile succeeded

このように、簡単にインストールが出来てしまいます!
似たような仕組みとして、helm も上記のような流れでインストールできますが、helm はクライアント側に情報がキャッシュされるため、複数のクライアントで情報を共有するのが難しかったりします。
これに対し、 tanzu package は、自身のクラスタ内のリソースとして、インストールされている情報を管理 します。これは、どのクラスタに何がインストールされているかについて、非常に直感的に扱えることが、大きなメリットとなります。

まとめ

今まで Kubernetes や OSS を躊躇していた人にとって、TCE はきっと敷居を下げるものとなってくれるはずです。また、OSS を今までバリバリやってきた人にとっても、TCE は有力なKubernetesプラットフォームの一つとなることでしょう。

そんな訳で、TCE を使って、みんなで Kubernetes と OSS の世界を楽しみましょう!

9
2
0

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
9
2