Kubernetes 上に 単独 Redis サーバー を構築する方法

0 件のコメント

今回は「Kubernetes上に 単独 Redis サーバーを構築する方法」についてまとめます。

概要

単独サーバーとして Redis を動作させる構成を作っていきます。 冗長構成はとっていないので落ちたら止まります…が、基本構成の学習にはシンプルなほうが良いのでまずは単独サーバーで構築を行っていきます

構築

Redis の パスワード は最大512文字まで指定できるので512文字でランダム文字列を作成します。

  1. パスワードファイルを作成

    OpenSSL を利用してランダムなパスワード文字列を作成します。 デフォルト指定する base64 オプションだと 約3割り増し の文字列生成されるので、改行削除して先頭512文字をパスワードとして利用します。

    1
    openssl rand -base64 512 | tr -d '\r\n' | cut -c 1-512 > redis-password
  2. KubernetesにSecreetリソースを作成

    1
    kubectl create secret generic redis-secret --from-file=redis-password

もし作成されていることを確認したいのであれば以下のコマンドで確認します。

1
kubectl get secrets

構築の方法はいろいろ考えられます。 ConfigMap を使う方法が真っ先に思い浮かぶのですが…単純に組み込むと ReadOnly になってしまってうまく動作しません。 initContainer と PersistentVolume ないし emptyDir 使えば回避できますが…複雑なので今回はやめておきます。 今回は簡単な方法として、Redis設定ファイル(redis.conf)をシェル内で作成する方法をとりました。

  1. マニュフェストファイル作成

    redis-pod.yml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    apiVersion: v1
    kind: Pod
    metadata:
      name: redis
      namespace: default
      labels:
        app: redis
        ver: "0.0.1"
        env: staging
    spec:
      containers:
      - name: redis
        image: redis:5.0.5-alpine3.10
        command:
        - "/bin/sh"
        - "-c"
        args:
        - |
          cat <<-EOF > /etc/redis.conf
          ########### NETWORK ##########
          bind 0.0.0.0
          port 6379
     
          ########### GENERAL ##########
          daemonize no
          logfile ""
     
          ########## SECURITY ##########
          requirepass ${REDIS_PASSWORD}
     
          ##### MEMORY MANAGEMENT ######
          maxmemory 100mb
          maxmemory-policy allkeys-lru
          EOF
     
          redis-server /etc/redis.conf
        env:
        - name: "REDIS_PASSWORD"
          valueFrom:
            secretKeyRef:
              name: redis-secret
              key: redis-password
  2. リソース作成

    1
    kubectl apply -f redis-pod.yml

動作確認は以下のコマンドで行います。

1
kubectl get pods

確認

  1. RedisサーバーのIPアドレス確認

    1
    2
    3
    [root@k8s-master ~]# kubectl get po -o wide
    NAME    READY   STATUS    RESTARTS   AGE   IP             NODE         NOMINATED NODE   READINESS GATES
    redis   1/1     Running   0          11m   10.244.1.119   k8s-node02   <none>           <none>
  2. デバッグ用のPod起動

    ポッド名は「redis-debug」、イメージは「Redisサーバーと同じもの(= redis:5.0.5-alpine3.10)」、再起動はさせず終了時に削除を指定(--restart=Never --rm)して起動します。

    1
    2
    3
    [root@k8s-master ~]# kubectl run -it redis-debug --image=redis:5.0.5-alpine3.10 --restart=Never --rm -- sh
    If you don't see a command prompt, try pressing enter.
    /data #
  3. Redisサーバーに接続して動作確認

    接続先(-h オプションへ渡すIP)は 1 で確認した IP を指定します。 パスワードはSecret作成時に作った redis-password の値を指定します。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    /data # redis-cli -h 10.244.1.119
    10.244.1.121:6379> auth xxxxxxxxx
    OK
    10.244.1.121:6379> set key1 Hello
    OK
    10.244.1.121:6379> get key1
    "Hello"
    10.244.1.121:6379> keys
    1) "key1"

今回は「Kubernetes上に 単独 Redis サーバーを構築する方法」についてまとめました。 参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!

最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!