progrhyme's tech blog

主にIT関連の技術メモ

お名前.comからGoogle Domainsに移行した

はじめに

これも前々からやろうと思っていたことの1つである。

お名前.comを5年ほど使っていて、実質的にはそれほど困ってはなかったのだけど、ときどきサイトを触るとUIがわかりにくくて混乱するのと、とにかくメールがたくさん届くのでちょっと嫌だなと思っていた。

そこで、去年の2月にSNSでオススメのDNSプロバイダを尋ねたところ、「Google Domainsいいですよ」という方がいたのでこちらにすることにした。

※このときは勘違いしていたかもしれないけど、お名前.comでも最初からWhois情報公開代行サービスを利用していたので、自分の住所氏名等がWhoisに公開されているということはなかった。*1

やり方

*1:何と勘違いしていたんだろう? ドメインプロテクションとかは有料みたいだけど。

続きを読む

git pull --pruneしてマージ済みのローカルブランチを削除するgitのサブコマンドを作った

むしろ、どうして今までやってなかったんだろうっていう感もあります。

branch作ってpushしてプルリクエストしてリモートでマージされたらゴミが残りますよね。 今まで何度 git fetch -p して git pull して git branch -d <手元のbranch> と打ってきたことか。

ググればワンライナーをそのままaliasしているような事例も見つかります(後掲)が、私はそこそこ(?)丁寧にシェルスクリプトで書いてみました。

使い方

使い方としては、ひとまずヘルプの表示をちょっと貼ってみます。

続きを読む

TerraformのKubernetes ProviderでK8sのリソース管理にトライ

  • はじめに
    • 環境構成
  • 手順
    • 下準備
    • terraformerによるimport→失敗
    • HCLを書いてterraform import
    • HCLを編集してリソースを更新してみる
    • リソースの名前を変えて、再作成してみる
  • 所感
  • 参考記事

はじめに

昨日の記事↓で、Kubernetesのリソース設定をTerraformで管理できそうな件について触れた。

TerraformにはKubernetesのProviderもあるので、できるというわけだ。

ググる先行者がいるので、できること自体はわかっているが、オブジェクトの削除や再作成時の動きなど気になるので、自分でも試しておくことにした。

環境構成

さっきこのブログに記事を上げたけど、昨日UbuntuデスクトップにMicrok8sを入れたので、この環境を使う。

  • Ubuntu 18.04 LTS
  • microk8s v1.18.2
  • terraformer v0.8.7
  • terraform v0.12.24
  • terraform-provider-kubernetes v1.11.2

いつもterraformのHCLを書くのにはIntelliJ IDEAを使っていたのだけど、最近Visual Studio Code拡張機能もTerraform v0.12に対応したので、今回はVS Codeを使ってみた。*1

参考: VSCodeでTerraformを書くときの設定(2019/11/07追記: HCL2対応) - Qiita

手順

続きを読む

UbuntuでKubernetesのテスト環境としてMicrok8sをセットアップした

  • はじめに
  • セットアップ手順
    • Install
    • Join the group
    • Check the status
    • Access Kubernetes
    • Deploy an app
    • Use add-ons
    • Starting and Stopping MicroK8s
  • 所感
  • 参考記事

はじめに

Ubuntu 18.04デスクトップ環境で、4/29に昔入れていたminikubeをアンインストールしてしまった(*1)のだが、また手元でさくっと試せるKubernetes環境が欲しくなった。

またMinikubeを入れてもいいのだけど、CanonicalMicrok8sというのを出しており、これが使えそうだ。
公式ドキュメントや試してみた系の記事を軽く見てみたところ、snapパッケージで簡単にインストール可能できそうだったので、こちらを入れてみることにした。

セットアップ手順

Quick start | MicroK8s に従ってセットアップしていく。

Install

続きを読む

Kubernetesのマニフェストをリポジトリ管理しつつ、リソースの削除も反映したい件

  • はじめに
    • 問題
  • 方法
    • ①labelsでバージョン管理する
    • ②kubectl apply --pruneを使う
    • ③Argo CDのAutomatic Pruningを使う
    • ④Terraformで管理する
  • 終わりに
  • 余談
  • 脚注

はじめに

最近、Kubenetesの運用管理に携わるようになりました。
マニフェスト*1)はYAMLで管理して、Gitリポジトリに入れています。
複数の環境を持つシステムにおいては、Kustomizeを使って、マニフェストをDRYに保つように努力しています。

そんなある日のこと、あるワークロードからExternalNameで参照しているServiceオブジェクトの定義を変えることになりました。

下のような変更です:

  apiVersion: v1
  kind: Service
  metadata:
-   name: my-api1
+   name: my-api2
    namespace: myapp
  spec:
    type: ExternalName
-   externalName: my-api1.example.com
+   externalName: my-api2.example.com

問題

……で、このYAMLkubectl apply で適用するわけですが、次の事実に気づきました:

  • 上のYAMLkubectl apply で適用すると、新しくmy-api2 Serviceが作られるが、 my-api1 Serviceは消えない

metadata.name を変えなければそうはならないのでしょうが、名前が実体を表していないのは気持ちが悪いので、なるべくなら変えたいところです。

そうでなくとも、並行稼働期間にmy-api2 Serviceを追加し、後からmy-api1 Serviceを削除したいと思った場合も、同じ問題が発生します。*2

つまり、マニフェストから削除しても、単に kubectl apply するだけでは削除が反映されない、ということです。

この場合の解決策は簡単で、 kubectl delete service my-api1 を叩けば話は終わりです。 実際、このときはそうしました。

しかし、例えばマニフェストをkustomizeで適用する自動化のパイプラインを組んだとき、差分に応じてこういうアドホックな処理を入れるのはつらそうだなと思いました。(まだそこまで自動化できてはいませんが。)

こういった問題の対処については、本などにもあまり載ってなさそうで、どうするのが良いのかと疑問に思いました。

そこで、自分でも少し調べつつ、とあるKubernetesのコミュニティで識者に聞いてみました。
本稿では、その回答も含めて、現在私が把握している方法を紹介します。

※公開コミュニティでの質疑内容ではありますが、どなたの回答かというのは本稿では伏せておきます。

*1:「A manifest specifies the desired state of an object that Kubernetes will maintain when you apply the manifest」 cf. https://kubernetes.io/ja/docs/reference/glossary/#term-manifest

*2:今回はどちらかといえばこれに該当していました。

続きを読む

今更だけどNeoBundleからdein.vimに乗り換えて、プラグインを6つ追加した

  • はじめに
  • 作業環境
  • dein.vimのインストール
  • vimrcの移行
  • 追加したプラグイン
    • cespare/vim-toml
    • ctrlpvim/ctrlp.vim
    • leafcage/yankround.vim
    • kana/vim-operator-user
    • kana/vim-operator-replace
    • ervandew/supertab
    • 参考記事
  • 終わりに
  • 脚注

はじめに

本当に今更である。

NeoBundledein.vimは、Vimプラグインマネージャーである。
他に有名なものでは、Vundleやvim-plugといったものがある。*1

NeoBundleはもう4年以上前に開発が停止し、dein.vimへの移行が促されている。*2

作業環境

dein.vimのインストール

https://github.com/Shougo/dein.vim#quick-start に従う。

インストール先は ~/.vim/dein とした。

curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
sh ./installer.sh ~/.vim/dein

自分はいつものVim環境を新しいPCやサーバでさっとセットアップしたいことがそこそこあるので、セットアップ用のシェルスクリプトを用意している。
今、そのスクリプトこんな感じになっている。

vimrcの移行

NeoBundle用の記述をdein.vim用に書き直す。
dein.vimではインストールするプラグインのリストや、それに付随する設定をTOML形式の別ファイルで管理することができるので、その方式を使うことにした。

具体的には、このコミットで対応した。

移行後、 'Align' プラグインで警告が出ていることにしばらく気づかず、挙動が少しおかしくなっていたが、 'vim-scripts/Align' に修正したら問題が解消した。

追加したプラグイン

続きを読む

UbuntuにHomebrewを入れてHomebrew Bundleでパッケージ管理することにした

動作環境

はじめに

tfutils/tfenvを入れようと思ったんだけど、aptやsnapでのパッケージ提供がないようなので、Linuxにも対応しているHomebrewを使うことにした。

本記事では、その実施ログを記す。

Homebrewのインストール

https://docs.brew.sh/Homebrew-on-Linux のガイドに従ってインストール。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

デフォルトで /home/linuxbrew/.linuxbrew にインストールされるようだ。 自分しか使ってないマシンだし、特にこだわらないのでこのままで。

インストールログ

% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
[sudo] パスワード:
==> This script will install:
/home/linuxbrew/.linuxbrew/bin/brew
/home/linuxbrew/.linuxbrew/share/doc/homebrew
/home/linuxbrew/.linuxbrew/share/man/man1/brew.1
/home/linuxbrew/.linuxbrew/share/zsh/site-functions/_brew
/home/linuxbrew/.linuxbrew/etc/bash_completion.d/brew
/home/linuxbrew/.linuxbrew/Homebrew
==> The following new directories will be created:
/home/linuxbrew/.linuxbrew/bin
/home/linuxbrew/.linuxbrew/etc
/home/linuxbrew/.linuxbrew/include
/home/linuxbrew/.linuxbrew/lib
/home/linuxbrew/.linuxbrew/sbin
/home/linuxbrew/.linuxbrew/share
/home/linuxbrew/.linuxbrew/var
/home/linuxbrew/.linuxbrew/opt
/home/linuxbrew/.linuxbrew/share/zsh
/home/linuxbrew/.linuxbrew/share/zsh/site-functions
/home/linuxbrew/.linuxbrew/var/homebrew
/home/linuxbrew/.linuxbrew/var/homebrew/linked
/home/linuxbrew/.linuxbrew/Cellar
/home/linuxbrew/.linuxbrew/Caskroom
/home/linuxbrew/.linuxbrew/Homebrew
/home/linuxbrew/.linuxbrew/Frameworks

Press RETURN to continue or any other key to abort
:
(略
:
Warning: /home/linuxbrew/.linuxbrew/bin is not in your PATH.
==> Installation successful!

==> Homebrew has enabled anonymous aggregate formulae and cask analytics.
Read the analytics documentation (and how to opt-out) here:
  https://docs.brew.sh/Analytics
No analytics data has been sent yet (or will be during this `install` run).

==> Homebrew is run entirely by unpaid volunteers. Please consider donating:
  https://github.com/Homebrew/brew#donations

==> Next steps:
- Run `brew help` to get started
- Further documentation:
    https://docs.brew.sh
- Install the Homebrew dependencies if you have sudo access:
  Debian, Ubuntu, etc.
    sudo apt-get install build-essential
  Fedora, Red Hat, CentOS, etc.
    sudo yum groupinstall 'Development Tools'
  See https://docs.brew.sh/linux for more information.
- Configure Homebrew in your /home/progrhyme/.zprofile by running
    echo 'eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)' >> /home/progrhyme/.zprofile
- Add Homebrew to your PATH
    eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)
- We recommend that you install GCC by running:
    brew install gcc

上のログ末尾のガイドに従い、 ~/.zshrceval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv) を足した。

Homebrew BundleでHomebrewのパッケージ管理

https://github.com/Homebrew/homebrew-bundle

Homebrewのパッケージ管理ツールはいくつかあるっぽいが、公式のこれがLinuxにも対応していたので、これを使う。

brew bundle

を初回実行するとインストールされる。

Brewfileは環境に1つでいいので、 ~/.Brewfile に作って、 brew bundle コマンドを --global オプション付きで実行することにした。

tfenvをbrew bundleでインストール

~/.Brewfile に下の行を足す。

brew "tfenv"

brew bundle --global を実行し、インストールできた。

むすびに

UbuntuにHomebrewをインストールし、Homebrew Bundleを使ってパッケージをインストールするまでの流れを記した。

Brewfileやdotfiles類は(今のところ)GitHubで公開しているが、今回の対応の差分はだいたいこちらのものになる。(※一部関係ない差分がある)

参考