「Kubernetes on Azure ハッカソン@名古屋」に参加してきた。
はじめに
「Kubernetes on Azure ハッカソン@名古屋」に参加してきた。
名古屋における Kubernetes ハッカソン、今皆さまだけで、DevOps 環境を構築して頂いてます!#てらだよしおまつり pic.twitter.com/Pwdyy8VL23
— 寺田佳央@クラウド・アドボケイト (@yoshioterada) October 27, 2019
参加したきっかけは、そろそろk8sを「名前知ってる」から「ちょっと使える」になりたい、かつ、Dockerやk8sの勉強会に行ってみたいと思っていたからかなと(わかっている人に教わった方が早いのではという考えもあったり)。ただ、見つけたのが数日前、かつ、期間が2日間、かつ、タイトルがハッカソンとなっていたので割とギリギリまで参加するかを悩んだというのは事実。(特にハッカソンに自分は引っかかっていた。聞くだけじゃない勉強会に参加するのが初めてだったので。まあ結果的には参加できてよかった。)
というわけで、今回は勉強会参加してきたブログ。基本的にはやったことやその時感じたことを淡々と書いている。
勉強会の内容
概要
- 参加者全員でモブプロ
- モブプロ = 一人が操作(コマンドの実行など)を行い、他の人が見ながらフォローしたりするプログラミング(ペアプロの人数多い版?)
- 説明 by Microsoft 寺田佳央さん
- 1日目:寺田さん説明のもとk8s構築
- 2日目:参加者の力でk8s構築 + DevOps構築 + Docker&k8s心得
- GitHub: github.com
1日目やったこと
全員で同じ環境で作業を行うため、Azureアカウントを作成し、Azure上に作業用となるVM(Linux)を立てて構築を行う。(VMは作業用のため個人でやる場合は、ローカルでも問題なし)
またこの時の構築手順は下記リンクをもとに実施。(※ただし、完全に同じというわけではないため、一からやってみる際は注意が必要。)
- Docker インストール
- az cli インストール
- ハンズオン用ソースダウンロード
- Docker イメージ作成
- Maven用のDockerイメージの作成(用意されたDockerfileを使用しbuildを実施)
- Azure Container Registry(ACR)の作成
- ACRにDocker Login
- ACRにDockerイメージをPush
- 「2-build-create.sh」を実行するとDockerイメージのbuild→tag→pushが行われる
- AzureポータルからACRを確認
- Dockerの動作確認
- 「ACRにDockerイメージをPush」でできたDockerイメージをrunする
- Azure Kubernetes Service (AKS) の作成
- 今回はCLIでインストールを実施
- クイック スタート:Azure CLI を使用して Azure Kubernetes Service クラスターをデプロイする
- AKSは様々なサービスが同時にデプロイされるため、作成までに割と時間がかかる
- Kubectlコマンドのインストール
- AKS接続用の資格情報の取得
- AKSからACRへの接続情報の作成
- Deployment YAML の適用
- Kubernetesの基本的な操作(自分のモブプロ担当領域)
- 1日目に自分が担当した領域で、1日目はわけもわからずに言われるがままコマンドをたたいていた・・・(完全に寺田さんのマリオネット状態)
- わざとDeploymentを失敗させる、pod数を変更する、cpuサイズを変更する、ログを確認する、ラベルによるフィルタなどの操作をしたと思う(すいません、言われるがままだったのでしっかりと理解はできていません)
- その時にたたいていたコマンドは以下(コマンド内のpod名などがそのまま載っているため、使用する際には変更すること)
# k8s の基本的な操作に関するコマンド ## pod確認 kubectl get po kubectl get po -o wide kubectl get po -o wide -w kubectl get po -n kube-system ## pod削除 kubectl delete po spring-front-service-7d8dc8fdc8-j4f54 ## deployment確認 kubectl get deployment ## deploymentをフィルタして取得(labelなど) kubectl get po --selector app=spring-front-service kubectl get po --selector app=spring-front-service,version=v1 kubectl get po --selector app=spring-front-service,version=v2 ## podの状況確認 kubectl describe po spring-front-service-7d8dc8fdc8-klxh2 ## secret確認(接続情報) kubectl get secret ## podでコマンド実行 kubectl exec -it spring-front-service-7d8dc8fdc8-j4f54 env kubectl exec -it spring-front-service-7d8dc8fdc8-j4f54 /bin/sh ## deploymentのscale kubectl scale deployment/spring-front-service --replicas=3 ## namespace確認 kubectl get ns ## Service確認 kubectl get svc ## Ingress確認 kubectl get ing ## logs確認 kubectl logs [pod] kubectl logs -n kube-system coredns-866fc6b6c8-2dmrf ## メトリクスで取得しているPodごとのメモリ確認 kubectl top po ## yamlの適用 kubectl apply -f 4-create-deployment-svc.yaml ## deploymentをじかに編集(あまりやらないのがおすすめ) kubectl edit deployment/spring-front-service ## port-forward設定(kubectl経由でAKS podへ) kubectl port-forward spring-front-service-6667858b55-6rrhs 8080:8080
懇親会
運営の方、寺田さん、参加者の方と飲みながら話せる良い機会でした。記憶に残っていることとして、「テクノロジーは手段、何を実現したいか、何に困っているかを把握し、適したテクノロジーを使える能力が必要」、「すべてのエンジニアを幸せにしたい」、「知りたいこと駆動開発」、「勉強会では登壇者と参加者ともに何かを得る機会にしたい」といった考え方や熱い思いが聞けたことかなと。自分も熱い思いをもって技術を磨いていきたいと思える素敵な飲み会でした。
2日目やったこと
1日目の復習
2日目は自分たちの力でk8s環境構築を実施する(たまに寺田さんに助けてもらう)。自分たちで進めていくということもあり、1日目とは違い参加者であれやこれや話しながら実施できてとても面白い経験ができた(これが勉強会か!ハッカソン?ハンズオン?か!という経験)。特に、AKSに入る前に今回の全体像をホワイトボードに書きながら整理できたことが2日目の一番の収穫ではと感じている。その時のホワイトボードをもとに自分なりに整理したイメージが下図。(誤りがあれば教えてください)
このホワイトボードの整理時間がなかったたら、全体像がわからず理解が深まらない可能性が高かったと思うので、参加者のみなさんに感謝している。(若干横道にそれてしまう発言を何度もしてしまった気がして、申し訳ないような申し訳なくないような感じである)。
そして、2日目もIngress部分で上手くいかず、最終的に寺田さんに助けていただいたが、やっぱり自分ではまだ解決できず、きっと今も自力で解決することができないレベルではある。ネットワーク的な知識がないからなのか、そもそもWebサーバの仕組みがわかっていないのか、どこがわからないかもわかっていないという状態・・・
DevOps構築
Azure DevOps を使ったCI/CD環境構築も+αの時間で実施する予定だったが、1日目の復習に時間がかかりため、最後まで実施できなかった。なので、1日目の復習時間に寺田さんとマンツーマンでCI/CD環境構築を実施していた方に手順書を作ってもらうという対応となった。Slackに手順書がアップされたので、そのうち実施してみようと思う。(こういうのブログにするとだれか助かったりするのだろうか?会社でやってみたCI/CDも公開できる範囲で書くとよいのだろうか?)
寺田さんからのDockerやk8sの心得
2日目の最後は寺田さんからDockerやk8sの心得について以下の資料をもとに話して頂いた。
www.slideshare.net
自分が一番感じたことは、やっぱりk8sを「なぜ使うのか?」新しいから使うのではなく、明確な意図をもって使わないといけないということ。テクノロジーは手段であって、目的ではない、ということを改めて実感し、それをしっかりと伝えるためには、テクノロジーの理解と現場での経験が必要だということを感じた。自分も経験や知識を増やしてテクノロジーを伝えていける人間になりたいと強く思う。
終わりに
勉強会に参加できて本当に良かった。運営の方々、寺田さん、参加者のみなさんに感謝しています。また、Dockerやk8sの学びだけでなく、一緒に何かをする楽しさや熱い思いに触れる良い機会でした。ここからがDockerやk8sの勉強のスタートと思って日々試しながら勉強していこうかと(周りの参加者の方は、確実に自分よりも知識や経験がありそうだったので、負けないように頑張っていこうかな)。
あと、フィッピーと絵本とシールももらえて満足でした。フィッピーは、7か月のお子も気に入ってくれ、絵本は破ろうとするので・・・もう少し大きくなったら読んであげようかと。
この勉強会に出て昔かじっていたJavaをもう一度勉強しようかとも思っている。なんとなくDocker?コンテナ?の仕組みがJavaのEJBやらと似ているような気がするので・・・DIコンテナにクラス登録して呼び出して使うみたいなことが、Dockerイメージ作ってDocker起動する流れに似ている?
また、そのうちDockerを使ったWebサーバ、アプリサーバ、DBサーバ構成の簡易アプリを作ってみようかと。
ではでは、お疲れ様でした。