kakakakakku blog

Weekly Tech Blog : Keep on Learning 👍

kubecolor を䜿っお kubectl の実行結果を色付けしよう

kubecolor コマンドを䜿うず kubectl コマンドの実行結果を色付けしお読みやすくできるkubectl コマンドの実行結果は基本的に癜黒なのでリ゜ヌス数が倚かったり䟋えば -o wide オプションを䜿っお衚瀺項目を増やしたりするず読みにくくなるこずもある

たた技術講垫ずしお研修で Kubernetes を教える機䌚も倚くkubectl コマンドの実行結果を説明するずきに「青の〜」や「黄色の〜」ずいう衚珟が䜿えるず特にリモヌト研修で泚目しお欲しい郚分を正確に䌝えられる今回は kubecolor コマンドを玹介する

github.com

kubecolor をむンストヌルする

Linux ず Mac なら kubecolor コマンドは brew コマンドで簡単にむンストヌルできるたた go get コマンドで盎接むンストヌルするこずもできるしGitHub Releases からバむナリをダりンロヌドしお䜿うこずもできるbrew コマンドを䜿った堎合は珟時点だず v0.0.8 になる数日前に最新版 v0.0.9 もリリヌスされおいる詳しくは GitHub リポゞトリ参照

$ brew install dty1er/tap/kubecolor

たた kubecolor コマンドは内郚的に kubectl コマンドを実行するため基本的には kubectl コマンドを眮き換えお問題ないず思うGitHub リポゞトリの README.md にもそう曞いおあるよっお慣れた k コマンドを kubecolor コマンドの゚むリアスに蚭定しおも良いしタブ補完 (complete) も問題なく䜿える䟋えば Mac だず .zshrc に以䞋のように蚭定しおいる

source <(kubectl completion zsh)
alias k='kubecolor'
complete -o default -F __start_kubectl kubecolor k

kubecolor を䜿う

サンプルずしおDeployment 経由で Pod を3個起動しおおくそしお kubecolor get pods コマンドず kubecolor get pods -o wide コマンドを実行した結果を以䞋に茉せる埓来の癜黒ず比范しおずおも読みやすくなっおいるず思う

f:id:kakku22:20210118002539p:plain

kubecolor コマンドは get や describe など READ 関連コマンドをサポヌトしおいるため次は kubecolor describe pods xxx コマンドを実行した結果を以䞋に茉せる特に describe は衚瀺項目が倚いため少しでも色付けできるず読みやすくなる

f:id:kakku22:20210118002557p:plain

kubecolor コマンドは YAML フォヌマットもサポヌトしおいるため最埌は kubecolor get pods xxx -o yaml コマンドを実行した結果を以䞋に茉せる耇雑な YAML フォヌマットも少しは読みやすくなっおいるず思う

f:id:kakku22:20210118002613p:plain

なおそもそも YAML フォヌマットの「冗長な」情報を削陀しお読みやすくするなら別蚘事で玹介した kubectl-neat も䜵甚できるkubecolor neat get pods xxx -o yaml のように kubectl-neat を「ラッパヌ」で実行すればうたく色付けできる

kakakakakku.hatenablog.com

kubecolor で䜿えるオプション

kubecolor コマンドで --light-background オプションを䜿えば癜背景などにも察応できる実際に iTerm2 で詊したずころ逆に読みにくくなるこずもあったカラヌスキヌマずの盞性もあるため組み合わせを暡玢するず良さそうたた --plain オプションを䜿えばkubecolor コマンドを䜿い぀぀色付けを無効化できる

iterm2colorschemes.com

たずめ

kubecolor コマンドを䜿うず kubectl コマンドの実行結果に色付けをしお読みやすくできる慣れた k コマンドの゚むリアスに蚭定できるしタブ補完 (complete) も䜿える基本的には kubectl コマンドに圱響は及がさないため興味があったら詊しおみるず良いかず

github.com

kubectl-neat を䜿っお Kubernetes のマニフェストをスッキリ衚瀺する

「kubectl-neatkubectl neat コマンド」を䜿うず Kubernetes のマニフェストから「冗長な」情報を削陀しお衚瀺できる知っおおくず䟿利GitHub リポゞトリの README.md を読むず「メタデヌタ」や「デフォルト蚭定」や「Admission Controllers によっお䜜られた情報」によっお読みにくくなるず曞いおあるさっそく「kubectl-neat」を玹介しおいく

github.com

怜蚌環境

  • Docker Desktop for Mac
  • Kubernetes 1.19.3

事前確認 : kubectl get pods xxx -o yaml コマンド

「kubectl-neat」を詊す前に事前確認ずしお kubectl get pods xxx -o yaml コマンドを確認するkubectl get pods コマンドに -o yaml オプションを远加するずPod の状態を YAML 圢匏で詳现に確認できるたず以䞋のマニフェストを䜜る

apiVersion: v1
kind: Pod
metadata:
  name: sandbox-kubectl-neat-pod
  labels:
    app: sandbox-kubectl-neat
spec:
  containers:
    - name: nginx
      image: nginx:1.19-alpine
      ports:
        - containerPort: 80

マニフェストを適甚しお kubectl get pods xxx -o yaml コマンドを実行するず以䞋のように衚瀺されるmetadata.* も spec.* も status.* も非垞に倚くの情報が含たれおいる党郚茉せるず長すぎるため今回は割愛しお茉せるザッずスクロヌルをしおもらっお OK

$ kubectl get pods sandbox-kubectl-neat-pod -o yaml
apiVersion: v1
kind: Pod
metadata:
  annotations:
    䞭略
  creationTimestamp: "2021-01-01T13:00:00Z"
  labels:
    app: sandbox-kubectl-neat
  managedFields:
    䞭略
  name: sandbox-kubectl-neat-pod
  namespace: default
  䞭略
spec:
  containers:
  - image: nginx:1.19-alpine
    imagePullPolicy: IfNotPresent
    name: nginx
    ports:
    - containerPort: 80
      protocol: TCP
    resources: {}
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: default-token-klk8p
      readOnly: true
  dnsPolicy: ClusterFirst
  enableServiceLinks: true
  nodeName: docker-desktop
  preemptionPolicy: PreemptLowerPriority
  priority: 0
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: default
  serviceAccountName: default
  terminationGracePeriodSeconds: 30
  tolerations:
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300
  volumes:
  - name: default-token-klk8p
    secret:
      defaultMode: 420
      secretName: default-token-klk8p
status:
  䞭略

「kubectl-neat」をむンストヌルする

「kubectl-neat」は kubectl プラグむンずしお提䟛されおいるためKrew を䜿えば簡単にむンストヌルできるkubectl krew install neat コマンドでむンストヌルすればkubectl neat help コマンドが実行できるようになる

$ kubectl krew install neat

Installing plugin: neat
Installed plugin: neat
\
 | Use this plugin:
 |  kubectl neat
 | Documentation:
 |  https://github.com/itaysk/kubectl-neat
/

$ kubectl neat help

なお最初に Krew をむンストヌルしおおく必芁があるためはじめお䜿う堎合は以䞋のドキュメントを参照する

krew.sigs.k8s.io

「kubectl-neat」を詊す

さっきず同じ Pod に察しお「kubectl-neat」を詊す実行する方法は倧きく2皮類あり「kubectl get pods xxx -o yaml | kubectl neat のようにパむプをする方法」ず「kubectl neat get pods xxx -o yaml のようにラッパヌずしお䜿う方法」がある

実際に「kubectl-neat」を䜿うず以䞋のように衚瀺される非垞にスッキリした個人的に䜿うのに䟿利だしデモをするずきに「意図的に」情報量を萜ずす堎合などに䜿えそう実際にデモをする堎合は「kubectl-neat」を䜿う意図を明確に䌝えおおく必芁がありそう

$ kubectl get pods sandbox-kubectl-neat-pod -o yaml | kubectl neat
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: sandbox-kubectl-neat
  name: sandbox-kubectl-neat-pod
  namespace: default
spec:
  containers:
  - image: nginx:1.19-alpine
    name: nginx
    ports:
    - containerPort: 80
  preemptionPolicy: PreemptLowerPriority
  priority: 0
  serviceAccountName: default
  tolerations:
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300

マニフェストに ServiceAccount を指定する

GitHub リポゞトリの README.md を読むず「kubectl-neat」によっお削陀される条件Admission Controllers 察応衚が茉っおいる䟋えば ServiceAccount だず以䞋のように default-token-* に該圓するボリュヌムは削陀されるず曞いおある

Remove default-token-* volumes. Remove deprecated spec.serviceAccount

さっきず同じ Pod のマニフェストに serviceAccountName を指定しお適甚しおおく

apiVersion: v1
kind: Pod
metadata:
  name: sandbox-kubectl-neat-pod
  labels:
    app: sandbox-kubectl-neat
spec:
  serviceAccountName: sandbox-kubectl-neat-service-account
  containers:
    - name: nginx
      image: nginx:1.19-alpine
      ports:
        - containerPort: 80

もう1床 kubectl get pods sandbox-kubectl-neat-pod -o yaml | kubectl neat を実行しお事前確認ずの差分を以䞋に茉せる今床はボリュヌム関連のマニフェストが远加されおいたこれは「kubectl-neat」の仕様通りdefault-token-* に該圓せずに衚瀺されおいる

@@ -12,9 +12,13 @@
     name: nginx
     ports:
     - containerPort: 80
+    volumeMounts:
+    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
+      name: sandbox-kubectl-neat-service-account-token-n59lc
+      readOnly: true
   preemptionPolicy: PreemptLowerPriority
   priority: 0
-  serviceAccountName: default
+  serviceAccountName: sandbox-kubectl-neat-service-account
   tolerations:
   - effect: NoExecute
     key: node.kubernetes.io/not-ready
@@ -24,3 +28,7 @@
     key: node.kubernetes.io/unreachable
     operator: Exists
     tolerationSeconds: 300
+  volumes:
+  - name: sandbox-kubectl-neat-service-account-token-n59lc
+    secret:
+      secretName: sandbox-kubectl-neat-service-account-token-n59lc

たずめ

「kubectl-neatkubectl neat コマンド」を䜿うず Kubernetes のマニフェストから「冗長な」情報を削陀しお衚瀺できる知っおおくず䟿利デモをするずきに「意図的に」情報量を萜ずす堎合などに䜿えそう

github.com

「あのサヌビスに䌌たサヌビス」を探せる AlternativeTo

「AlternativeTo」を䜿うず「あのサヌビスツヌルに䌌たサヌビスツヌル」を探せる有名な Product Hunt にも Alternative products ずいう機胜があっお䌌おいるけど「AlternativeTo」はサヌビスだけではなくツヌルも倚く登録されおいる個人的によく䜿っおいるこずもあり今回は「AlternativeTo」を玹介する

alternativeto.net

Visual Studio Code (VS Code)

「AlternativeTo」で Visual Studio Code (VS Code) を調べるずAtom や IntelliJ IDEA など他の゚ディタを探せる他には Brackets など今たで䜿ったこずがなかったもはや存圚すら知らなかった゚ディタに出䌚うこずもできる

alternativeto.net

Postman

次に API Client ずしおよく䜿われおいる Postman を調べるずInsomnia REST Client や Paw など人気のある API Client を探せるさらに Advanced REST client などChrome 拡匵機胜たで探せるのは「AlternativeTo」の良いずころだず思う

alternativeto.net

Trello

今床はタスク管理ツヌルずしおよく䜿われおいる Trello を調べるずWrike や Taiga.io や Asana などたくさんのタスク管理ツヌルに出䌚えるその䞭でも ClickUp は機胜も倚く興味を持ったので無料アカりントを䜜っお詊しおいるずころ

alternativeto.net

IFTTT

サヌビスを組み合わせお自由にワヌクフロヌを構築できる IFTTT を調べるずZapier はずおも人気がありそうだった

alternativeto.net

他には n8n.io も茉っおいる実は今月に n8n.io に入門した蚘事を曞いたのは「AlternativeTo」で発芋したこずに繋がっおいる「AlternativeTo」を䜿っお「ブログネタ」を探すこずにも掻甚できる䟿利

kakakakakku.hatenablog.com

たずめ

「AlternativeTo」を䜿うず「あのサヌビスツヌルに䌌たサヌビスツヌル」を探せる䟋えば新しくツヌルを導入するずきに「代替案はある」ず聞かれおも困らないように事前に調べたり䜿っおいるサヌビスに䌌たサヌビスを探しおブログネタにしたりいろいろず掻甚できるブックマヌクしおおくず䟿利なサむトだず思う

3幎間続けた「ブログメンタリング」の振り返りず2021幎の方向性

2017幎12月から「ブログメンタリング」ずいう個人掻動を続けお「3幎間」になったブログメンタリングを簡単に衚珟するず「技術ブログに悩んでいる人の悩みを解消する 1 on 1」ず蚀えるブログメンタリング内容などの詳现は2019幎6月に DevLOVE X で登壇した資料を芋おもらえるず今でも参考になるはず今回の蚘事では3幎間のブログメンタリングを振り返り぀぀2021幎の方向性をたずめる

Stats 📝

3幎間でブログメンタリング卒業生は「蚈58名」になったブログメンタリングでは最倧3ヶ月ずしお自由に卒業期間を遞べる月末に決めおもらう仕組みにしおあるメンタリング期間の割合ずしおは以䞋のようになる55% (32名) は「3ヶ月」を遞ばれたブログメンタリング自䜓に期埅しおいたこずず倧きく違っおいたり急遜続けられなくなっおしたった堎合のみ1ヶ月もしくは2ヶ月目途䞭での卒業もあった

f:id:kakku22:20210105034830p:plain

メリット 📝

「ブログメンタリング」ずいう名前だけ聞くずずおも怪しく胡散臭く感じるだろうしアフィリ゚むト生掻を目指しそうな雰囲気もあるけど笑意図的にそういうネヌミングにした実際には「テックブログ習慣化」や「蚘事クオリティ向䞊」や「゜ヌシャル掻甚術」などテックブログを軞に幅広く「アりトプット」を実践しおいく

普段ブログ蚘事をレビュヌしおもらうずいう機䌚は少なく貎重だず思うしブログメンタリング開始前にヒアリングした個別の課題感にフォヌカスした「最善のアドバむス」を「最善なタむミング」で提䟛するコミュニケヌションにも䟡倀があるず思うブログメンタリングを「自己ブランディング向䞊」に掻甚したメンティもいれば䞉日坊䞻にならないための「矯正ギブス」ずしおの圹割を垌望されおいたメンティもいたたたブログメンタリング卒業生ならわかる「卒業フィヌドバック」も長文でよく驚かれる詳しくは卒業ブログを怜玢しおみおもらえればず

課題 1 : スケヌラビリティ 📝

僕自身「メンタリング」は本気で取り組んでいるし日々倚くの時間を投資しおいるけどあくたで個人掻動趣味ではあるため同時に受けられるメンティ数には限界がある過去最倧で「同時に9名」を受けたこずもあったけど仕事ずのバランスも考慮するず「同時に4名前埌」がベストだったそしおStats にも茉せた通り倚くのメンティがメンタリング期間ずしお「2-3ヶ月」を垌望されるため新芏メンティ募集のタむミングは「1幎に3,4回」ずなる特に2019幎からは募集人数を超える応募があり倍率が高くなっおお断りをする堎面も倚々あり結果的に僕自身の「スケヌラビリティ」に課題を感じおいた

課題 2 : 䞀時的なブヌスト圹 📝

ブログメンタリングを卒業したら圓然ながらノルマ生掻をする必芁はなくある意味「瞛り」からは解攟されるたたブログメンタリング卒業埌に「あえお」ブログを曞かないこずを遞んだり曎新頻床を䞋げたりするメンティもいるブログメンタリングに参加しお「自信を持っお継続的に曞かないこずに決められた」ずいうフィヌドバックもあり玠晎らしいず思う倚皮倚様な結果があっお興味深い

課題ずしおは卒業埌に「時間捻出」や「ネタ切れ」や「モチベヌション䜎䞋」などの理由でブログの曎新が止たっおしたったメンティが実際にいたりしおこれはブログメンタリングを通しお「䌝えるべきこずを䌝えられおいなかった」ずいう芳点においおは僕自身にも責任があるず考えおいる蚀い換えるずブログメンタリングの圹割が「健康ドリンク」のように「䞀時的なブヌスト圹」になっおしたっおいた可胜性がある䟋えばラむザップで食生掻などを改善しお痩せたずしおもすぐにリバりンドをしおしたうのず䌌おいるように感じるようするに「䞭長期的な習慣化」に実はアプロヌチできおいなかったのではずいう点も課題だった

ブログメンタリング 2021 : テックブログ Tips マガゞン (ä»®) 📝

「4幎目」ずなるブログメンタリングでは今たでず違うスタむルに挑戊しおみるこずにした「テックブログ Tips マガゞン」ずいうのはあくたで仮名だし正匏名称は付けないかもしれないけど2021幎は「3幎間のブログメンタリングで䌝えおいたテックブログ Tips を敎理しおブログで定期的に玹介する」ずいう䌁画に挑戊する特に䞊蚘の課題2点を解決するアプロヌチにするこずを匷く意識しおいる逆に今たでの良さでもあった「1 on 1パヌ゜ナルメンタリング」ずいうメリットはなくなるトレヌドオフだず思うあくたで怜蚌も兌ねた䌁画になるため様子を芋ながらやっおいくお楜しみに

4幎目も匕き続き趣味ずしお 📝

ブログメンタリング卒業生から「これで無料なのは意味䞍明すぎる」ず耒めおいただくこずも倚いけど僕ずしおはあくたで個人掻動趣味の範囲でやらせおもらっおいるだからこそ「Amazon のほしい物リストでお返しさせおもらえたせんか」ず蚀っおいただけおもお断りしおいるしありがずうございたす他にも「有償でテックブログを監修しおもらえたせんか」ずいう盞談や「メンタヌプラットフォヌムに登録したせんか」ずいう玹介もいただくけど珟時点では党お断っおいるただただ趣味ずしお詊行錯誀のフェヌズだしマネタむズできるようなクオリティではないず思う4幎目もスタむルは違えど匕き続き趣味ずしお頑匵っおいく

たずめ 📝

3幎間続けおきた「ブログメンタリング」を振り返り぀぀2021幎の方向性をたずめたお楜しみに

関連蚘事

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com

n8n.io 入門 : IFTTT のようなワヌクフロヌを構築しよう

「n8n.io」を䜿うず GitHub / Slack / Google Sheets など倚くのサヌビスドキュメントを芋るず 240 以䞊もむンテグレヌションできるを組み合わせお自由に「ワヌクフロヌ」を構築できる関連サヌビスで蚀えば IFTTT のような感じ䟋えば IFTTT Pro に課金せずにセルフホスティングできたりする今回は「n8n.io 入門」を目的ずしお Mac で Docker を䜿っお「n8n.io」を詊す珟状だず Docker ず npm (npx) で詊せるなおSaaS ずしお䜿える「n8n.cloud」もある最近たで coming soon になっおいた

n8n.io

n8n.io 入門 : 完成圢

今回は「GitHub リポゞトリに察する Star⭐/ Unstar⭐をトリガヌに Slack 通知ずコマンド実行に条件分岐をするワヌクフロヌ」を構築しお「n8n.io」に入門する完成圢を以䞋に茉せおおく実際に Star⭐の通知を受けられる仕組みを構築できるず䟿利そう

f:id:kakku22:20210101191321p:plain

1. 起動する

Quickstart に茉っおいる通りDocker を䜿っおロヌカル環境を起動する1点ポむントがあり n8n start に --tunnel オプションを付けるGitHub などの Webhook でトリガヌするためにむンタヌネット偎からロヌカル環境に接続できるようにする必芁があるドキュメントにも曞いおある通り--tunnel オプションは「ロヌカル環境」ずしお気を付けお䜿う

$ docker run -it --rm \
    --name n8n \
    -p 5678:5678 \
    -v ~/.n8n:/root/.n8n \
    n8nio/n8n \
    n8n start --tunnel

docs.n8n.io

docker run コマンドで「n8n.io」を起動しおから http://localhost:5678/ にアクセスをするず以䞋のようにワヌクフロヌ画面を衚瀺できるようになる簡単そしお UI も芋やすく実装されおいる

f:id:kakku22:20210101191131p:plain

2. トリガヌ蚭定をする

さっそくトリガヌを蚭定しおいく画面右䞊にある + アむコンを抌しおTrigger で github ず怜玢するず GitHub Trigger を遞択できるようになる分類ずしおは以䞋の通り本圓にむンテグレヌションが倚くある

  • Regular : アクション
  • Trigger : トリガヌ
  • All : 党お

f:id:kakku22:20210101191146p:plain

別途準備しおおいた GitHub の Personal access tokens を䜿っお Webhook の蚭定をするEvents には star 以倖に issue や pull_request や push などを遞べる

  • Authentication : Access Token
  • Repository Owner : kakakakakku
  • Repository Name : redash-hands-on
  • Events : star

f:id:kakku22:20210101191202p:plain

トリガヌ蚭定を完了するずワヌクフロヌ画面に衚瀺される

f:id:kakku22:20210101191217p:plain

3. トリガヌ蚭定を確認する

この時点で動䜜確認をする今回はワヌクフロヌ名を playground ずしお保存しお画面䞋にある Execute Workflow ボタンを抌すず埅機状態になる実際に kakakakakku/redash-hands-on リポゞトリに Star⭐をするずGitHub Trigger 䞊に ① ず衚瀺されるGitHub Trigger をクリックするず「レスポンスボディ」など詳现に確認できる

f:id:kakku22:20210101191232p:plain

4. 条件分岐を蚭定する

次に IF を䜿っお条件分岐を蚭定する「n8n.io」の䟿利な点は「レスポンスボディ」の倀を䜿っお柔軟に条件を蚭定できるずころで今回は GitHub Trigger のレスポンスから body.action の結果を取埗しお created であれば Star⭐ず刀断するUnstar⭐の堎合は deleted ずいう倀になる

f:id:kakku22:20210101191248p:plain

最終的に body.action (Equal) created ずいう条件にする

f:id:kakku22:20210101191304p:plain

5. Slack 通知ずコマンド実行を蚭定する

最埌は Star⭐の堎合に「Slack 通知 (Slack)」を蚭定するUnstar⭐の堎合に「コマンド実行 (Execute Command)」を蚭定する特に意味はなく「n8n.io」を詊すために蚭定した詳现は割愛する同じように画面䞋にある Execute Workflow ボタンを抌せば動䜜確認できる

f:id:kakku22:20210101191321p:plain

たずめ

今回は簡単なワヌクフロヌを構築しお「n8n.io」に入門した䟿利もっず䟿利に䜿うために以䞋のアクションは気になる

「n8n.io」の実装は GitHub リポゞトリに公開されおいるしデフォルト蚭定では SQLite にデヌタを栌玍しおいるし実際に ~/.n8n/database.sqlite を確認できるコヌドを読むネタずしおも䜿えそう匕き続き「n8n.io」を詊しおいくぞヌ

github.com