冷やし中華の季節になりましたので、Kubernetesをはじめました。もとい、はじめてしまいました。
前回のECSシリーズに比べると、だいぶ世界が広いシステムであり、1つのシリーズとしてまとめるとか、全部終わってから書き始めるとか、どうにもできそうになかったので少しずつ進めることにします。今回は、雑感とリンク集のみで、助走というか覚悟を決める回という位置づけになりやす。
これまでの率直な感想
触り始める前の僕
Kubernetesの情報がやけに目につくけど、なんか煽り感が強くて気に食わん…… ていうかクラウド界の「Linux」ってなんやねん俺は騙されんぞ!なんかイケ好かないシステムくさいな!!数日間、情報収集した僕
このクラウド全盛期に、なんでいまさらクラウドの中にこんなプラットフォームを構築せなアカンねん、オンプレでやれ。納得いく構成と構築まで頑張った僕
なんだかんだで手足のように動かせられるようになったし、Kubernetesちゃんに情も湧いてきたけど…… 一般的に勧められる代物ではないな。先人たちの言ってる通りやんけ!思ったより安定した構築と破壊ができるのが救いかな。取り組む前に冷静に考える
イケ好かない理由を考える
マニフェスト
Kubernetesについて調べていると、とにかくマニフェスト(設定用のYAML)が大量に出現してきます。それ自体は手法が一貫していて良いのですが、問題はその設定をどう管理するかという疑問がついて回ります。YAMLを書いて、コマンドでそれを食わせ、それ以外にも便利なツールがあって……ってのはわかったけど、まさかそれを全部セコセコと手動管理しないよね?という風に思わせるのが嫌悪感の原因でした。
クラウド・リソースの扱い方
例えばALBを使いたければ関連リソースを Kubernetes 側に作成してもらうのがスタンダードだったり、スポットインスタンスの取り扱い方を探してもどれもそれじゃダメでしょってのしか見つからなかったり、私にとって気に食わない構成がいくつか目に付きました。これまでAWSを主軸にした基盤と経験があり、その良いところはある程度引き継いで構築したいという思いがあり、世間に散らばる構築手順を鵜呑みにするのは危ない、というのは一目瞭然でした。
「経験」と「覚悟」「両方」なくちゃぁならないのが云々
管理方法を決める
いままでたいしたシステム構築をしていないのに、いきなり Kubernetes っていう人はほぼいないと思います。なので、これまで何かしらの構成管理ツールやCIツールなどの自動化一式を蓄えているはずで、初手としてはそれを活用してKubernetesを管理できるのか、合わなそうなら新たに適切な管理方法を探す、ことに取り組んだほうがよさげです。構築するにせよ運用するにせよ、このシステムは何度も破壊と再生を繰り返す経験が重要になるので、自動管理の手法を確立してから取り掛かるのが、モチベーションの低下を防ぎつつ、成功への近道となるでしょう。
適切な構成を実現していく
Kubernetesは少々自由度の高いシステムなので、自分で適切な構成を思い浮かべて実現/解決に向かう力が求められます。事例を読み漁り、山盛りのドキュメントを読み込み、エラー/バグ報告を探し、試す……がダメッッ!!その繰り返しです。1つ1つ機能を構成していくにあたって何度も躓くのは確定事項なので、十分な時間の確保と覚悟が必要になります。とはいえ、私もいろいろなシステムを構築してきましたが、慣れさえすればシステムそのものの安定感は悪くないと実感しているので、取り組む価値は十分にあります。初見のロマサガ2よりは簡単なので大丈夫でしょう。
また、所詮、と言ったら怒られそうですが、所詮コンテナ・オーケストレーションシステムの1つです。これを導入すれば何がデキルということでもなく、自由度が高い中でどのような目的に向かって進むのか、または研究する中でどのような目的に相応しいのか見極めて提案していく、といった明確な指針を重視すべきですが、それはまぁどのシステムでも同じですね。
選択肢を用意する
コンテナを扱うシステムは他にもありますが、AWSが主軸の場合、最もベターな選択は ECS + EC2 でしょう。Fargateがもう少し安価になったり、CPUが新しくなれば Simple is best !! で ECS + Fargate を推したいところです。EKS で Kubernetes を使うにしても、技術的に Kubernetes でやりきれるのかどうか。そもそもサービスが Kubernetes に合うのかどうか。という分岐点が出てくると思いますので、Kubernetes を楽しみつつも、従来のインスタンス構成を改良したり、ECSでもコンテナ運用できるように、と構えておくのが無難、というかそれが当たり前。くらいの位置づけだと思いますK8s。
今後の動向
構築の主軸
結構大変でしたが、AWS EKS + Terraform で自分なりに正着の1つと思える構成ができたので、ECSの時のように少しずつ分けて構築手順をまとめていくのと、運用に必要な調査結果や知識を出していければ、と思います。Kubernetesの記事といっても、普通にAWSの知識を多く必要としますし、Terraformも黒魔術に近いことしますし、いろいろ入り乱れた進行になりそうですが、か、覚悟を決めて頑張るぞぃっ☆
本当にKubernetesでいいの?
ITインフラ全体からみると、Kubernetesはまだ極少数かもしれませんが、コンテナ業界としては色々選択肢がある中でも1つ2つ飛び抜けた存在であることは間違いなさそうです。それが多くの人にとって有用であるかはまた別として。過去、CVS や Subversion が Git に取って代わった(よね?)ように、2年後に Kubernetes が当然のようにITインフラとして台頭している可能性はゼロではありません。現段階では、新しもの好きエンジニアの趣味枠であり、適切に構築できれば便利なコンテナ・プラットフォームであり、将来的な技術力への先行投資、という位置づけになると考えています。
そういう意味では、Kubernetesを本気で運用にまで持っていく気がないのであれば、そこそこの試験程度に抑えつつ、Kubernetes業界と主要クラウド・プラットフォームの動向に気を配っておく程度がベター……ですが、たまには海の物とも山の物ともつかぬシステムにダイブするのも、エンジニアの健康には必要なものです;‑)
リンク集
私が参考にさせてもらったページのリンク集です。まだ道半ばなので今後、追加されていく可能性があります。
EKS
- 全般
- Amazon EKS とは – Amazon EKS
- Amazon Elastic Container Service for Kubernetes (EKS)の所感 – Qiita
- Amazon EKS東京リージョン着弾に寄せて雑な所感を ・ tehepero note(・ω<) 2.0
- 構成・構築(公式)
- AWS EKS Introduction | Terraform – HashiCorp Learn
- Using Spot Instances with EKS :: Amazon EKS Workshop
- Autoscaling our Applications and Clusters :: Amazon EKS Workshop
- Run your Kubernetes Workloads on Amazon EC2 Spot Instances with Amazon EKS | AWS Compute Blog
- ec2-spot-labs/amazon-eks-nodegroup-with-spot.yaml at master ・ awslabs/ec2-spot-labs ・ GitHub
- 構成・構築(一般)
- Why and how do we run Kubernetes on the Spot instances
- Blue/Green Worker Node Deployment – Kubernetes, EKS and Terraform – Lumo
- Building a Kubernetes Cluster on AWS EKS using Terraform – esentri AG
- Amazon EKSとECSの最新事例を聞いてきた( JAWS-UG コンテナ支部 #14 #jawsug_ct )
- AWS EKSのproduction運用を見据えたベストプラクティス:ロギング、セキュリティグループ、IAMの設定 – GA technologies Tech Blog
- Horizontal Pod Autoscaling と Cluster Autoscaler を EKSに設定してみた | DevelopersIO
- EKS利用時に注意すべきポイント – Qiita
- kubernetes – DNS problem on AWS EKS when running in private subnets – Stack Overflow
- EKSでkubectl topやHorizontal Pod Autoscaler (HPA) が使えなかった理由 ※今は使えます – Qiita
- Terraform
- Setting up AWS EKS cluster entirely with Terraform ? AV ? Medium
- GitHub – terraform-aws-modules/terraform-aws-eks: A Terraform module to create an Elastic Kubernetes (EKS) cluster and associated worker instances on AWS.
- Terraformを使ってEKSを作成してみた | DevelopersIO
- Terraformを使ってEKSを構築する – APC 技術ブログ
- Amazon Elastic Container Service for Kubernetes (EKS) を Terraform で素振り – ngyukiの日記
- AWS ALB Ingress Controller
- Configuration – AWS ALB Ingress Controller
- AWS ALB Ingress Controllerを使ってEKSからALBを作成してみた | DevelopersIO
- NGINX Ingressで複数ドメインを1つのALBに集約する – GeekFactory
- AWS ALB Ingress Controller for Kubernetes
- Kubernetes on AWS: LoadBalancer型 Service との決別 ? ゆびてく
- 全般
- Kubernetesは銀の弾丸ではない――エンジニアが生き残るために必要な技術とは【デブサミ2018 関西】 (1/2):CodeZine(コードジン)
- 多分あなたにKubernetesは必要ない | Yakst
- 今さら人に聞けない Kubernetes とは?
- GKE vs AKS vs EKS ? gavin.zhou ? Medium
- Kubernetes ネットワーキングのすべて
- GKE の概要 ?|? Kubernetes Engine のドキュメント ?|? Google Cloud
- 今こそ始めよう! Kubernetes入門 記事一覧 | Think IT(シンクイット)
- Kubernetes in Actionの個人的なまとめ – 世界中の羊をかき集めて
- Kubernetes Icons Set & Kubernetes ressources map – Qiita
- 構成・構築
- Kubernetes によるコンテナのオーケストレーション – Red Hat Customer Portal
- コンテナーの使用ガイド – Red Hat Customer Portal
- GitHub – jamiehannaford/what-happens-when-k8s: .. What happens when I type kubectl run?
- Kubernetesアンチパターン
- Kubernetes Replication Controller, Replica Set and Deployments: Understanding replication options | Mirantis
- Kubernetes: Deployment の仕組み – Qiita
- Terraformで構築したEKSにHelmでHPA、CA、ALB Ingressまで導入 – Qiita
- Kubernetes Configuration & Best Practices
- Kubernetesの apiVersion に何を書けばいいか – Qiita
- kubernetesのapiVersionとkindの対応表 – Qiita
- Configuration Best Practices – Kubernetes
- kubelet – Kubernetes
- Define a Command and Arguments for a Container – Kubernetes
- Resource
- KubernetesのResource RequestsとResource Limitsについて – Qiita
- Kubernetesで実際のメモリを超えるコンテナアプリを動かすと、どうなるか? – あさのひとりごと
- How to Set Constraints on Kubernetes Resources – Alibaba Cloud Community
- Assign Memory Resources to Containers and Pods – Kubernetes
- Scaling
- Kubernetes Autoscaling 101: Cluster Autoscaler, Horizontal Pod Autoscaler, and Vertical Pod…
- Horizontal Pod Autoscaler – Kubernetes
- community/horizontal-pod-autoscaler.md at master ・ kubernetes/community ・ GitHub
- Horizontal Pod Autoscaler | Running Services on Kubernetes
- KubernetesのPodとNodeのAuto Scalingについて – Qiita
- Autoscaling TIBCO on Kubernetes: How to easily autoscale a TIBCO BusinessWorks Container Edition (BWCE) application Docker Image on Kubernetes (Minikube)? – Rubix
- Horizontal Pod Autoscaler(HPA) on AWS EKS/Kubernetes
- HPA not able to find CPU, looking at unrelated pod ・ Issue #63615 ・ kubernetes/kubernetes
- Configuring vertical pod autoscaling ?|? Kubernetes Engine Documentation ?|? Google Cloud
- Understanding Kubernetes Cluster Autoscaling ? kubecost ? Medium
- Auth
- Service
- 配置
- kubernetes: 特定のコンテナ(Pod)だけ特定のホストで – Qiita
- How to add two node labels to bootstrap arguments using –kubelet-extra-args ・ Issue #67 ・ awslabs/amazon-eks-ami
- KubernetesのNode Affinity, Inter-Pod Affinityについて – Qiita
- KubernetesのTaintsとTolerationsについて – Qiita
- Kubernetes道場 18日目 – Affinity / Anti-Affinity / Taint / Tolerationについて – Toku's Blog
- Kubernetes勉強会第5回 〜node affinity, pod affinity、Init containers、lifecycle hooks〜
- Terraform
- デプロイ
- The simplest guide to using Blue/Green deployment in Kubernetes
- Tutorial: Blue/Green Deployments with Kubernetes and Istio – The New Stack
- Blue/Green Deployments on Kubernetes – Ian Lewis
- Kubernetes + Istioでblue-green deploymentを実現する – UZABASE Tech Blog
- Perform Rolling Update Using a Replication Controller – Kubernetes
- DNS
- Variables
- Kubernetesの環境変数設定方法を調べる – Qiita
- KubernetesのPodに機密情報を受け渡してみる | DevelopersIO
- なぜ、Kubernetesを使う際にSecretを暗号化するのか? | DevelopersIO
- 運用
- 全般
- 構築
- Configure RBAC in your Kubernetes Cluster
- Helm chart parsing values not correctly ・ Issue #13723 ・ rancher/rancher
- helm/using_helm.md at master ・ helm/helm
- Tillerをマスタノードにスケジュールする他 – Qiita
- Opinionated Kubernetes 4: Helm package manager & Ingress with nginx ≫ Random Stuff by Kiall
- cluster-autoscaler: pod crashing ca-certificates.crt 'not a directory' ・ Issue #9019 ・ helm/charts
- metrics-server
- 0.3.0/0.3.1 unable to fetch metrics from Kubelet: 401 Unauthorized ・ Issue #144 ・ kubernetes-incubator/metrics-server
- Metrics server issue with hostname resolution of kubelet and apiserver unable to communicate with metric-server clusterIP ・ Issue #131 ・ kubernetes-incubator/metrics-server
- cluster-autoscaler
- charts/stable/cluster-autoscaler at master ・ helm/charts
- autoscaler/FAQ.md at master ・ kubernetes/autoscaler
- Cluster Autoscaler in Amazon EKS ? Alejandro Millan Frias ? Medium
- spot
Kubernetes
Helm
ビビらずに突き進んで、クベオーブを見事GETできるのか!?
GETしても磨き続けなくてはならない呪われたオーブ、その先には……?