シェルスクリプトの変数の波括弧

シェルスクリプトを読んでいた時、波括弧に囲まれた変数とそうでない変数が出てきました。

echo $HOGE
echo ${HUGA}

何が違うのでしょう。波括弧は変数名を明示的に指定する時に使うようです。

例えば変数に文字をいれた場合

$DRINK=beer

下記の場合、DRINKTABLEという別の変数になります。 変数DRINKTABLEは登録していないので、何も表示されません。

echo $DRINKTABLE

波括弧をつけると変数DRINKと指定されるので表示されます。

echo ${DRINK}TABLE
BEERTABLE

基本的には${hoge}とするのが間違いなさそうです。

Kubernetesのyamlファイルに必須の項目について

Kubernetesの勉強をはじめると、設定が記載されたyamlファイルをよく見るようになります。

でもサンプルコードを見ると多くのフィールドがあり、何を見たらいいかわからなくなるという...。


ということで、まずは必須の4つのフィールドをまとめます。

  • apiVersion
  • kind
  • metadata
  • spec


サンプルコード

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

apiVersion

リソースのオブジェクトを作成時に利用するKubernetesAPIのバージョン

サンプルコードだと「apps/v1」バージョンを使うよ、と設定してます。

Kubernetesでは、マイナーバージョン毎に新機能の追加や、古い機能の非推奨化・廃止が実施されます。
Kubernetesのバージョンアップ時には、リソースのapiVersionの設定が非推奨となった場合、書き換える必要があります。

下記ドキュメントには、各オブジェクトのバージョンの状況や、非推奨APIからの移行方法が記載されてます。

kubernetes.io

kind


作成するリソースの種類

PodとかDeploymentとか、Kubernetesには色々な種類のリソースがありますが、
yamlファイルが何のリソースの設定かを記載します。

サンプルコードをみると、Deploymentの設定になっています。

 

metadata

オブジェクトを一意に特定するための情報。
nameとかUID、またnamespaceの情報が記載されます。
サンプルコードを見るとnginx-deploymentという名前のDeploymentになっています。

spec

オブジェクトの望ましい状態を表す設定(いっぱいいろいろ)

リソースの設定を見たければここ見てって感じでしょうか。

サンプルコードではselectorやreplicas、templateが設定されています。

 

specに記載できるフィールドは、各リソースそれぞれで設定されています。
どんなフィールドが設定できるかは、Kubernetes API リファレンスを見るといいらしいです。
Podに関するのはPodSpec v1 coreを、Deploymentに関するのはDeploymentSpec v1 appsを確認してねとのこと。

kubernetes.io

 

データベースのインデックス(索引)B-treeインデックス

フルスキャン

テーブルに格納されたデータを取り出す方法として、 フルスキャン

  • テーブルの全レコードから検索に一致する行をチェックする

  • 全レコードを確認するため、検索にかかるコストは、レコード数に比例して増える

  • データ追加の場合は、ファイルの末尾に1レコード分のデータが付け足される

全レコードをスキャンするので、レコード数の多いテーブルには向かない。

インデックススキャン

フルスキャンだと効率が悪いので、より速くデータにアクセスするためのアイデアとして、インデックスがある。

全レコード見なくてすむようにするためには? 索引的なことができるように、メタデータをつくる。 ある検索条件にソート済みのメタデータを用意する。メタデータには実際に値があるデータに対するポインタが含まれている。

B-treeインデックス

インデックスの中にも様々な種類がある。その一つがB-treeインデックス - アイデア:ソート済みのデータをいくつかのレンジに分割して、検索範囲を削減する

  • まず対象がどのレンジに含まれるかを検索、その後レンジに含まれる行を全てチェックする

  • PostgreSQLでは検索条件として、先頭の文字列であれば使うことができる

  • Cロケールではない場合、インデックス作成時には特別な演算子クラスが必要