ksaitoの日記

日々試したことの覚え書き

コンテナ起動時にシェルだけで、環境変数でファイルを書き換える

コンテナ起動時にシェルだけで、環境変数でファイルを書き換える方法です。 下記のようなファイルを準備します。 ${VAL1}の部分を環境変数で書き換えます。 $ cat test.tmpl aaa bbb {${VAL1}} ccc $ 下記のように、コンテナ起動時に-eオプションでVAL1に書…

eksctlをコンパイルする

eksctlのソースをコンパイルしました。 golang 1.12以上の環境がなかったので、コンテナでやりました。 コンテナの準備 コンテナは、下記の通り準備しました。 golangのオフシャルコンテナには、makeやgitがインストールされているので、ほとんど手を加える…

yamlの書き換え

設定ファイルの雛形がyamlで提供されることが多くなりました。 これまでは、提供される雛形の書き換えが必要な箇所をsedで書き換えていましたが、yqを使ったほうが良さそうです。 例 aws-auth-cm.yaml AWS EKSのワーカーノードをAWSマネージメントコンソール…

jsonとyaml

jsonを使う機会が増えました。 jsonファイルから情報を取得するときに、jqコマンドが便利ですが、yamlのほうが見た目がわかりやすいのです。 jqコマンドと同じように操作できて、yamlとjsonに相互変換できるyqコマンドが便利です。 インストール 下記のコマ…

CRDのコントローラ

githubで公開されているサンプルのコントローラを動かしてみます。 sample-controllerの手順通りです。 sample-controllerのコンパイルと実行 下記のように実行します。 実行するとapi-version(v1alpha1)が見つからないとエラーが出ますが、気にせず進みま…

CustomResourceDefinitions

KubernetesのCustomResourceDefinitionsを調べました。 公式ドキュメントのCRDを、そのままデプロイしました。 $ cat resourcedefinition.yaml apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: # name must match the s…

kanikoでコンテナをビルドする

kanokoを使ってコンテナをdocker hubにpushします。 kanikoは、kubernetes上で動かしている例が多いのですが、コンテナなのでローカルのdocker環境でお手軽に動くのでは、と思ったのですが、いろいろ落とし穴がありました。 dockerhubへの認証情報 docker lo…

aws cliのTips

VPC 取得するデータ コマンド デフォルトVPCのVPCIDを取得 aws ec2 describe-vpcs --query 'Vpcs[?IsDefault==`true`].VpcId' --output text デフォルトVPCのサブネットIDを取得 aws ec2 describe-subnets --query 'Subnets[?VpcId==`'$VPCID'`].SubnetId' -…

kubeにdockerhubの認証情報を安全に保管する

Kubernetesで認証が必要なdocker registoryを操作するためにdocker registoryの認証情報を安全に保管する方法を検討しました。 kubernetesでdocker registoryの認証情報を設定する方法は、下記の2つがあります。 kubernetes.io/basic-authにbase64エンコー…

k8sのREST API

k8sのREST APIにアクセスしてみました。 環境は、k3sを使っています。 defaultネームスペースのserviceaccountのトークンを取得してREST APIにアクセスします。 k3sは、Basic認証なのでエラーになりました。 $ TOKEN=$(kubectl describe secrets $(kubectl g…

k3sの認証

k3sの認証は、下記のようにStatic Token Fileが使われているようです。 設定ファイルは、下記のように/var/lib/rancher/k3s/serverにありました。 $ docker-compose exec server cat /var/lib/rancher/k3s/server/cred/passwd | grep $(grep password ~/.kub…

git configで複数のユーザを切り替える

これまでの方法 gitで複数のユーザを切り替えるのにgit config --localを使って設定していました。 この方法は、切り替え忘れはないのですが、新規にリポジトリをcloneする毎にgit configを実行する必要がありました。 includeIfを使う方法 ghqと~/.gitconfi…

CodeBuildのローカル実行

CodeBuildのローカル実行がうまく動きませんでした。 AWS CodeBuild がローカルのテストとデバッグをサポート 手順に従ってビルドコンテナをビルドして、ヘルパーシェルをダウンロードして、実行してみると下記のエラーがでます。 $ ./codebuild_build.sh -i…

カレントのソースコードをzipに固める

AWSのCodeシリーズは、S3のバケットにzipで固めたソースをアップロードが基本のようです。 カレントディレクトリのソース一式をsrc.zipにします。 zip -r src.zip . -x .git/\* -x \*~

VPCエンドポイントの性能

S3のVPCエンドポイントとNAT Gateway経由の性能差です。 1つ目がVPCエンドポイント経由で0.664ms、NAT Gateway経由が3.097msと圧倒的にVPCエンドポイントが早かった。 [ec2-user@ip-10-0-10-188 ~]$ sudo tcptraceroute s3.ap-northeast-1.amazonaws.com 44…

テンプレートに環境変数を埋め込む。

Dockerコンテナを作るときに環境変数を使ってテンプレートから設定ファイルを作成します。 やりたいことは、次の2つなのですが、手軽な方法が見つかりません。 環境変数が設定されていたら、それを使う 環境変数がなければ、デフォルト値を使う 結局、ansibl…

kubectlのデフォルト環境

kubernetesで複数のクラスタを作成すると、kubectlコマンドで操作対象にするクラスタやネームスペースを選択するのが煩雑になります。 kubectl config set-contextでコンテキストにクラスタとネームスペースの組み合わせに名前をつけて切り替えられるように…

kubernetesのclusterとnamespaceとcontextの操作を整理

clusterとnamespaceとcontextの操作について整理します。 cluster クラスタを一覧します。 kubectl config get-clusters クラスタは、サーバの集まりなので、同じクラスタで動くワークロードはサーバリソースを共有します。負荷テスト用、開発用、本番用など…

kubbectl cluster-info dumpのエラー

kubectl cluster-info dumpしたらエラーになりました。 $ kubectl cluster-info dump error: missing apiVersion or kind and cannot assign it; no kind is registered for the type core.NodeList バージョンは以下の通り $ kubectl version --short Clien…

docker buildkit

dockerのbuildkitを使ってみました。 試した環境は、下記の環境で、手持ちのDockerfileをビルドして、時間とサイズを比較してみました。 $ docker --version Docker version 18.06.0-ce, build 0ffa825 $ 従来のビルド $ time docker build -t test --no-cac…

Amazon Linux 2のdocker環境をすばやく立ち上げる

EC2のLaunch Templatesを使ってAmazon Linux 2のdocker環境をすばやく立ち上げます。 設定は、次の項目です。 AMIにAmazon Linux 2の最新のAMI ID インスタンスタイプ ユーザデータ IAMロール タグ ユーザデータは、下記のような感じです。 $ curl http://16…

githubのpull requestをローカルにチェックアウトする

githubのpull requestをローカルにチェックアウトします。 オフシャルの手順は、下記のリンクです。 github.com maven-scmの#31のpull requestをチェックアウトしました。 最初にgithubでmaven-scmのリポジトリをforkします。 その後で、次のような手順で#31…

docker for macのdocker0

docker for macのdocker0が見当たりませんでした。 $ ifconfig docker0 ifconfig: interface docker0 does not exist docker for macのハイパーバイザは、modyで、接続するにはscreenを使います。 $ screen ~/Library/Containers/com.docker.docker/Data/com…

Jenkinsプラグインのデバッグ

Jenkinsのプラグインのデバッグの手順です。 ソースコードの取得 今回は、github-branch-source-pluginでやってみました。 git clone https://github.com/jenkinsci/github-branch-source-plugin cd github-branch-source-plugin テスト実行 下記のコマンド…

tomcatのオフシャルコンテナでスレッドダンプを取る

Tomcatのオフシャルコンテナのソースをcloneします。 git clone https://github.com/docker-library/tomcat.git cd tomcat/8.0/jre8 オフシャルコンテナのベースは、JREなのでJDKに変更します。 $ git diff diff --git a/8.0/jre8/Dockerfile b/8.0/jre8/Doc…

dockerコンテナでnginxを起動する。

dockerのubuntuコンテナで、手軽にnginxを動かすコマンドです。 /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

gitリポジトリ全体でgrepする

gitリポジトリの過去のコミット含めて、全てのファイルに対してgrepします。 git rev-list --all | xargs git grep '文字列'

Ubuntuのopensshコンパイル

/etc/apt/sources.listの下記の行を追加します。 deb-src http://archive.ubuntu.com/ubuntu/ bionic main restricted 次のコマンドでソースパッケージを取得します。 apt update apt-get source openssh 次のコマンドで、ビルドに必要な準備をします。 cd o…

aws cliの結果をタグの値で絞り込むquery

aws cliの結果をタグの値で絞り込むqueryです。 例えば、Security Groupの中からNameタグに特定の値が設定されたデータを絞り込むには、下記のようにします。 aws ec2 describe-security-groups --group-ids <SecurityGroup ID> --query 'SecurityGroups[?Tags[?Key==`Name`].V</securitygroup>…

Kubernetes-dashboardに接続する

Kubernetes-dashboardをデプロイしましたが、接続するのにちょっと苦労しました。 リモートからは接続できない マニュアル通りkubectl proxyを実行したところlocalhost以外からは接続できませんでした。 GUIのLinuxがあれば、これでも良いのですけどね。 $ k…