😽

ConfigMapにバイナリデータを登録する

2022/12/20に公開

はじめに

ConfigMapにバイナリデータってどのように登録するんだっけ?と思い、調べたのでメモ。
結論としては、特に何もしなくてもbinaryDataとして登録してくれる仕様であった。
ひととおり手順を確認したので以下に纏めます。

see. https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.10.md#apps

手順

ConfigMapに登録したいバイナリデータを用意する。
今回は、Logstashのオフラインパック(Zipファイル)をバイナリデータとして登録する。

% ls -l logstash-offline-plugins-7.17.8.zip
-rw-r--r--  1 shoji  staff  599993 12 20 13:54 logstash-offline-plugins-7.17.8.zip

--from-fileオプションでバイナリファイルを指定してConfigMapを作成する。

kubectl create configmap logstash-offline-plugins --from-file=logstash-offline-plugins-7.17.8.zip --dry-run=client -oyaml > logstash-offline-plugins-configmap.yaml

ConfigMapのbinaryDataにバイナリデータが登録されていた。

apiVersion: v1
kind: ConfigMap
metadata:
  name: logstash-offline-plugins
binaryData:
  logstash-offline-plugins-7.17.8.zip: UEsDBBQAAAAAACgh ...(snip)...

バイナリデータをマウントするPodを用意する。
まずは、Deploymentの雛形を作成する。

kubectl create deployment logstash-offline-plugins-deployment --image=docker.elastic.co/logstash/logstash:7.17.8 --dry-run=client -oyaml > logstash-offline-plugins-deployment.yaml

以下のように編集し、バイナリデータをマウントする。
ここではマウントしたバイナリデータであるLogstashのオフラインパックをインストールしてからLogstashを起動する設定にしている。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: logstash-offline-plugins-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: logstash-offline-plugins-deployment
  strategy: {}
  template:
    metadata:
      labels:
        app: logstash-offline-plugins-deployment
    spec:
      containers:
      - image: docker.elastic.co/logstash/logstash:7.17.8
        name: logstash
        resources: {}
        volumeMounts:
        - name: logstash-offline-plugins
          mountPath: /usr/share/logstash/logstash-offline-plugins-7.17.8.zip
          subPath: logstash-offline-plugins-7.17.8.zip
        args:
        - sh
        - -c
        - |
          bin/logstash-plugin install file:///usr/share/logstash/logstash-offline-plugins-7.17.8.zip && logstash
      volumes:
      - name: logstash-offline-plugins
        configMap:
          name: logstash-offline-plugins
          items:
          - key: logstash-offline-plugins-7.17.8.zip
            path: logstash-offline-plugins-7.17.8.zip

ConfigMapをapplyする。
最初、普通にapplyしようとしたらmetadata.annotations: Too long: must have at most 262144 bytesというエラーになったので、--server-sideオプションを付与している。

% kubectl apply -f logstash-offline-plugins-configmap.yaml --server-side

次にDeploymentをapplyする。

% kubectl apply -f logstash-offline-plugins-deployment.yaml

正常に起動していることを確認する。

% kubectl get po,deploy,cm
NAME                                                       READY   STATUS    RESTARTS        AGE
pod/logstash-offline-plugins-deployment-58db485c4b-7zgzf   1/1     Running   0               21m

NAME                                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/logstash-offline-plugins-deployment   1/1     1            1           21m

NAME                                                  DATA   AGE
configmap/logstash-offline-plugins                    1      22m

バイナリデータとしてマウントしたオフラインパックのプラグインが正常にインストールされていることを確認する。

% kubectl exec -it pod/logstash-offline-plugins-deployment-58db485c4b-7zgzf -- bin/logstash-plugin list logstash-output-slack
:
logstash-output-slack

以上

Discussion