こんにちわ!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 オープニングイベント ( Passcode: Ag=kPV58
) - TCEデモで利用したMiro
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 の世界を楽しみましょう!