zipコマンドメモ
随時追加していく。
# ディレクトリを圧縮する zip -r FILENAME.zip FILE_DIR # 解凍する unzip FILENAME.zip # xxx.mdだけ解凍する unzip FILENAME.zip FILE_DIR/xxx.md # 解凍結果を標準出力する unzip -p FILENAME.zip FILE_DIR/xxx.md
GithubActionsの設定
忘れる自信があるので、ymlの書き方をメモしておく。
# ファイルパス: .github/workflows/xxx.yml name: CI on: push: branches: master # masterブランチへのpush,merge時に発火 pull_request: # PR作成,更新時に発火 jobs: test: # 実行するJOBの識別子 name: Test # JOBの名前 runs-on: self-hosted # 指定の環境で実行する container: ruby:3.0.0 # JOBを動かすコンテナ env: RAILS_ENV: test MYSQL_HOST: mysql services: # メインコンテナとは別でコンテナを立ち上げる場合 mysql: image: mysql:5.7.33 env: MYSQL_ALLOW_EMPTY_PASSWORD: yes steps: # ここで実行する処理やコマンドを指定する - uses: actions/checkout@v2 # リポジトリからのチェックアウトを行う「actions/checkout」アクションを実行する with: token: ${{ secrets.XXX_TOKEN }} submodules: true - name: Build # ステップの1つ run の中で実際に実行するコマンドを指定する run: | bundle install --quiet --path vendor/bundle --without production bundle exec rake db:migrate - name: Rubocop run: | bundle exec rubocop -D - name: Rspec run: | bundle exec rspec spec deploy: name: Deploy runs-on: self-hosted container: ruby:3.0.0 needs: [test] # 「test」のJOBが成功した場合のみ実行 if: github.ref == 'refs/heads/master' # 指定ブランチの更新時のみ発火 steps: - uses: actions/checkout@v2 with: token: ${{ secrets.XXX_TOKEN }} - name: Deploy env: GITHUB_PERSONAL_ACCESS_TOKEN: ${{ secrets.XXX_TOKEN }} run: | mkdir ~/.ssh echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/id_rsa chmod 400 ~/.ssh/id_rsa eval `ssh-agent` ssh-add ~/.ssh/id_rsa bundle install --quiet --path vendor/bundle bundle exec cap production deploy
chefでencrypted data bagsを使うメモ
作る
.chef/knife.rbに追加
knife[:editor] = "/usr/bin/vim"
bundle exec knife data bag create users app_user --secret-file .chef/secret_data_bag_key --local # で editorが開くので編集して保存する。 # で、自動で暗号化されたjsonファイルが生成される。
usersがdata_bags配下にできるディレクトリ。
app_userがその下にできるjsonファイル。
編集する
bundle exec knife data bag edit users app_user --secret-file .chef/secret_data_bag_key --local
見る
bundle exec knife data bag show users app_user --secret-file .chef/secret_data_bag_key --local
参考
https://cross-black777.hatenablog.com/entry/2016/04/27/090000
Kubernetes覚え書き
Kubernetes チュートリアル で雰囲気を掴むメモ。
概念
- kubernetesCluster
- 構成
- Master
- クラスターの管理をする
- Node
- ワーカーマシン(物理サーバorVM)
- マスターが公開しているKubernetes APIを使用してマスターと通信
- 内部でコンテナを動かすためのコンテナランタイムを持つ
- Master
- 抽象概念
- Deployment
- Pod
- 1つ以上のアプリケーションコンテナのグループとそれらのコンテナの共有リソース
- ノードに障害が発生した場合、同じPodがクラスター内の他の使用可能なノードにスケジュールされます。
- Kubernetes Service
- Podの論理セットを定義し、それらのPodに対する外部トラフィックの公開、負荷分散、およびサービス検出を可能にする抽象化層。
- レプリカ
- 1つのDeploymentから作られる同じ機能を持つ複数のPod
- 構成
- Minikube
- ローカルマシン上にVMを作成し、1つのノードのみを含む単純なクラスターをデプロイする軽量なKubernetes実装
- minikube install https://kubernetes.io/ja/docs/tasks/tools/install-minikube/
- context
- clusterへの接続情報
minikubeのインストールと起動&停止
# https://kubernetes.io/ja/docs/tasks/tools/install-minikube/ # 事前インストール # - kubectl (k8sのcli) # - VirtualBox (ハイパーバイザー) # インストール brew install minikube # 起動 minikube start --driver=virtualbox # 状態確認 minikube status # 停止 minikube stop
kubectlコマンド
# バージョン確認 kubectl version # ノード確認 kubectl get nodes # deploymentの作成 # kubectl create deployment [名前] --image=[コンテナイメージ] kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 # deploymentの確認 kubectl get deployments # curl http://localhost:8001/version kubectl proxy
PODの走査
# podsの一覧を表示 kubectl get pods # podsの詳細情報を表示 kubectl describe pods # podnameの取得 export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}') echo Name of the Pod: $POD_NAME # 単一Pod上の単一コンテナ内のログを表示 kubectl logs $POD_NAME # 単一Pod上の単一コンテナ内でコマンドを実行 kubectl exec $POD_NAME env kubectl exec -ti $POD_NAME bash
Serviceの走査
# サービスの作成 (expose=晒す) # typeにはClusterIP(Default), NodePort, LoadBalancer, ExternalNameが指定できる kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080 # サービス一覧の確認 kubectl get services # サービスの詳細表示 kubectl describe services/kubernetes-bootcamp
Scaling
# Deploymentsの確認 kubectl get deployments # デプロイされた現在のReplicaSetの情報 kubectl get rs # Deployments名を指定してレプリカを4に増やす kubectl scale deployments/kubernetes-bootcamp --replicas=4 # Podが増えていることを確認できる kubectl get pods -o wide kubectl describe deployments/kubernetes-bootcamp # nodeのポート番号取得 export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}') echo NODE_PORT=$NODE_PORT # curlで接続確認 curl $(minikube ip):$NODE_PORT
ローリングアップデート
# 設定確認 kubectl get deployments kubectl get pods kubectl describe pods # deploymentsのコンテナイメージを差し替え # デプロイされる kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2 # Deploymentの進捗状況を確認 kubectl rollout status deployments/kubernetes-bootcamp # ロールバック # Deploymentはバージョン管理されているので、前の状態に戻すことができる。 kubectl rollout undo deployments/kubernetes-bootcamp
contextの切り替え
$ kubectl config current-context # 現在のコンテキスト $ kubectl config get-contexts # コンテキストの一覧 $ kubectl config use-context <context> # コンテキストの切り替え
Postfix運用メモ
# メールキューの確認 postqueue -p # メールキューを全て再送信 postfix flush
DNS関連メモ
リンク集
逆引き
# 逆引きオプション dig -x 192.0.0.1 # PTRレコード引き dig 1.0.0.192.in-addr.arpa PTR ## publicDNSから、問い合わせ順ごとに表示する dig -x 192.0.0.1 @8.8.8.8 +trace
PTRレコード(逆引きレコード)
https://jprs.jp/glossary/index.php?ID=0210
swap領域の作成
やったことなかったので、やり方をメモしておく。
メモリ不足でやばいときの応急処置の1つとして使えるように。
確認
$ free -h total used free shared buff/cache available Mem: 7.6G 2.3G 163M 472M 5.2G 4.5G Swap: 0B 0B 0B
ファイルの準備
sudo mkdir /var/swap/ # swapfileを作成して2GBを割り当てる。 sudo dd if=/dev/zero of=/var/swap/swapfile bs=1M count=2048
パーミッションの変更
sudo chmod 600 /var/swap/swapfile
swap領域に変換する
# 変換する sudo mkswap /var/swap/swapfile # 有効にする sudo swapon /var/swap/swapfile
確認
# 割当を確認できた free -h total used free shared buff/cache available Mem: 7.6G 2.3G 211M 472M 5.1G 4.5G Swap: 2.0G 0B 2.0G
swapをやめる
# 無効にする sudo swapoff -v /var/swap/swapfile # ファイルを削除する sudo rm /var/swap/swapfile
参考
https://blog.katsubemakito.net/linux/make-swap https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/storage_administration_guide/swap-removing-file