主題
- AWS上でkubernetesを試す勉強の記録。
- 途中に考えた考え事、彷徨った結果も記録していきます。
- ゴールは、現段階では特に設けません(EKSとかFargateとかECRとかわかった感じで話したい)。
環境 / 前提
- 当方知識レベル :
- AWSについては、EC2, S3ぐらいならわかります。
- LinuxやNWの基礎はわかります。
- VMの基礎はわかります。
- コンテナは雰囲気はわかります。
- AWS EC2 (t2.medium (今後足りるかは知らない))
- AWSである理由: 自前PCがちょっと古く、実験・勉強はAWSを使うほうがいろいろと楽
- EC2である理由: EKSにしようと最初は思ったが、なんか高かった(常時$72/月で、止めたり作ったりするのめんどくさそうだった)
- kubernetes SW(表現あってなさそう) : minikube
- 理由: 使っている人を見た事がある。microk8sみたいな名前のやつもどこかで見た。
僕のAWS EC2の運用方法としては、使うときだけインスタンスを「開始」して、寝るときは「停止」している。そうすれば金が全然かからない(1時間やって寝るとかならほんとに数円か数十円)
やったこと1 : EC2にminikubeの構築。
環境の準備
最初は、EKSを使いたかったです。ただ、ざっと見た所、僕のレベルでは面倒そうだったのでまずはEC2で感触を掴もうと思いました。小さめの構成で試したいと考えています。
AWSのセキュリティグループとか鍵とかは、EC2はたまに使っていたのですでにある前提で進めます。
いろいろ調べていたところ、minikubeであれば1台でマスターもワーカーも行けるような感じでした。
なのでやることにしました。
AWS EC2に入り、それなりにスペック足りてそうなt2.mediumで作成(Amazon Linux 2)。
完了後sshでログイン。
ログイン後作業(minikube導入まで)
ここ見てminikube動くところまでやりました。
https://level69.net/archives/27284
sudo yum update -y
amazon-linux-extras install -y docker
(man amazon-linux-extrasとかやりつつ)
systemctl enable docker
systemctl start docker
yum install -y conntrack
minikube start --vm-driver=none
ln -s `find /var/lib/minikube/binaries/ -name kubeadm` /usr/sbin/
ln -s `find /var/lib/minikube/binaries/ -name kubectl` /usr/sbin/
ln -s `find /var/lib/minikube/binaries/ -name kubelet` /usr/sbin/
minikube stop
minikube start --vm-driver=none
ここまで来ると、udemyとか本に載っているような、以下のようなコマンドが使えるようになります。
余談ですが、udemyでは、「Certified Kubernetes Administrator(CKA) with Practice Tests」を毎日見ています。
kubectl apply -f sample-pod.yaml
kubectl get pods
振り返り
minikubeの構築自体は簡単です。1台の構成でいけるのは楽で良いです。マシンスペックも充分足りているようです。
ということは、CKAとかの試験勉強的にはEKSでなくてもminikubeで行けるなと思いました。
完全に人のコピペで済ませたのでまだまだ味わいは少ないです。
次のステップ
Webアプリのpodを作って我が家からAWS上にアクセスできるところまで行きたい(なんならnginxで充分なのでまずそれをhello worldします)。
その後に、そのソフトウェアがアップデートされたらどう運用するのか見たいなところを考えるか、なんせ次のステップを探ります。
やったこと2 : nginxコンテナをマイPCからアクセスする。
予備調査 & 実験
いくつかグーグルを散歩していたところ、以下をやって、セキュリティグループの設定を変えて、パブリックのIPでアクセスしている例がありました。
kubectl expose 〜〜 --port=80 〜〜
kubectl exposeについて考えます。とりあえず -h にて。
[root@*** pods]# kubectl expose -h
Expose a resource as a new Kubernetes service.
(以下略)
このコマンドは、新しいkubernetesのserviceとしてresourceをexposeしてくれるようです。
オプションは2,30個ありました(--portとか--typeとか使えそうです)。
あと、参考にしたサイトは、podじゃなくてdeploymentを作ってそれをexposeしてました。
そこで、「kubernetes完全ガイド」の第五章[Workloadsリソースの概要]を読むと、
以下のような管理構造になっているようです。
「Tier1:Pod」 ← 「Tier2:ReplicaSet」 ← 「Tier3:Deployment」
Podをexposeする例があまり見つかってませんが、ヘルプを読む限り、podも行けるように見えます。
ただ、まずは動かしたいので、deploymentでまずはいきます。
[参考]
https://qiita.com/leomaro7/items/4433f408a276dfa385fc
とかいろいろ
ということで、deploymentを作ってserviceを作ってアクセスすれば良い模様なので、まずはそうします。
それぞれがどういう概念でどういう動きをするかは一旦気にしないでおきます。
本番進行
随時更新中