😽
ConfigMapにバイナリデータを登録する
はじめに
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