Kubernetesの開発はGitHub Issuesでかなりオープンに行われている認識です。Issueを見ておけば、利用者や開発者が何を課題に感じていて、今後Kubernetesがそれにどう対応していくのか動向がわかります。
しかし、k8sはIssueとPRが多い1ので、全部はとても見られません。ので、個人的に気になるものを見つけたら、それを継続的にウォッチしながら、リンク先等から芋づる式的に新しいIssueを探す、という方法で追ってます。
想定読者
- k8sをウォッチしたい
- k8sを本気で本番投入したい
- WebアプリでSwarm投入とか運用やばいですよね?
- Swarmは個人的にはbuilding blockだけど、k8sはトータルソリューション。運用もかなり助けてくれる印象
- やばくないよ、って情報があったら教えて下さい
- WebアプリでSwarm投入とか運用やばいですよね?
- Issue・PRの動向を知りたい
- でもとても全部見られない
- 筆者と好みが似ている人
Kubernetes + ELB連携の強化
2016/04/29 AWS: Proposed set of annotations for ELB "advanced features" · Issue #24978 · kubernetes/kubernetes
KubernetesでType=LoadBalancerなServiceをつくると、ELBのロードバランサを作ってくれる機能がありますが、あれにELBのProxyProtocol対応、SSL証明書組み込み、Route53のレコード作成などのオプション機能を追加する提案。これが実現したら、例えば社内用のKubernetesクラスタとRoute 53のHosted Zone、ワイルドカード証明書さえ用意しておけば、k8s利用するだけで開発者が本番環境と近いテスト環境でさくさくと開発・テストを進められる、という状態に近づけそう(k8sは利用できなきゃいけないので、その分の学習コストはかかっちゃうけど)
Distributed CRON→v1.3?→v1.4
例えばMesosのChronosに相当するようなものを追加してほしい、というIssue。
2014/11/05 Distributed CRON jobs in k8s · Issue #2156 · kubernetes/kubernetes
一番最初のIssue。
2015/07/29 ScheduledJob controller proposal by soltysh · Pull Request #11980 · kubernetes/kubernetes
上記の仕様提案。
2016/06末リリース予定のk8s v1.3に入る予定らしい。
2016/04/29 Scheduledjob api by soltysh · Pull Request #24970 · kubernetes/kubernetes
関連APIの仕様(Swagger Spec)など。実装は含まれてない。
2016/07/04追記: 1.3に間に合わなかったので、1.4で入る予定になった
https://github.com/kubernetes/kubernetes/issues/2156#issuecomment-223385808
2016/10/12追記: 1.4で導入されました
ローカルk8sをもっと気軽に立ち上げられる公式minikube
2016/04/12 Proposal for improving local cluster experience. by vishh · Pull Request #24106 · kubernetes/kubernetes
redspread/localkubeベースで、Docker Machineのようにワンコマンドでもっと気軽にk8sをローカル環境に立ち上げられる用にしよう、という提案。Vagrant上にワンコマンドで立ち上げられる、みたいなUXだとやっぱり難しいので、ワンコマンドにすることに価値があるらしい。実際、巷に溢れている「k8sをDockerやVagrantでサクッと立ち上げられるよ」と謳ったツールを色々試して、今のところlocalkubeが一番よくできてると思ったので、良い方向性だと思う。
GitHubレポジトリもあった。
https://github.com/kubernetes/minikube
2016/10/12追記: ローカルk8sの定番になっています。その他面白いところでは、rkt対応あり。CoreOS化もIssue化されていました。
自動再スケジューリング(Controlled Rescheduling)
うまい訳が思いつかないけど、ニュアンスとしては自動再スケジューリング。
2016/03/01 [WIP/RFC] Rescheduling in Kubernetes design proposal by davidopp · Pull Request #22217 · kubernetes/kubernetes
k8s 1.2の時点では、Podが再スケジューリングされるのは、ユーザが明示的にPodを削除したり、意図せず(エラー等で)Podが落ちたとき。現状でも、k8sはspecと現在のクラスタの状態に基づいて、Podを最適な配置になるようにスケジューリングする。しかし、状況は移り変わるので、最初のスケジューリングがどれだけ正しくても、しばらく時間が立つと最適じゃない配置になってしまっていることがある。そこで、その時々の状況に応じて、Podを再配置しよう、という提案。これが実現したら、リソースの状況に応じてユーザがkubectl drain
を実行・・・みたいなことをしなくても、リソースを最適に使えるようになる?
ノードメンテナンス
Kubernetesを導入したあと、バージョンアップのたびにあたふたしたくないですよね!
サービス無停止でクラスタのアップグレード含めたメンテナンスを行いたいところ。
1.2で登場したkubectl drain
のきっかけにもなっています。
2015/11/18 Add proposal for node maintenance. by mml · Pull Request #17393 · kubernetes/kubernetes
PetSet(Nominal Service)
etcdやCassandraやAkka Cluster製アプリのように、一般的なステートレスなk8sサービスがそうであるようにロードバランサは必ずしも必要ないけど、peer同士を発見してクラスタを組むことで機能するサービスをk8sで運用しやすくするために、新しいServiceを追加しよう、という話です。
PetSet (was nominal services) · Issue #260 · kubernetes/kubernetes
2016/05/09時点では、まだ提案のみですが、6月リリース予定の1.3に含まれる見込みのようです。
Support Kafka in PetSet · Issue #23794 · kubernetes/kubernetes
Kubernetes 1.3で採用するDockerのバージョン
今のところ、1.10か1.11らしい。
Determine docker version(s) for Kubernetes 1.3 release · Issue #25893 · kubernetes/kubernetes
Dockerは後方互換性保ってるし、大丈夫でしょ?と思ったら、Docker 1.11ではcAdvisorのAPIがDockerコンテナのラベルを返さなくなってしまう、みたいな既知の問題がいくつかあるみたい。
[docker v1.11.0-rc2] container info missing metadata · Issue #1185 · google/cadvisor
Kubernetes v1.2はDocker 1.9.1が推奨だけど、それでもCHANGELOGには色々と注意事項が書かれていた…。
Validate Docker 1.10 · Issue #19720 · kubernetes/kubernetes
なお、自分にとってはこの「cAdvisorのAPIがDockerコンテナのラベルを返さない」問題は、DatadogでKubernetes podのメトリクスにポッド名のラベルが付かない結果になってしまうので、結構困る。
Config MapをローリングアップデートでPodに反映する
Facilitate ConfigMap rollouts / management · Issue #22368 · kubernetes/kubernetes
いまはボリュームマウント以外の方法でPod等から読まれているConfigMapを変更すると、その値をPodに反映するためには以下の手順を踏む必要がある。
- 新しいConfigMapを作成する
- Deploymentを作成しなおし
- ローリングアップデート完了を待つ
- 古いConfigMapを削除する
これをワンコマンドで行えるようにしよう、というIssue。
1.3目標だったけど、着手している人がおらず延期された模様。
ボリュームマウントで利用する場合は、kubeletのsync loopでそのうち反映されるらしい
http://qiita.com/tkusumi/items/8e31fddda77f93ccfdd8#pod%E3%81%8B%E3%82%89configmap%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E4%BD%BF%E3%81%86
Kubeletの設定を実行時に行えるようにする
クラスタ起動時には最低限の設定でkubeletを起動して、その後はConfigMapを使って動的に設定を変更できるようにする、という内容のようです。
Dynamic Kubelet Settings · Issue #27980 · kubernetes/kubernetes
kubeletのTLS証明書等を自動生成
kubeletやapiserverの通信経路を暗号化するためにTLSが使われてますが、そのための証明書は現在事前につくって、kubelet等を起動するホストにデプロイしておく必要があります。この手順が面倒だったり、そのためにkube-awsのようなデプロイ自動化側にしわ寄せがいってしまっているので、Kubernetes側で対応しよう、というIssueです。
対応予定: v1.4
Kubelet TLS Bootstrap · Issue #43 · kubernetes/features
Idling/Unidling
アクセスが来るまでPodのレプリカ数を0にしておき(Idling)、アクセスが来たら1以上にする(Unidling)ことで、利用頻度に偏りがある・またはめったに利用されないサービスのPodに使うリソースを減らせるようにしよう、という提案。
Unidling proposal by pmorie · Pull Request #3247 · kubernetes/kubernetes
Proposal: Introduce Idling and Unidling by DirectXMan12 · Pull Request #29471 · kubernetes/kubernetes
Templates
Kubernetesオブジェクトをテンプレートをつかって記述できるようにすることで、PetSetのように似たようなPodを特定のパターンにしたがって複数生成する・・・というようなことを完結にかけるようにしよう、という話。
提案: Proposal
実装: Implement templates · Issue #23896 · kubernetes/kubernetes
基本的にはhelmでいいような気もするですけど、何が違うんだろう・・・。
Podにシグナルを送る
厳密には、「Podのいずれか、またはすべてのコンテナ」に任意のシグナルを送れるようにしたい、という話。
Feature request: A way to signal pods · Issue #24957 · kubernetes/kubernetes
kube-dnsのパフォーマンス改善
GCEのDNSサーバに直接問い合わせした場合と、kube-dnsを通して問い合わせした場合とを比べると、後者が5倍から10倍スループットが低い・・という件。
kubectl cp/kubectl rsyncでファイルをpodへコピーする、またはローカルボリュームをマウント
Add a kubectl cp ... command · Issue #13776 · kubernetes/kubernetes
Idea: kubectl export-local-volume · Issue #18007 · kubernetes/kubernetes
rsync files to a kubernetes pod - Server Fault
OpenShiftに同様なコマンドがあるようですが、それをk8sにも導入してはどうか、というIssue。
いまもrsyncがローカルとpodにそれぞれ存在すれば、hackyなコマンドで実現できますが、もっと気軽に利用できるところがポイント?
-
2016/05/02時点でIssueが3089個、PRが452個もある。
↩