【2020年版】k8s周りでよく使われるOSS・サービスを一言でまとめてみた

## 皆さん！ いいクラウドネイティブライフを送ってますか？


仕事柄k8sの**OSS**を色々調査必要があり調べてみましたが、1ページでざっとリスト化された記事はなかったので自分用のメモもかねてまとめ見ました。
"**よく使われる**"の定義は[k8sのバイブル](https://www.amazon.co.jp/Kubernetes%E5%AE%8C%E5%85%A8%E3%82%AC%E3%82%A4%E3%83%89-%E7%AC%AC2%E7%89%88-Top-Gear-%E9%9D%92%E5%B1%B1/dp/4295009792/ref=pd_lpo_14_t_0/355-7843316-6868106?_encoding=UTF8&pd_rd_i=4295009792&pd_rd_r=9cfe9288-a4e9-4501-b8e5-f7ae3ea75247&pd_rd_w=CjP5e&pd_rd_wg=LL3er&pf_rd_p=4b55d259-ebf0-4306-905a-7762d1b93740&pf_rd_r=MZGQHN3HCT3NP35B11KA&psc=1&refRID=MZGQHN3HCT3NP35B11KA)とCNCFのプロジェクト~~と独断と偏見~~で載せてるので、「これもあるよ！」って方いたら是非コメントください！

各OSSの詳細な説明は公式ドキュメントやそれを説明している記事にお任せして、ここでは見やすさを重視してカテゴリごとに１行のみの説明でリスティングしたいと思います。[^1]
k8s強強マンからの修正リクエスト・ご指摘歓迎します！

## クラスタ構築
### k8sディストリビューション
- [k8s](https://kubernetes.io/): 我らがkubernetes、これもちゃんとOSSです
- [k3s](https://k3s.io/): 軽量クラスタ、Armアーキテクチャもサポート、クラウド-エッジ環境ではRancherでマネージするユースケースが紹介されている
- [k0s](https://k0sproject.io/): シングルバイナリk8s, 5つゼロが売り
- [microk8s](https://microk8s.io/): 軽量k8s, IoT用途よりも実験開発むけ

### IoT・エッジコンピューティング
- [KubeEdge](https://kubeedge.io/en/): 軽量なk8sディストリビーション、エッジ向けに特化したアーキテクチャ

### サービスメッシュ
- [Istio](https://istio.io/): サービスメッシュの**本命**, カナリアリリース, サーキットブレイカ等が簡単に実現できる
- [linkerd](https://linkerd.io/): サービスメッシュ2, **Per-node**というノードごとの切り分けが可能
- [Envoy](https://www.envoyproxy.io/): Sidecarとしてpodに常駐させるプロキシ, 上記のOSSで使われる

### APIゲートウェイ
- [Ambassador](https://www.getambassador.io/): マイクロサービス用なので[kong](https://konghq.com/)等と比べてクラウドネイティブな機能が一杯!

### リバースプロキシ
- [Traefik](https://doc.traefik.io/traefik/v1.7/user-guide/kubernetes/): ラベルに応じてルーティングをよしなにやってくれる優れもの

### マニュフェスト管理
- [Helm](https://helm.sh/): k8s用構成管理・パッケージ配布ツール、テンプレに穴埋めで記述するタイプ
- [Monocular](https://github.com/helm/monocular): Helm Hub上にあるChartを探せるWeb UIツール
- [kustomize](https://kustomize.io/): kubectlに統合されたマニュフェスト管理・作成ツールで上書きで記述するタイプ
- [ksonnet](https://github.com/ksonnet/ksonnet): jsonetを使って記述するタイプ、開発中止なった~~私の周りではこれを使ってる人はあまり聞かない~~

### 認証認可
- [cert-manager](https://github.com/jetstack/cert-manager): TLS証明書の管理と発行を自動化するKubernetesアドオン

### コンテナラン周り(ランタイムからユーザーツール)
- [Docker](https://www.docker.com/): コンテナの代名詞？、k8sでは非推奨になりつつあるコンテナ実行エンジン
- [containerd](https://containerd.io/): docker1.11+で使われている高レベルコンテナランタイム
- [CRI-O](https://cri-o.io/): 次の本命コンテナランタイム？, APIの豊富さはcontainerdに負けるが軽量
- [rkt](https://coreos.com/rkt/docs/latest/): デーモンではなくSystemdから動かすコンテナランタイム

### FaaS
- [knative](https://knative.dev/): k8s上でAWS LambdaみたいなFaaSを構築できる優れもの

### 開発支援ツール
- [Telepresence](https://www.telepresence.io/): デプロイ済みのpodをローカルのコンテナに切り替えて開発できるツール

### CNI
- [flannel](https://github.com/coreos/flannel): マルチノード間の通信を繋ぐオーバーレイネットワークを構築可能
- [他のネットワーキング実装](https://kubernetes.io/docs/concepts/cluster-administration/networking): 多すぎるのでまとめ切れない😅, 編集リクエストオネシャス

## クラスタ運用
### ログ集計
- [fluentd](https://www.fluentd.org/): 言わずと知れたログ集計ミドルウェア、k8s関係なく使われている, ライバルにLogstashがある

### 可視化
- [Grafana](https://grafana.com/): リッチなOSS, デフォルトダッシュボードに満足行かなくなったらコレを使おう
- [cAdvisor](https://github.com/google/cadvisor): dockerにも対応している監視ツールで導入が楽
- [Heapster](https://github.com/kubernetes-retired/heapster): k8s公式に組み込まれているコンポーネント、デフォルトのダッシュボードはこいつのおかげです
- [kiali](https://kiali.io/): istioのためのサービスメッシュの可視化ツール

### 調査・分析ツール
- [Prometheus](https://prometheus.io/):監視OSS、必要な機能は揃えている、リッチな可視化にするためGrafanaと組み合わせることが多い 
- [datadog](https://www.datadoghq.com/ja/): お金持ちのための監視ツール、高機能で柔軟に設定できるGUIが魅力
- [Jaeger](https://www.jaegertracing.io/): トレーシングツール、複雑なコンポーネント間の動きを分析できる

### 運用自動化
- [OPERATOR FRAMEWORK](https://operatorframework.io/): Operator開発支援OSS, OperatorHubなる配布サービスがある
- [Kopf](https://github.com/zalando-incubator/kopf): pythonで記述可能なOperator開発支援OSS

## その他
### コンテナビルドツール
- [BuildKit](https://github.com/moby/buildkit): 公式で組み込まれている、知らない人はそのまま`docker build`してる
- [Kaniko](https://github.com/GoogleContainerTools/kaniko): DonDでも並列ビルドできる優れもの、BuildKitが動かないCI/CD環境で活躍

### シークレット管理
- [Kubesec](https://github.com/shyiko/kubesec): KMS等のパブリッククラウドの暗号化を用いて管理する
- [Sealed Secrets](https://github.com/bitnami-labs/sealed-secrets): Secretを変換した独自のリソースを作成してGitリポジトリを利用して管理する
- [External Secrets](https://github.com/external-secrets/kubernetes-external-secrets): 独自のSecretリソースをAWS等のパブリッククラウドで管理
- [Berglas](https://github.com/GoogleCloudPlatform/berglas): Google Secret Managerで管理するツール権限管理に一長あり

### 開発効率化
- [kubectx](https://github.com/ahmetb/kubectx): コンテキストの確認・切り替えがめっちゃ楽になる
- [kubens](https://github.com/ahmetb/kubectx/blob/master/kubens): ネームスペースの確認・切り替えがめっちゃry
- [krew](https://github.com/kubernetes-sigs/krew): k8s用ツールをインストールするためのbrew的なsomething
- [stern](https://github.com/wercker/stern): キーワードでpodを跨いだログを集計できる賢いやつ

### セキュリティ
- [Clair](https://github.com/quay/clair): コンテナの脆弱性をチェックしてくれるOSS
- [falco](https://github.com/falcosecurity/falco): コンテナの脅威検出OSS
- [spiffe](https://github.com/spiffeio/): ユニバーサルなサービス間認証の仕様

### ローカルk8sクラスタマネジメントサービス
- [kubeadm](https://kubernetes.io/docs/reference/setup-tools/kubeadm/): kubernetes公式が用意してる構築ツール 
- [minikube](https://minikube.sigs.k8s.io/docs/start/): シングルノード限定だが**kubeadm**に比べて簡単に使える 
- [kind](https://kind.sigs.k8s.io/): マルチノード対応の構築ツール, 簡単かつ機能も充実

### クラウドマネジメントサービス
- GKE: GCP担当、類似サービスに比べサービスでマネージドしてくれる部分が多い
- EKS: AWS担当、IAMとRBACを関連づけられる他Fargateを利用したコスパの良い利用もできる
- AKS: Azure担当、よくわからない
- ACK: Alibaba担当、さらによくわからないし使ってる人いるのか？

### CI/CD
- [kubeval](https://github.com/instrumenta/kubeval): マニュフェストファイルがAPIバージョンに準拠しているか検証できるOSS
- [Conftest](https://github.com/open-policy-agent/conftest): Rego言語でマニュフェストファイルのユニットテストを行うツール
- [Open Policy Agent](https://www.openpolicyagent.org/): CICDを経由せずポリシーを検証できるツール
- [ArgoCD](https://argoproj.github.io/argo-cd/): k8sでGitOpsを実現するためのOSS
- [Flux|GitOps toolkit](https://toolkit.fluxcd.io/): argoCDと類似OSS, 二つは**GitOps Engine**に統合される予定
- [Tekton](https://cloud.google.com/tekton): CICDパイプラインを構築するためのツール
- [Spinnaker](https://spinnaker.io/): CDに特化したOSS, **Cluster**, **Server Group**, **Application**という独自概念でクラスタを抽象化する
- [Skaffold](https://skaffold.dev/): コンテナイメージの変更を検知して自動でビルド・レジストリに登録してくれる君

### MLOps
- [kubeflow](https://www.kubeflow.org/): MLOpsツールの集合体、ノートブック・モデルサービング、ハイパラの並列探索や実験管理等MLで必要な機能を揃えたフルスタックツール
- [seldon core](https://github.com/SeldonIO/seldon-core): k8s上で機械学習モデルをサービングするためのOSS, kubeflowとの合わせ技も可能
- [mlflow](https://mlflow.org/): kubeflowより機能は少ないが導入が楽、k8sでもシングルノードサーバでも動く、作者のお気に入りOSS
- [Argo Workflows](https://argoproj.github.io/argo/): 

### クラスタオーケストレーションツール
- [Rancher](https://rancher.com/): 複数のk8sクラスタを簡単に管理・構築できる
- [Tanzu Kubernetes Grid](https://www.google.com/search?q=vmware+tanzu&oq=vmware+tan&aqs=chrome.0.0i457j0j69i57j0i20i263j0l3j69i60.2560j0j7&sourceid=chrome&ie=UTF-8): vSphereとクラウドのハイブリッド構成が作成できる有償オーケストレーター
- [HPE Container Platform](https://www.hpe.com/jp/ja/solutions/container-platform.html): 非クラウドネイティブなモノリシックなシステムと統合可能の有償オーケストレーター
- [Lens](https://k8slens.dev/): k8s用IDEと言われている、マルチクラスタ管理やPrometeus利用した監視が可能

## おまけ
### おすすめチュートリアル
- [公式チュートリアル](https://kubernetes.io/docs/tutorials/): katakodaというSaaS環境でやるため自前で用意しなくて良い
- [SockShop](https://github.com/microservices-demo/microservices-demo): k8sで構築された架空の靴下ショップのソースコード, これを弄って覚えるのもあり
- [kubernetes-the-hard-way](https://github.com/kelseyhightower/kubernetes-the-hard-way): k8sクラスタをマネージドサービスを使わず構築するM向けチュートリアル
- [GKEチュートリアル](https://cloud.google.com/kubernetes-engine/docs/tutorials): Guestbookという掲示板を作ったりできるハンズオン、個人的に一番わかりやすい
- [EKSチュートリアル](https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/what-is-eks.html): Fargateを利用したクラスタ、ALBを使ったサービスの公開方法等AWSのサービスを使った方法を教えてくれるが、若干日本語が直訳ぽい

## 参考
- [Kubernetes完全ガイド 第2版](https://www.amazon.co.jp/Kubernetes%E5%AE%8C%E5%85%A8%E3%82%AC%E3%82%A4%E3%83%89-%E7%AC%AC2%E7%89%88-Top-Gear-%E9%9D%92%E5%B1%B1/dp/4295009792/ref=pd_lpo_14_t_0/355-7843316-6868106?_encoding=UTF8&pd_rd_i=4295009792&pd_rd_r=9cfe9288-a4e9-4501-b8e5-f7ae3ea75247&pd_rd_w=CjP5e&pd_rd_wg=LL3er&pf_rd_p=4b55d259-ebf0-4306-905a-7762d1b93740&pf_rd_r=MZGQHN3HCT3NP35B11KA&psc=1&refRID=MZGQHN3HCT3NP35B11KA)
- [Kubernetes実践ガイド クラウドネイティブアプリケーションを支える技術](https://www.amazon.co.jp/dp/4295006637/ref=sspa_dk_detail_3?psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUEyU01QWU45T0dOT1JMJmVuY3J5cHRlZElkPUEwODM4OTcxMldEVlhWN09YRVkwRiZlbmNyeXB0ZWRBZElkPUEzNTZBUlJORFRLN1ZHJndpZGdldE5hbWU9c3BfZGV0YWlsJmFjdGlvbj1jbGlja1JlZGlyZWN0JmRvTm90TG9nQ2xpY2s9dHJ1ZQ==)
- [CNCF Graduated and incubating projects](https://www.cncf.io/projects/)

- [リーガルテックの機械学習基盤を支えるクラウドネイティブ技術の実践](https://speakerdeck.com/rupyjp/cndt2020-rigarutetukufalseji-jie-xue-xi-ji-pan-wozhi-erukuraudoneiteibuji-shu-falseshi-jian)
- [悩みに悩んだ Kubernetes Secrets の管理方法、External Secrets を選んだ理由 | PLAID engineer blog](https://tech.plaid.co.jp/nayanda-kubernetes-secret-management/)
[^1]: カテゴリは主観たっぷりなのでMECEになってないかもしれないです。