2023/Q2を振り返る
はじめに
2023年も早いこと、Q2が終わり、後半年で今年が終わる時期になってきました。なので、Q2であった仕事とプライベートを振り返ってみたい。
アジェンダ
- 仕事
- プライベート
Q2であったこと
仕事
Q2では、仮説検証プロダクトのアーキテクトを中心とした役割を担っていた。初めての役割だったので、設計が遅かったり、メンバーには色々と迷惑をかけたかもしれない。タスクとして、以下のようなことを行なっていた。
- 仮説検証プロダクトの設計書の作成
- プロダクトに使う主要技術の勉強
- 仮説と成果の報告資料作成
- ステークホルダーとの調整
これまでの会社とは違い、アーキテクトとしての設計書作成や報告資料作成が求められ、多くのアドバイスを頂いた。作成しては、レビューしてもらい、さらにアドバイスを貰い、品質の粘度を上げるようなPDCAサイクルを回せていたのがよい環境だった(ただ、指摘され、作り直しを喰らっていたというのは内緒で....)。特に、アドバイスして意識していたことが
- 凡例をつける
- ピラミッド構成から練り直す
になるかなと思っています。
Design itより"良いデザインには凡例がある"とあり、システム図や概念図がある箇所にはとことん作り配置した。
ピラミッド構成に関しては、スライドから作り始めず、構成を練るところから始めて、少しでも違和感があれば練り直す。そして最後にスライド作成を始めるフローに変えてみた。習得しきれないところもあるので、今後もこの点は意識して改善を図りたいと思っている。ちなみに昔からスライドがよくわからないという指摘(う!!...大学院時代の古傷が...)をよく受けていたのはいい思い出。
勉強
Q2での勉強としては、GCP ACEの資格を取ったり、ソフトスキルを中心に勉強をしていた。
ハードスキル
ソフトスキル
- Design It! ―プログラマーのためのアーキテクティング入門
- 入門 考える技術・書く技術――日本人のロジカルシンキング実践法
- プロダクトマネジメントのすべて
- 正しいものを正しくつくる プロダクトをつくるとはどういうことなのか、あるいはアジャイルのその先について
プライベート
4月
草野球シーズンも始まり、去年から肩の調子が戻ってきたので、筋トレの成果を発揮する時がきた。1試合目は、完投7奪三振で試合に負けたが、完投できるまで体の調子が戻ったと実感できた。2試合目は、完投14奪三振で今シーズン初勝利を飾った。ちなみだが、我がチームは万年リーグ最下位の1勝できるかどうかのチームだったので、今年は2,3勝目指して体をスケールアップしていきたい。
5月
GWの後半で、大学の後輩とともに4泊5日で東北周辺旅行に行った。
動けるうちに、全NPBのホーム球場観戦制覇をしたいから、近々行っていない球場にも観戦予定するつもりです。
6月
一昨年引っ越してから、寝る部屋にエアコンがなかったので、やっとエアコンを買う決意をした。隠蔽菅の太さが施工基準ではないか何かでビックカメラやヨドバシで対応ができなかったので、管理会社紹介の施工業者に依頼するしかなかった。依頼から設置まで1ヶ月ぐらいかかったので、少し面倒だったな。
GCP Associate Cloud Engineer 合格しました
タイトル通りでGCP Associate Cloud Engineerを合格しました。初パブリッククラウドの資格を取得しました。
受けようと思った背景
いつものように、仕事でGCPを扱うことになったからである。これまではパブリッククラウド時代に、GCP含めAWS, Azureなど触っていないとと心のどこかで思っていたが、逃げていました。この度、GCPの知識がないと仕事にならないため、基本知識が取得できるようAssociate Cloud Engineerの資格を受けました。
受験前のスペック
著者のスペックは以下である。
勉強時間・方法
今回行った勉強方法と費やした勉強時間は以下である。
勉強時間
GWから2週間で、毎日30分~2時間程度なので、合計約20時間。
勉強方法
勉強方法は以下二つの教材を使って、重点的に周回した。
1. 図解即戦力 Google Cloudのしくみと技術がこれ1冊でしっかりわかる教科書
1周目は理解しているところは、スキップして、知らないところだけをサラッと読んだ。2周目は、模擬試験をやったあとに復習として、重点的に読み込みました。3周目は試験受ける前に全体的にサラッと読み込んだ。
2. GCP:Google Cloud Associate Cloud Engineer模擬試験問題集(4回分200問)
模擬試験を受けて、不正解ばかりだった。わからない専門用語だけを押さえて、メモに特徴をまとめていた。最終的には、95%の得点率になるところまで行って、4周しました。
https://www.udemy.com/course/gcpgoogle-cloud4200-y/
結果
タイトルにもありますが、無事合格しました。知識つけることに注力してたので、Courseraで無料のハンズオンを使って、実体を理解していきたいと思ってます。それが終われば、 Professional Cloud DevOps Engineerをチャレンジしていこうかな。
「技術書」の読書術を読んだ個人的感想
なぜこの本を読もうと思ったか
3-4年前から気になったことは、本を買って読書するようになっていた。しかし、ここ最近物覚えも悪くなってきたり、集中力がなくなったりして、本を読むことについてもやもやしてきた。ある日、ちらっとブログを眺めていると、「技術書」の読書術という「今の私の欲求にピッタリな本があるじゃないか!」ということで即購入したのが経緯です。 本記事では、これから3つのことを取り組んでみようと思うことだけ書いてます。
「技術書」の読書術 達人が教える選び方・読み方・情報発信&共有のコツとテクニック | IPUSIRON, 増井 敏克 |本 | 通販 | Amazon
取り組むこと
1. 時間制限読書法
一定の制限時間を決めて、一気に一つの本を読破する読書法。筆者は、本を読む際に、全部の内容に目を通すと気がすまない(もったいない)という気持ちで読んでしまう癖がある。読んだとしても、仕事で使わない限り1週間以内に忘れてしまうので、時間がもったいないと思っていた。この読書法を実践して、今必要な内容だけを取捨選択できるようにしたい。
2. マーキング読書法
マークをしながら、本を読む読書法。今まで、本を汚すともったいないとか、売る時に値段が下がるのではと思っていた。結局、技術本などはほとんど売らずにいたり、何度も読み返して、本が折れてたりする。なおさらマーキング読書法をつかって、重要なポイントをすぐ読み返せるようにしていきたい。
3.Notionでの読書記録と読書メモ
読書記録をつけて、モチベーションを高めていく方法の一つ。私の場合は、読書記録をつけてなかったので、Notionを使って、記録を残し、簡単なメモを本ブログに書いてみたいと思う。
終わりに
今回は、読書術に関わる3つのことをメモレベルでまとめました。本の内容では、他に英語の技術本についてや本の探し方、アウトプットなど多くの内容を取り扱っているので、ぜひ読書術に困りだした方は一読してみることをおすすめします。
2022年、締めくくり
2022年、締めくくり
2022年なぜか、短く感じた1年になったなとふつふつと感じた。年齢のせいか、仕事が忙しかったのか。
TL;DR
- 転職して、残業時間がなくなった
- DevOpsを基礎から学び始めた。
- Containerの基礎がちょっくり理解できるようになった
- EXIN DevOps Foundation/OSベンダー資格3つ合格した
- 英語9か月頑張ったが、やはりスピーキングが伸びない
- あ、高尿酸血症治した
- ゴルフを始めた(スコア120切れず...)
- 草野球/ソフトボール、ほぼ全試合いった
- 30歳になった
- 彼女できなかった
ここからは長いかもしれないので、適当に読んでくださいmm
仕事編
転職して早1年、現リーダーの協力もあり、残業が圧倒的に少なくなった。リーダーあざす(見てるかもしれないのでw)。仕事面では、DevOpsのCI/CDの領域を主に取り扱ってきた。Helmだったり、Ansibleだったり、Jenkinsのおじちゃんだったり色々活用できてよかった。k3sを使っていることもあり、containerdの基礎を理解することもあったり、面白い一年になった気がする。あとは、Infrastructure as Code (IaC)を取り入れる上で、すべてのインフラをコードで状態がわかるようにするというのは理解できるが、現実的にどこまでコード化できるのかなど葛藤もあったな。実装しているものも成熟度的には「管理された」状態が終わり、「最適化された」状態のステージで来年頑張りたいと思う。
勉強編
勉強...勉強...園児ニア界隈には、エンジニアはプライベートでも勉強すべき論争があるが、自分はこの圧に負け、勉強しなきゃ圧力に弱い。でも。今年は社会人歴で一番勉強する時間が短かったかもしれない。とはいえ、仕事に必要なDevOpsだったり、技術スキルもいい塩梅で勉強した気がする。あれこれ、多方面に手を出さず、必要最低限の領域に対して、勉強するスキル?考えた方も大切だなと思った。これは過去これまで勉強したり、経験で得たものが日常的に理解できるようになったという理由もあるかもしれない。
あとは英語...君はもうあれだよね...癖強いよね...。スピーキング能力に関してはやり続けるしかないので、留学しとけばなという後悔もあるが、後悔しても仕方ないので、継続的スピーキング改善していこうと心のすみっちょに置いておこう。
プライベート
今年からゴルフを始めるようになり、運動不足気味になっていたので、習慣的に練習していい運動不足解消になったと思う。
草野球では、ようやく肩が治り、6回9失点10奪三振3四球ぐらいでひどい結果になった。社会人以降まともに投げれた時がなかったが、ようやくいい整体と出会えて、肩回りの硬さをほぐすアプローチが取れたのが良かった。
ソフトボールでは、7本ホームラン打てた。来年はチームでホームラン数、打率1位になれるよう思考錯誤していきたいな。
終わり
今年で30歳になり、体力の劣ろえが非常に気になり始めたが、来年も頑張っていこう!! (夜型のはずが、眠すぎる)。年末休暇は「LeanとDevOpsの科学」と「継続デリバリーのソフトウェア工学」読破すっぞ。
EXIN DevOps Foundation取りました
今年は、あまり勉強しておかないとこうと思っていたが、時間があったので、EXIN DevOps Foundationを受けてみた。この試験を選んだ主な理由は、
- CI/CDパイプラインの構築に携わっているため、DevOpsの概念から勉強してみたい
- DevOps, アジャイルの言葉はざっくりはわかるけど、どのように説明したらいいかわからない
- DevOps大変だけど、楽しい
といったぼんやりしたことからです。
EXINとは
EXINとは、ITILの認定試験を行うオランダの会社です。よく聞くAgile Scrum xxxの各認定資格も行っている企業かな。
EXIN DevOps Foundationとは
ITに携わる人でDevOpsの基礎を学び、理解するための認定資格であり、上位にはDevOps Professional, DevOps Masterがある。興味ある方は、ぜひ以下リンクから飛んでみてください。公式の練習問題もあります!!
https://embed.exin.totalservices.io/certifications/exin-devops-foundation-exam?language=ja
勉強時間・方法
公式では、60時間の勉強時間が目安となっている。おそらく私もこの時間ぐらい2ヶ月と、だらだら勉強した。
8月から資格取ることを決意しました。以下のUdemyのコースをセール時に購入して、気力ある時に週2/3日に1時間程度を勉強しました。日本語翻訳がないので、英語字幕にして学んでました。
9月からも、同じく週2/3日に1時間程度を公式の練習問題を解いては、内容を覚えていた。あとは、公式からキーワードリストが公開されているので、その内容と関係性など覚えました。
ちなみに、以下のガイドブックが公式のガイドブックになっています。
受験方法
公式サイトから購入した後に、メールが来ます。受信メールに記載されているURLを使えば、24時間いつでもオンラインで受験できます。受験するにあたって、顔写真付き身分証明証の準備とカメラ付きPCを準備して、試験を開始します。ビデオ録画になるので、試験管とのやりとりはなかったです。
結果
公式の練習問題以外は、情報が全くないので、恐る恐る受験しました。結果は、68%(27/40)のスコアでした。あと1問間違えてたらアウトでした。
感想
DevOpsでよく聞くアジャイル、リーン、デプロイメントなどとは何か、これらによって、何が期待できるかなど学べてた気がする。DevOpsを実践するにあたって、ビジネスと組織にどのような影響を与えるか、期待ができるかなど学びたい初学者向きに試験だと思います。
AWS/GCP/Azureなどのサービスを使って、実践的なスキルをつけたい方は各クラウドベンダーの試験を受けた方がいいかなと思います。
気が向いたら、上位のDevOps Professionalも勉強して、取ってみようかなと思います。(年末以降...今年はもう遊ぼう
閉域環境のラズパイ4にk3sをインストールする
背景
閉域(インターネットへ疎通ができない)環境に対して、k3sをインストールすることがあったので、備忘録として書きます。
*閉域環境を英語ではair-gapと呼ばれることがある。Rancher公式サイトにはair-gapと記載されている。
環境
- ラズパイ4
- Ubuntu 18.04
- aarch64 (arm64)
- k3s v1.23.6+k3s1
閉域環境へk3sインスール
1. k3sのimage/バイナリとinstall.shをダウンロード
GitHubからローカル環境に手動でk3sのimageとバイナリをダウンロードします。本環境では、現時点(2022/05/10)で最新のv1.23.6+k3s1を使用します。
https://github.com/k3s-io/k3s/releases
次に、ローカル環境にラズパイサーバーで実行するk3sインストール用スクリプトをダウンロードします。
# get.k3s.ioからスクリプトをダウンロード % curl https://get.k3s.io -o ~/Downloads/install.sh % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 27501 100 27501 0 0 26412 0 0:00:01 0:00:01 --:--:-- 26622 # ローカル環境にダウンロードできたか確認 % ls ~/Downloads/install.sh /Users/****/Downloads/install.sh
2. ラズパイサーバーへ転送
先ほどダウンロードしたものをラズパイサーバーへ転送します。
# localからラズパイサーバーへimageを転送 % scp ~/Downloads/k3s-airgap-images-arm64.tar ubuntu@192.168.3.101:/home/ubuntu ubuntu@192.168.3.101's password: k3s-airgap-images-arm64.tar 100% 462MB 4.5MB/s 01:42 % scp ~/Downloads/k3s ubuntu@192.168.3.101:/home/ubuntu ubuntu@192.168.3.101's password: k3s 100% 60MB 6.1MB/s 00:09 % scp ~/Downloads/install.sh ubuntu@192.168.3.101:/home/ubuntu ubuntu@192.168.3.101's password: install.sh 100% 27KB 2.2MB/s 00:00 # ラズパイサーバーでファイルを確認 ubuntu@ras01:~$ ls -lh total 522M -rw-r--r-- 1 ubuntu ubuntu 27K Dec 15 19:39 install.sh -rw-r--r-- 1 ubuntu ubuntu 60M Dec 15 19:37 k3s -rw-r--r-- 1 ubuntu ubuntu 462M Dec 15 19:25 k3s-airgap-images-arm64.tar # /usr/local/bin配下にk3sバイナリを格納 ubuntu@ras01:~$ sudo mv k3s-arm64 /usr/local/bin/k3s ubuntu@ras01:~$ ls /usr/local/bin/ k3s # /var/lib/rancher/k3s/agent/images配下にk3s imageをコピー sudo mkdir -p /var/lib/rancher/k3s/agent/images/ sudo cp k3s-airgap-images-arm64.tar /var/lib/rancher/k3s/agent/images/
3. スクリプトとk3sバイナリに実行権限を付与
# install.shに実行権限を付与 ubuntu@ras01:~$ sudo chmod +x install.sh ubuntu@ras01:~$ ls -lh install.sh -rwxr-xr-x 1 ubuntu ubuntu 27K Dec 15 19:39 install.sh # k3sバイナリに実行権限を付与 ubuntu@ras01:~$ sudo chmod +x /usr/local/bin/k3s ubuntu@ras01:~$ ls -lh /usr/local/bin/ total 60M -rwxr-xr-x 1 ubuntu ubuntu 60M Dec 15 19:37 k3s
4. k3sインストールを実行
install.sh
を実行して、ラズパイサーバーにk3sをインストールします。
# インストールの実行 ubuntu@ras01:~$ INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh [INFO] Skipping k3s download and verify [INFO] Skipping installation of SELinux RPM [INFO] Skipping /usr/local/bin/kubectl symlink to k3s, command exists in PATH at /usr/bin/kubectl [INFO] Skipping /usr/local/bin/crictl symlink to k3s, command exists in PATH at /usr/bin/crictl [INFO] Skipping /usr/local/bin/ctr symlink to k3s, command exists in PATH at /usr/bin/ctr [INFO] Creating killall script /usr/local/bin/k3s-killall.sh [INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh [INFO] env: Creating environment file /etc/systemd/system/k3s.service.env [INFO] systemd: Creating service file /etc/systemd/system/k3s.service [INFO] systemd: Enabling k3s unit Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service. [INFO] systemd: Starting k3s # k3sのステータス確認 ubuntu@ras01:~$ systemctl status k3s ● k3s.service - Lightweight Kubernetes Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2021-12-15 19:54:15 JST; 1min 44s ago Docs: https://k3s.io Process: 18730 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS) Process: 18725 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS) Process: 18723 ExecStartPre=/bin/sh -xc ! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service (code=exited, status=0/SUCCESS) Main PID: 18733 (k3s-server) Tasks: 65 CGroup: /system.slice/k3s.service ├─18733 /usr/local/bin/k3s server └─18894 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s Dec 15 19:55:37 ras01 k3s[18733]: E1215 19:55:37.805540 18733 remote_runtime.go:209] "RunPodSandbox from runtime service failed" err="rpc error: code = Unknown desc = failed to ge Dec 15 19:55:37 ras01 k3s[18733]: E1215 19:55:37.805691 18733 kuberuntime_sandbox.go:70] "Failed to create sandbox for pod" err="rpc error: code = Unknown desc = failed to get san Dec 15 19:55:37 ras01 k3s[18733]: E1215 19:55:37.805771 18733 kuberuntime_manager.go:833] "CreatePodSandbox for pod failed" err="rpc error: code = Unknown desc = failed to get san Dec 15 19:55:37 ras01 k3s[18733]: E1215 19:55:37.805964 18733 pod_workers.go:951] "Error syncing pod, skipping" err="failed to \"CreatePodSandbox\" for \"metrics-server-7cd5fcb6b7 Dec 15 19:55:45 ras01 k3s[18733]: E1215 19:55:45.015469 18733 resource_quota_controller.go:413] unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the se Dec 15 19:55:45 ras01 k3s[18733]: W1215 19:55:45.523766 18733 garbagecollector.go:707] failed to discover some groups: map[metrics.k8s.io/v1beta1:the server is currently unable to Dec 15 19:55:46 ras01 k3s[18733]: W1215 19:55:46.502560 18733 handler_proxy.go:104] no RequestInfo found in the context Dec 15 19:55:46 ras01 k3s[18733]: E1215 19:55:46.502809 18733 controller.go:116] loading OpenAPI spec for "v1beta1.metrics.k8s.io" failed with: failed to retrieve openAPI spec, ht Dec 15 19:55:46 ras01 k3s[18733]: , Header: map[Content-Type:[text/plain; charset=utf-8] X-Content-Type-Options:[nosniff]] Dec 15 19:55:46 ras01 k3s[18733]: I1215 19:55:46.502881 18733 controller.go:129] OpenAPI AggregationController: action for item v1beta1.metrics.k8s.io: Rate Limited Requeue.
5. kubectlの確認
この段階ではPATH設定などを行なっていないため、kubectl が使えません。最後に、kubectlコマンドが使えるように以下を設定していきます。
# kubectlの実行 (この段階ではrefusedとなる) ubuntu@ras01:~$ kubectl get nodes The connection to the server localhost:8080 was refused - did you specify the right host or port? # kubectlのパスを設定 ubuntu@ras01:~$ echo "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml" >> ~/.bashrc ubuntu@ras01:~$ source ~/.bashrc # ファイル所有者を一般ユーザーに変更 ubuntu@ras01:~$ sudo chown ubuntu /etc/rancher/k3s/k3s.yaml ubuntu@ras01:~$ ls -lh /etc/rancher/k3s/k3s.yaml -rw------- 1 ubuntu root 2.9K Dec 15 19:54 /etc/rancher/k3s/k3s.yaml # kubectlの実行 ubuntu@ras01:~$ kubectl get nodes NAME STATUS ROLES AGE VERSION ras01 Ready control-plane,master 6m55s v1.23.6+k3s1
6. お片付け
k3sをアンインストールしたい場合は、以下のスクリプトを実行すれば、アンインストールが実行されます。
ubuntu@ras01: /usr/local/bin/k3s-uninstall.sh