hijikitaroのブログ

しがないSIerとして、日々プロジェクトを管理し、システムを育て、日々お子を見守り育てる中での出来事や学びを淡々と書いています。

「Kubernetes on Azure ハッカソン@名古屋」に参加してきた。

はじめに

Kubernetes on Azure ハッカソン@名古屋」に参加してきた。

75az.connpass.com

参加したきっかけは、そろそろk8sを「名前知ってる」から「ちょっと使える」になりたい、かつ、Dockerやk8sの勉強会に行ってみたいと思っていたからかなと(わかっている人に教わった方が早いのではという考えもあったり)。ただ、見つけたのが数日前、かつ、期間が2日間、かつ、タイトルがハッカソンとなっていたので割とギリギリまで参加するかを悩んだというのは事実。(特にハッカソンに自分は引っかかっていた。聞くだけじゃない勉強会に参加するのが初めてだったので。まあ結果的には参加できてよかった。)

というわけで、今回は勉強会参加してきたブログ。基本的にはやったことやその時感じたことを淡々と書いている。

勉強会の内容

概要

  • 参加者全員でモブプロ
    • モブプロ = 一人が操作(コマンドの実行など)を行い、他の人が見ながらフォローしたりするプログラミング(ペアプロの人数多い版?)
  • 説明 by Microsoft 寺田佳央さん
  • 1日目:寺田さん説明のもとk8s構築
  • 2日目:参加者の力でk8s構築 + DevOps構築 + Docker&k8s心得
  • GitHubgithub.com

1日目やったこと

全員で同じ環境で作業を行うため、Azureアカウントを作成し、Azure上に作業用となるVMLinux)を立てて構築を行う。(VMは作業用のため個人でやる場合は、ローカルでも問題なし)

またこの時の構築手順は下記リンクをもとに実施。(※ただし、完全に同じというわけではないため、一からやってみる際は注意が必要。)

github.com

github.com

  • 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) の作成
  • Kubectlコマンドのインストール
  • AKS接続用の資格情報の取得
  • AKSからACRへの接続情報の作成
  • Deployment YAML の適用
    • 「4-create-deployment-svc.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
  • Service YAML の適用
  • Helm のインストール(わかっていない)
    • 上手くいかず、寺田さんがSlackに書いてくれたコマンドで解決。(理由がわかっていません)
    • k8sのnamesapceにIngressが存在しているかがどうかを見る必要があった気がする。
  • Ingress YAML の適用(わかっていない)

懇親会

運営の方、寺田さん、参加者の方と飲みながら話せる良い機会でした。記憶に残っていることとして、「テクノロジーは手段、何を実現したいか、何に困っているかを把握し、適したテクノロジーを使える能力が必要」、「すべてのエンジニアを幸せにしたい」、「知りたいこと駆動開発」、「勉強会では登壇者と参加者ともに何かを得る機会にしたい」といった考え方や熱い思いが聞けたことかなと。自分も熱い思いをもって技術を磨いていきたいと思える素敵な飲み会でした。

2日目やったこと

1日目の復習

2日目は自分たちの力でk8s環境構築を実施する(たまに寺田さんに助けてもらう)。自分たちで進めていくということもあり、1日目とは違い参加者であれやこれや話しながら実施できてとても面白い経験ができた(これが勉強会か!ハッカソン?ハンズオン?か!という経験)。特に、AKSに入る前に今回の全体像をホワイトボードに書きながら整理できたことが2日目の一番の収穫ではと感じている。その時のホワイトボードをもとに自分なりに整理したイメージが下図。(誤りがあれば教えてください)

f:id:hijikitaro:20191102002551p:plain

このホワイトボードの整理時間がなかったたら、全体像がわからず理解が深まらない可能性が高かったと思うので、参加者のみなさんに感謝している。(若干横道にそれてしまう発言を何度もしてしまった気がして、申し訳ないような申し訳なくないような感じである)。

そして、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?コンテナ?の仕組みがJavaEJBやらと似ているような気がするので・・・DIコンテナにクラス登録して呼び出して使うみたいなことが、Dockerイメージ作ってDocker起動する流れに似ている?

また、そのうちDockerを使ったWebサーバ、アプリサーバ、DBサーバ構成の簡易アプリを作ってみようかと。

ではでは、お疲れ様でした。

参考