GeekFactory

int128.hatenablog.com

Read dynamic type values from YAML in Golang

GolangでYAMLを読み込む際、要素の型が実行時に決まる場合を考えます。例えば、以下のYAMLでは values で数値、文字列、マップの値が列挙されています。 values: - 100 - foo - key: value このようなYAMLを読み込む場合、型宣言を interface{} にすると実行…

kubectl getでカスタムカラムを表示する

kubectl getはデフォルトでは以下のカラムを表示するが、どのカラムを表示するかはオプションで変更できる。 % kubectl get po --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE 特定のカラムを表示するには -o custom-columns オプションを渡せ…

Upgrade to Kubernetes 1.9 using kops

個人用のKubernetesクラスタを1.9.3に更新したのでログを残します。 % kops version Version 1.9.0 kops upgrade cluster コマンドでS3の構成情報を更新します。 % kops upgrade cluster Using cluster from kubectl context: hello.k8s.local ITEM PROPERTY…

AWS CodeBuildとJenkinsの連携

TL;DR AWS CodeBuildとJenkinsを連携させると、これまでJenkins Agentで実行していたビルド処理をAWS CodeBuildに置き換えることができます。以下のメリットがあります。 AWS CodeBuildは無限に*1スケールするので、ビルドキューの待ち行列がなくなる ビルド…

AWS CodeBuildとGitBucketの連携

TL;DR GitBucketはGitHub API互換なので、GitHub Enterpriseとして振る舞うことができる。 AWS CodeBuildはGitHub Enterpriseに対応している。 CodeBuildからGitBucketにgit cloneしてビルドを実行できる。 今のところWebhookは使えない。 Getting Started G…

新しい技術を学ぶ時のアプローチ

新しい技術を学ぶ時にどのようなアプローチを踏むことが多いのか書き出してみました。具体的には、新しい言語、フレームワーク、インフラ、アーキテクチャ、プロセス、考え方などを学ぶことを考えます。 名前を知る(ポータル、SNS、Podcast等) 特徴を知る…

GradleからNexusに成果物を公開する

TL;DR Gradle 4, Nexus 3を前提とする。 Gradleに標準で含まれる maven-publish プラグインを利用してNexusに成果物を公開できる。追加のプラグインは必要ない。 Gradleの repositories ブロックでNexusのリポジトリURLを指定する。成果物の公開、取得ともに…

特定URLへのアクセスを契機としたHTTPサーバのGraceful Shutdown

Goで特定のURLへのアクセス(例:GET /shutdown)を受けたらHTTPサーバを停止するにはどうすればよいか考えてみました。 HTTPサーバを停止する http.Server にはGraceful Shutdownを行う Shutdown メソッドがあります。/shutdown へのリクエストを受けた契機…

Visual Studio Code on Windows Subsystem for Linux

wsl

TL;DR Windows 10 build 17120から、Visual Studio Code for Linux(vscode)がWindows Subsystem for Linux(WSL)で動くようになります。 Windows 10 Build 17120のWSL (Debian)でVisual Studio Codeが動いた!うれしい!— int128 (@int128) 2018年3月20日…

kubeloginコマンドを利用してOpenID ConnectでKubernetesにアクセスする

TL;DR Kubernetesの認証はクライアント証明書やID/パスワードだけでなく、OpenID Connectに対応している。 RBACを設定することで、ユーザやグループによるアクセス制御ができる。 以下の設定が必要になる。 Keycloak(OpenID Connect IdP) kube-apiserver(…

KeycloakのOpenID ConnectでKubernetes Dashboardにアクセスする

TL;DR Keycloakはオープンソースの統合ID管理ツールでOpenID ConnectやSAMLに対応している。 Kubernetes DashboardはOpenID ConnectのIDトークンによる認証に対応している。 RBACを設定することで、ユーザやグループによるアクセス制御ができる。 以下の設定…

Gradle Swagger Generator PluginがSwagger UI 3に対応

Gradle Swagger Generator Plugin 2.10.0をリリースしました。 github.com 新しいリリースではSwagger UI 3に対応しました。Swagger UI 3になってから使い勝手が大きく改善されています。 このプラグインを利用すると、下記のようなビルドスクリプトを書くだ…

Helm ChartsをGitHub Pagesで公開する

KubernetesではHelmというパッケージマネージャが広く使われています。HelmではChartという単位でパッケージを管理します。有名なソフトウェアであればOfficial Chartsが公開されていますが、場合によっては自分で書いたChartを公開したいこともあるでしょう…

JIRAの更新をSlackやMattermostに通知する

JIRAの更新をSlackやMattermostに通知するBOTを作りました。 このBOTは実際にお仕事で使っていて、いい感じの粒度で通知されるように改善を重ねています。 Dockerで簡単に実行できます。 docker run --rm -p 3000:3000 \ -e SLACK_WEBHOOK=https://hooks.sla…

EBS volume type standard not working on Kubernetes

The EBS volume type standard seems not working as a storage class on Kubernetes. Reproduce the issue Adding the following storage class: kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: standard labels: k8s-addon: storage-a…

Prometheus/GrafanaでPersistent Volumesの空き容量を取得する

TL;DR KubernetesのPersistent Volumesの容量をPrometheusで取得するには以下のMetricsを使用する。 kubelet_volume_stats_available_bytes (使用可能バイト数) kubelet_volume_stats_used_bytes (使用済みバイト数) kubelet_volume_stats_capacity_byte…

Keycloakでユーザを一括追加するツールを作った

Keycloakにユーザを一括追加するツール Keycloak Bulk を作りました。 Keycloakで多数のユーザを追加したい場合、一人ずつ手作業で登録する必要があります。JSONでユーザリストを書けばインポートできるようですが、やや複雑な作業が必要になります。使いや…

vscodeでWSLのnode.jsをデバッグ実行する

Visual Studio Code(vscode)はnode.jsのデバッグに対応していますが、Windows Subsystem for Linux(WSL)のnode.jsも利用できるようです。 debugging Node.js in the Linux subsystem on Windows: If you want to run Node.js in the Linux subsystem on …

kopsでルートボリュームタイプにstandardを指定できるようになった

kopsではEC2のルートボリュームに割り当てるボリュームタイプに gp2 か io1 しか指定できない問題がありました。検証用途では standard で十分なので、standard も指定できるように入力値チェックを修正するPRを送りました。 github.com 以下のようにインス…

spring.config.locationを複数指定した場合の優先順位

Spring Bootで --spring.config.location に複数のプロパティファイル(またはYAMLファイル)を指定した場合の優先順位を調べてみました。 TL;DR --spring.config.location にはカンマ区切りで複数のプロパティファイルを指定できる。 後に指定したプロパテ…

Windows Subsystem for Linuxで開発環境を作る

wsl

会社ではWindowsを使う必要があるのですが、まともな開発環境を整備するためにいろいろと苦労したので知見をまとめておきます。 前提: Windows 10 プロキシなし 希望: zshを使いたい プライベートで使っているmacOSのdotfilesをそのまま使いたい gitコマン…

nextcloudとKeycloakのSAML SSO

TL;DR nextcloudはオープンソースのファイルストレージサービスです。SAML SSOに対応しています。 Keycloakはオープンソースの統合ID管理ツールです。OpenID ConnectやSAMLによる認証を提供しています。 以下の環境で確認しています。 nextcloud 12.0 Keyclo…

Deploy static site on nginx pod

滅多に変更しない静的ページを配置したい時に便利です。 apiVersion: v1 kind: ConfigMap metadata: name: landing-page data: index.html: | <html> <body> <h2>Welcome</h2> </body> </html> --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: landing-page spec: rules: - …

KeycloakのOpenID ConnectでKubernetesにアクセスする

TL;DR Kubernetesの認証はクライアント証明書やID/パスワードだけでなく、OpenID Connectに対応している。 RBACを設定することで、ユーザやグループによるアクセス制御ができる。 以下の設定が必要になる。 Keycloak(OpenID Connect IdP) kube-apiserver(…

KeycloakのSAML SSOでJIRAやConfluenceにログインする

KeycloakとJIRAやConfluenceでSAML SSOを設定する方法を説明します。KeycloakでID管理を行いながら、JIRAやConfluenceにSSOできるので便利です。 TL;DR Keycloakはオープンソースの統合ID管理ツールです。OpenID ConnectやSAMLによる認証を提供しています。…

kubectl completionの遅延実行によるzshの起動時間短縮

kubectl にはシェルの補完機能が用意されています。 .zshrc で補完機能を有効化するとzshの起動に時間がかかるため、補完機能の有効化を遅延実行するようにしてみました。 具体的には、 kubectl コマンドの初回実行時のみ source <(kubectl completion zsh) …

2017年の振り返り

2017年のアウトプットを振り返り。 ブクマとスターを合わせて多い順から。 2018年もよろしくお願いします。

Kubernetes nodesをMulti-AZからSingle-AZに移行した

kopsで運用しているKubernetes nodesをMulti-AZからSingle-AZに移行したので作業メモを残しておきます。 us-west-2b や us-west-2c にあるNodesとPersistent Volumesを us-west-2a に移行します。Masterは us-west-2a のままにします。 kops 1.8.0, Kubernet…

インターネットとVPC内部から同一FQDNでアクセス可能な構成

aws

AWSでALBを使う場合に、Security Groupでインターネットからアクセス可能なIPアドレスを制限しながら、VPC内部から同じFQDNでサービスにアクセスできるようにしたい。 TL;DR Requirements: インターネットから https://api.example.com でサービスにアクセス…

KeycloakのSAML SSOでGitLabやMattermostにログインする

KeycloakとGitLabでSAML SSOを設定する方法を説明します。ユーザ管理をKeycloakで行いながら、GitLabやMattermostにSSOできるのでとても便利です。 TL;DR Keycloakはオープンソースの統合ID管理ツールです。OpenID ConnectやSAMLによる認証を提供しています…