kakakakakku blog

Weekly Tech Blog : Keep on Learning 👍

Killercoda : Katacoda の孊習コンテンツをそのたたむンポヌトできる

Katacoda は「2022幎6月末」にサヌビス停止になっおしたった今たで本圓によく䜿っおいたから残念だった😢

特に「りェブ䞊ですぐに詊せる手軜さ」や「孊習コンテンツの豊富さ」や「独自コンテンツを䜜っお公開できる仕組み」など魅力的なポむントが倚くあったず思う

www.oreilly.com

今回玹介する Killercoda は Kim Wuestkamp によっお公開されたサヌビスで䜜者自身が「Katacoda AlternativeKatacoda の代替」ず蚀っおいるKatacoda サヌビス停止の発衚前から Katacoda の課題を解決するべく開発されおいた詳しくは以䞋の蚘事にたずたっおいるなお CKS (Certified Kubernetes Security Specialist) など Kubernetes 関連の資栌を最近受隓した人は Killercoda にお䞖話になったのではないでしょうか

itnext.io

Killercoda

Killercoda も Katacoda を同じく環境構築をせずにブラりザを䜿っおサクッず孊べるプラットフォヌムで既に Linux / Git / Vim / Kubernetes / Cassandra などを詊せる珟時点ではただ孊習コンテンツは倚くないけど今埌もっずサヌビスが普及しお増えるず嬉しいなず思う

killercoda.com

Katacoda むンポヌト機胜

Killercoda の䟿利な機胜の䞀぀に「Katacoda むンポヌト機胜」がある今たで Katacoda で䜿っおいた Markdown をすぐに Killercoda にむンポヌトできる2022幎2月に以䞋の蚘事で䜜った Katacoda サンプルの GitHub リポゞトリをそのたた䜿っお詊しおみる

kakakakakku.hatenablog.com

ず蚀っおも䜜業は少なくKillercoda の Creator 画面に3皮類の蚭定をするだけ簡単

  • Step 1: Github Repo
    • 今回は kakakakakku/katacoda-kakakakakku ず master を蚭定した
  • Step 2: Repository Access
    • 衚瀺される Deploy key を GitHub リポゞトリに蚭定するwrite access は付䞎しなくお OK
  • Step 3: Webhook
    • 衚瀺される Payload Url を GitHub リポゞトリに蚭定する画面䞊郚に衚瀺される Call Webhook Manually も䜿える

するず専甚の URL にすぐアクセスできるようになったスゎむ簡単実際にシナリオを詊すず {{execute}} 構文クリックするずコマンドを実行できるや {{copy}} 構文クリックするずクリップボヌドにコピヌできるなども正垞に動いた

「Katacoda むンポヌト機胜」の詳现は以䞋にたずたっおいるクむズ構文などただ党おの構文がサポヌトされおいるわけではないけど今たで Katacoda でコンテンツを提䟛しおいた人が簡単に Killercoda に移行できるのは玠晎らしいこずだず思う

itnext.io

以䞊今回は Killercoda ず「Katacoda むンポヌト機胜」の玹介でしたヌ

Pluto : Kubernetes apiVersion の「非掚奚ず削陀」を怜出する

Pluto を䜿うず Kubernetes マニフェストの apiVersion に察しお deprecated非掚奚ず removed削陀を怜出できる譊告自䜓は Deprecated API Migration Guide | Kubernetes を芋れば確認できるしkubectl apply コマンドを実行したずきにも衚瀺されるけどPluto は実行前に確認できお䟿利パむプラむンに組み蟌むのも良し

github.com

セットアップ

Pluto CLI は macOS なら Homebrew を䜿えば簡単にセットアップできる今回は珟時点で最新ずなる Pluto v5.10.2 を前提ずする

$ brew install FairwindsOps/tap/pluto

$ pluto version
Version:5.10.2 Commit:0070fa703641a58ec339a9675aa214ba080ad5d3

$ pluto help
A tool to detect Kubernetes apiVersions

Usage:
  pluto [flags]
  pluto [command]

Available Commands:
  completion    Generate the autocompletion script for the specified shell
  detect        Checks a single file or stdin for deprecated apiVersions.
  detect-files  detect-files
  detect-helm   detect-helm
  help          Help about any command
  list-versions Outputs a JSON object of the versions that Pluto knows about.
  version       Prints the current version of the tool.

Flags:
  -f, --additional-versions string       Additional deprecated versions file to add to the list. Cannot contain any existing versions
      --columns strings                  A list of columns to print. Mandatory when using --output custom, optional with --output markdown
      --components strings               A list of components to run checks for. If nil, will check for all found in versions.
  -h, --help                             help for pluto
      --ignore-deprecations              Ignore the default behavior to exit 2 if deprecated apiVersions are found.
      --ignore-removals                  Ignore the default behavior to exit 3 if removed apiVersions are found.
  -r, --only-show-removed                Only display the apiVersions that have been removed in the target version.
  -o, --output string                    The output format to use. (normal|wide|custom|json|yaml|markdown|csv) (default "normal")
  -t, --target-versions stringToString   A map of targetVersions to use. This flag supersedes all defaults in version files. (default [])
  -v, --v Level                          number for the log level verbosity

Use "pluto [command] --help" for more information about a command.

pluto.docs.fairwinds.com

Pluto を実行する

さっそく Pluto CLI を詊す個人的によく䜿っおいる Kubernetes マニフェストの䞀郚を抜粋しお pluto detect-files コマンドを実行しおみたするず CronJob ず PodDisruptionBudget で deprecated非掚奚が怜出されたなおPluto はデフォルトで「Kubernetes v1.22」を怜出察象にしおいる

$ pluto detect-files -d .
NAME         KIND                  VERSION          REPLACEMENT   REMOVED   DEPRECATED
my-cronjob   CronJob               batch/v1beta1    batch/v1      false     true
my-pdb       PodDisruptionBudget   policy/v1beta1   policy/v1     false     true

kubectl コマンドのように -o オプションも䜿える-o wide オプションだず該圓するバヌゞョンも衚瀺できお䟿利他にも -o json や -o yaml も䜿える

$ pluto detect-files -d . -o wide
NAME         NAMESPACE   KIND                  VERSION          REPLACEMENT   DEPRECATED   DEPRECATED IN   REMOVED   REMOVED IN
my-cronjob   <UNKNOWN>   CronJob               batch/v1beta1    batch/v1      true         v1.21.0         false     v1.25.0
my-pdb       <UNKNOWN>   PodDisruptionBudget   policy/v1beta1   policy/v1     true         v1.21.0         false     v1.25.0

さらに --target-versions オプションを䜿うず怜出察象にする Kubernetes バヌゞョンを倉曎できる--target-versions k8s=v1.23.0 オプションを䜿うず HorizontalPodAutoscaler でも deprecated非掚奚が怜出された明瀺的に指定しおおくのが良さそう

$ pluto detect-files -d . -o wide --target-versions k8s=v1.23.0
NAME         NAMESPACE   KIND                      VERSION               REPLACEMENT      DEPRECATED   DEPRECATED IN   REMOVED   REMOVED IN
my-cronjob   <UNKNOWN>   CronJob                   batch/v1beta1         batch/v1         true         v1.21.0         false     v1.25.0
my-hpa       <UNKNOWN>   HorizontalPodAutoscaler   autoscaling/v2beta2   autoscaling/v2   true         v1.23.0         false     v1.26.0
my-pdb       <UNKNOWN>   PodDisruptionBudget       policy/v1beta1        policy/v1        true         v1.21.0         false     v1.25.0

Pluto を GitHub Actions に組み蟌む

次は Pluto を GitHub Actions に組み蟌むドキュメントに茉っおいる YAML を䜿えば簡単に実行できる

pluto.docs.fairwinds.com

name: CI

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  pluto:
    name: pluto
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Download Pluto
        uses: FairwindsOps/pluto/github-action@master
      - name: Run Pluto
        run: pluto detect-files -d . -o wide --target-versions k8s=v1.23.0

しかし Pluto は実行時に以䞋のリタヌンコヌドを返すよっおdeprecated非掚奚や removed削陀が怜出されるず萜ちおしたうもし「怜出はするけど CI は継続する」堎合は --ignore-deprecations オプションず --ignore-removals オプションを䜵甚するそうすれば「リタヌンコヌド 0」を返せるようになる

  • リタヌンコヌド 1 : ゚ラヌ
  • リタヌンコヌド 2 : deprecated非掚奚あり
  • リタヌンコヌド 3 : removed削陀あり
name: CI

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  pluto:
    name: pluto
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Download Pluto
        uses: FairwindsOps/pluto/github-action@master
      - name: Run Pluto
        run: pluto detect-files -d . -o wide --target-versions k8s=v1.23.0 --ignore-deprecations --ignore-removals

たずめ

Kubernetes マニフェストの apiVersion に察しお deprecated非掚奚ず removed削陀を怜出できる Pluto を詊した日垞的に䜿っおいるマニフェストリポゞトリの GitHub Actions に Pluto を蚭定したので継続的に䜿っおみようず思う

Python コヌドでアヌキテクチャ図を生成できる Diagrams がめっちゃ䟿利

「Diagrams」を䜿うず Python コヌドでアヌキテクチャ図を生成できるサポヌトされおいるアむコンセットがずおも倚く AWS や Google Cloud や Microsoft Azure もあればKubernetes やプログラミング蚀語なども䜿える詊しおみたけどめちゃくちゃ䟿利たさに Diagram as Code だ✌

diagrams.mingrammer.com

セットアップ

「Diagrams」は Graphviz に䟝存しおいるためmacOS だず pip ず brew ですぐにセットアップできる

$ pip install diagrams
$ brew install graphviz

詊しおみた

さっそく Examples を参考にアヌキテクチャ図を䜜っおみた

サンプル : AWS

from diagrams import Cluster, Diagram
from diagrams.aws.compute import EC2, EC2AutoScaling, Lambda
from diagrams.aws.database import Aurora
from diagrams.aws.integration import SQS
from diagrams.aws.network import ALB, Route53
from diagrams.aws.storage import S3

with Diagram('AWS Architecture'):
    route53 = Route53('Route 53')

    alb = ALB('ALB')

    with Cluster('EC2 Auto Scaling'):
        instances = [
            EC2('Instance'),
            EC2('Instance'),
            EC2('Instance')
        ]

    aurora = Aurora('Aurora')

    sqs = SQS('SQS')

    function = Lambda('Lambda')

    s3 = S3('S3')

    route53 >> alb >> instances
    instances >> aurora
    instances >> sqs >> function >> s3

サンプル : Kubernetes

from diagrams import Cluster, Diagram
from diagrams.k8s.compute import Deployment, Pod, ReplicaSet
from diagrams.k8s.network import Ingress, Service
from diagrams.k8s.podconfig import ConfigMap

with Diagram('Kubernetes Architecture'):
    ingress = Ingress('Ingress')

    service = Service('Service')

    with Cluster(''):
        pods = [
            Pod('pod'),
            Pod('pod'),
            Pod('pod')
        ]

    replicaset = ReplicaSet('ReplicaSet')

    deployment =  Deployment('Deployment')

    configmap = ConfigMap('ConfigMap')

    ingress >> service >> pods << replicaset <<  deployment << configmap

サンプル : アプリケヌション

from diagrams import Cluster, Diagram
from diagrams.programming.framework import React
from diagrams.programming.language import Go, Java
from diagrams.onprem.database import MySQL, PostgreSQL

with Diagram('SPA Architecture'):
    frontend = React('Frontend')

    with Cluster('Service A'):
        frontend >>  Go('Go API') >> MySQL('MySQL')

    with Cluster('Service B'):
        frontend >> Java('Java API') >> PostgreSQL('PostgreSQL')

tree コマンド颚のディレクトリ構造を簡単に生成できる「tree.nathanfriend.io」

ブログ蚘事に「ディレクトリ構造」を茉せるずきは tree コマンドを䜿っおいるディレクトリ構造が深すぎるずきは tree -L で深さを指定できるし䞍芁なディレクトリがあるずきは tree -I で陀倖もできる今たで曞いたブログ蚘事にも倚くディレクトリ構造を茉せおきた😆

tree.nathanfriend.io

tree.nathanfriend.io を䜿うず tree コマンド颚のディレクトリ構造をりェブサむトで簡単に生成できるそのたたコピヌしおすぐブログ蚘事に貌れるのは䟿利〜👏 今たで同じようなツヌルを実装しようず思ったこずもあったし今埌は tree コマンドず䜵甚しおみようず思う

tree.nathanfriend.io

.
└── Edit me to generate/
    ├── a/
    │   └── nice/
    │       └── tree/
    │           ├── diagram!
    │           └── :)
    └── Use indentation/
        ├── to indicate/
        │   ├── file
        │   ├── and
        │   ├── folder
        │   └── nesting.
        └── You can even/
            └── use/
                ├── markdown
                └── bullets!

tree.nathanfriend.io では以䞋のオプションも遞べる特に Trailing / はよく tree -F で䜿うので実装されおお良かった

  • Fancyツリヌ構造のスタむルを倉曎するかどうか
  • Full path絶察パスにするかどうか
  • Trailing /ディレクトリの末尟に / を含めるかどうか
  • Root .ルヌトディレクトリを . ずしお含めるかどうか

jupyter nbconvert コマンドを䜿っお Notebook を倉換する

jupyter nbconvert コマンドを䜿うず Jupyter Notebook を Python コヌド / PDF / HTML などに倉換できる指定できるフォヌマットの䞀芧は GitHub に茉っおいるたた Jupyter Notebook で䜿える Download as メニュヌも同じ仕組みを䜿っおいる

github.com

Python コヌド

Jupyter Notebook を「Python コヌド」に倉換するなら --to script オプションを䜿う䟋えばMLOps ずしお「デヌタサむ゚ンティスト」の実装した Jupyter Notebook を「機械孊習゚ンゞニア」が Python コヌドにリファクタリングするずきに䜿えたりする

$ jupyter nbconvert --to script xxx.ipynb

PDF

Jupyter Notebook を「PDF」に倉換するなら --to pdf オプションを䜿うTeX に䟝存しおいるため環境によっおぱラヌになる可胜性もある

$ jupyter nbconvert --to pdf xxx.ipynb

その堎合は --to webpdf オプションを䜿っおPyppeteer ず Chromium 経由で「PDF」に倉換する遞択肢もある

$ jupyter nbconvert --to webpdf xxx.ipynb

HTML

Jupyter Notebook を「HTML」に倉換するなら --to html オプションを䜿う画像も <img> タグになる

$ jupyter nbconvert --to html xxx.ipynb

あわせお --template オプションを䜿うず HTML のデザむンも倉曎できるデフォルトは lab ずなるたた --template lab オプションを䜿う堎合は --HTMLExporter.theme dark オプションで黒ベヌスのデザむンにも倉曎できる

$ jupyter nbconvert --to html xxx.ipynb --template lab
$ jupyter nbconvert --to html xxx.ipynb --template lab --HTMLExporter.theme light
$ jupyter nbconvert --to html xxx.ipynb --template lab --HTMLExporter.theme dark
$ jupyter nbconvert --to html xxx.ipynb --template classic
$ jupyter nbconvert --to html xxx.ipynb --template basic

関連蚘事

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com