凡ジニアのtxt

エンジニアリングができない凡ジニア

2023/Q2を振り返る

はじめに

2023年も早いこと、Q2が終わり、後半年で今年が終わる時期になってきました。なので、Q2であった仕事とプライベートを振り返ってみたい。

アジェンダ

  • 仕事
  • プライベート

Q2であったこと

仕事

Q2では、仮説検証プロダクトのアーキテクトを中心とした役割を担っていた。初めての役割だったので、設計が遅かったり、メンバーには色々と迷惑をかけたかもしれない。タスクとして、以下のようなことを行なっていた。

  • 仮説検証プロダクトの設計書の作成
  • プロダクトに使う主要技術の勉強
  • 仮説と成果の報告資料作成
  • ステークホルダーとの調整

これまでの会社とは違い、アーキテクトとしての設計書作成や報告資料作成が求められ、多くのアドバイスを頂いた。作成しては、レビューしてもらい、さらにアドバイスを貰い、品質の粘度を上げるようなPDCAサイクルを回せていたのがよい環境だった(ただ、指摘され、作り直しを喰らっていたというのは内緒で....)。特に、アドバイスして意識していたことが

  • 凡例をつける
  • ピラミッド構成から練り直す

になるかなと思っています。

Design itより"良いデザインには凡例がある"とあり、システム図や概念図がある箇所にはとことん作り配置した。

ピラミッド構成に関しては、スライドから作り始めず、構成を練るところから始めて、少しでも違和感があれば練り直す。そして最後にスライド作成を始めるフローに変えてみた。習得しきれないところもあるので、今後もこの点は意識して改善を図りたいと思っている。ちなみに昔からスライドがよくわからないという指摘(う!!...大学院時代の古傷が...)をよく受けていたのはいい思い出。

勉強

Q2での勉強としては、GCP ACEの資格を取ったり、ソフトスキルを中心に勉強をしていた。

ハードスキル
  • 図解即戦力 Google Cloudのしくみと技術がこれ1冊でしっかりわかる教科書
  • DNSがよくわかる教科書
ソフトスキル

プライベート

4月

草野球シーズンも始まり、去年から肩の調子が戻ってきたので、筋トレの成果を発揮する時がきた。1試合目は、完投7奪三振で試合に負けたが、完投できるまで体の調子が戻ったと実感できた。2試合目は、完投14奪三振で今シーズン初勝利を飾った。ちなみだが、我がチームは万年リーグ最下位の1勝できるかどうかのチームだったので、今年は2,3勝目指して体をスケールアップしていきたい。

5月

GWの後半で、大学の後輩とともに4泊5日で東北周辺旅行に行った。

  • 1日目: 横浜/横浜DeNa観戦
  • 2日目: 茨城/福島/山形/仙台
  • 3日目: 楽天観戦/新潟
  • 4日目: 群馬 キャンプ
  • 5日目: 栃木/帰宅

動けるうちに、全NPBのホーム球場観戦制覇をしたいから、近々行っていない球場にも観戦予定するつもりです。

6月

一昨年引っ越してから、寝る部屋にエアコンがなかったので、やっとエアコンを買う決意をした。隠蔽菅の太さが施工基準ではないか何かでビックカメラやヨドバシで対応ができなかったので、管理会社紹介の施工業者に依頼するしかなかった。依頼から設置まで1ヶ月ぐらいかかったので、少し面倒だったな。

GCP Associate Cloud Engineer 合格しました

タイトル通りでGCP Associate Cloud Engineerを合格しました。初パブリッククラウドの資格を取得しました。

cloud.google.com

受けようと思った背景

いつものように、仕事でGCPを扱うことになったからである。これまではパブリッククラウド時代に、GCP含めAWS, Azureなど触っていないとと心のどこかで思っていたが、逃げていました。この度、GCPの知識がないと仕事にならないため、基本知識が取得できるようAssociate Cloud Engineerの資格を受けました。

受験前のスペック

著者のスペックは以下である。

  • IT経歴: 運用3年目, ITコンサル1年, そのほか2年
  • 領域: k8s
  • GCP経験: 趣味程度に、Compute Engineなどで遊んでたぐらい

勉強時間・方法

今回行った勉強方法と費やした勉強時間は以下である。

勉強時間

GWから2週間で、毎日30分~2時間程度なので、合計約20時間。

勉強方法

勉強方法は以下二つの教材を使って、重点的に周回した。

1. 図解即戦力 Google Cloudのしくみと技術がこれ1冊でしっかりわかる教科書

1周目は理解しているところは、スキップして、知らないところだけをサラッと読んだ。2周目は、模擬試験をやったあとに復習として、重点的に読み込みました。3周目は試験受ける前に全体的にサラッと読み込んだ。

www.kinokuniya.co.jp

2. GCPGoogle Cloud Associate Cloud Engineer模擬試験問題集(4回分200問)

模擬試験を受けて、不正解ばかりだった。わからない専門用語だけを押さえて、メモに特徴をまとめていた。最終的には、95%の得点率になるところまで行って、4周しました。

https://www.udemy.com/course/gcpgoogle-cloud4200-y/

結果

タイトルにもありますが、無事合格しました。知識つけることに注力してたので、Courseraで無料のハンズオンを使って、実体を理解していきたいと思ってます。それが終われば、 Professional Cloud DevOps Engineerをチャレンジしていこうかな。

www.coursera.org

「技術書」の読書術を読んだ個人的感想

なぜこの本を読もうと思ったか

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だったり、技術スキルもいい塩梅で勉強した気がする。あれこれ、多方面に手を出さず、必要最低限の領域に対して、勉強するスキル?考えた方も大切だなと思った。これは過去これまで勉強したり、経験で得たものが日常的に理解できるようになったという理由もあるかもしれない。

aki5151.hateblo.jp

あとは英語...君はもうあれだよね...癖強いよね...。スピーキング能力に関してはやり続けるしかないので、留学しとけばなという後悔もあるが、後悔しても仕方ないので、継続的スピーキング改善していこうと心のすみっちょに置いておこう。

プライベート

今年からゴルフを始めるようになり、運動不足気味になっていたので、習慣的に練習していい運動不足解消になったと思う。

草野球では、ようやく肩が治り、6回9失点10奪三振3四球ぐらいでひどい結果になった。社会人以降まともに投げれた時がなかったが、ようやくいい整体と出会えて、肩回りの硬さをほぐすアプローチが取れたのが良かった。

ソフトボールでは、7本ホームラン打てた。来年はチームでホームラン数、打率1位になれるよう思考錯誤していきたいな。

終わり

今年で30歳になり、体力の劣ろえが非常に気になり始めたが、来年も頑張っていこう!! (夜型のはずが、眠すぎる)。年末休暇は「LeanとDevOpsの科学」と「継続デリバリーのソフトウェア工学」読破すっぞ。

www.amazon.co.jp

books.rakuten.co.jp

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時間程度を勉強しました。日本語翻訳がないので、英語字幕にして学んでました。

www.udemy.com

9月からも、同じく週2/3日に1時間程度を公式の練習問題を解いては、内容を覚えていた。あとは、公式からキーワードリストが公開されているので、その内容と関係性など覚えました。

ちなみに、以下のガイドブックが公式のガイドブックになっています。

www.amazon.co.jp

受験方法

公式サイトから購入した後に、メールが来ます。受信メールに記載されているURLを使えば、24時間いつでもオンラインで受験できます。受験するにあたって、顔写真付き身分証明証の準備とカメラ付きPCを準備して、試験を開始します。ビデオ録画になるので、試験管とのやりとりはなかったです。

結果

公式の練習問題以外は、情報が全くないので、恐る恐る受験しました。結果は、68%(27/40)のスコアでした。あと1問間違えてたらアウトでした。

感想

DevOpsでよく聞くアジャイル、リーン、デプロイメントなどとは何か、これらによって、何が期待できるかなど学べてた気がする。DevOpsを実践するにあたって、ビジネスと組織にどのような影響を与えるか、期待ができるかなど学びたい初学者向きに試験だと思います。

AWS/GCP/Azureなどのサービスを使って、実践的なスキルをつけたい方は各クラウドベンダーの試験を受けた方がいいかなと思います。

気が向いたら、上位のDevOps Professionalも勉強して、取ってみようかなと思います。(年末以降...今年はもう遊ぼう

30代直前になって

「アラサー」が近づいてくると冗談交じりで話していた20代が終わり、本格的に30代になる直前まで迎えてしまった。 社会人になって、夢にも思わなかった関東に出てきて、田舎が恋しいが、なんとかやれてこれた。 就活でも、仕事でも、英語でも心が幾度かねじ曲がったが、そう捨てた物でもないと思えてきた。 ここ数年は、仕事と勉強(特にコンテナ、k8s)に集中してたため、体重も10kg増え、体力もなくなってきた。 しばらくは、野球、ソフトボール、最近始めたゴルフで健康を取り戻そうと思う。

追伸

体力なくなると、集中力もなくなるし、お酒も飲めなくなる。がんばろう、おじさん。

閉域環境のラズパイ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

参照

Rancher Docs: Air-Gap Install

https://github.com/k3s-io/k3s/releases