初学者がKubernetesをはじめてみた ~#3 nodeのpvとホストvolumeを同期し、podの中にpvcを設定するなど~
はじめに
30代未経験からエンジニアを目指して勉強中のYNと申します。
インフラを勉強しだすと、k8sありきみたいな空気感に焦りますよね。キャッチアップのために学んだことなどを記録していきたいと思います。
前回の続きです。
やったこと
やったことを頑張って表題に表現しようとしましたが無理でした。
図にするとこんな感じです。
事前準備
kubectl
をk
にエイリアス
kubectl
をk
にエイリアスコマンドをkubectl
からk
にエイリアスすると楽です。そしてついでにコマンドの補完も追加しておきます。詳細はこちらの記事を参照ください。
以降、この記事では特に断りなくkubectl
の代わりにk
を使います。
source <(kubectl completion zsh)
alias k=kubectl
complete -o default -F __start_kubectl k
常にコンポーネントの動きをみておく
watch 'kubectl get pod,service,namespace,deploy,ingress,cm,secret,persistentvolume,persistentvolumeclaim'
コンポーネントをつくる
secretをつくる
環境変数などを格納するsecretをつくります。
k create secret generic my-secret --from-literal=SECRET_KEY1=SECRET_VALUE1 --from literal=SECRET_KEY2=SECRET_VALUE2 --dry-run=client -o yaml > secret.yaml
k apply -f secret.yaml
apiVersion: v1
data:
SECRET_KEY1: U0VDUkVUX1ZBTFVFMQ==
SECRET_KEY2: U0VDUkVUX1ZBTFVFMg==
kind: Secret
metadata:
creationTimestamp: null
name: my-secret
configmapをつくる
key-valueストアとして情報を格納するのにconfigmapを使います。
k create configmap my-config --from-literal=TEST_ENV=Hello_World --dry-run=client -o yaml > configmap.yaml
k apply -f congifmap.yaml
apiVersion: v1
data:
TEST_ENV: Hello_World
kind: ConfigMap
metadata:
creationTimestamp: null
name: my-config
pvをつくる
nodeの中にpvを作ります。
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv
spec:
storageClassName: manual
capacity:
storage: 100M
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/pvc"
k apply -f pv.yaml
pvcを定義する
podの情報はpodと共に消えてしまいます。podが消えたのちにpodがもつ情報を保持するためにはpvcを使ってpvに書き込むことです。
pvcにはpvから記憶領域の取り分を定義します。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10M
k apply -f pvc.yaml
podをつくる
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: helloworld-pod
name: helloworld-pod
spec:
containers:
- image: gcr.io/google-samples/hello-app:1.0
name: helloworld-pod
env:
- name: TEST_ENV
valueFrom:
configMapKeyRef:
name: my-config
key: TEST_ENV
ports:
- containerPort: 8080
resources: {}
volumeMounts:
- name: my-pv
mountPath: /mnt/pvc
- name: my-config-volume
mountPath: /my-config/TEST_ENV
- name: my-secret-volume
mountPath: /my-secret
readOnly: true
volumes:
- name: my-pv
persistentVolumeClaim:
claimName: pvc
- name: my-config-volume
configMap:
name: my-config
items:
- key: TEST_ENV
path: keys
- name: my-secret-volume
secret:
secretName: my-secret
nodeのpvとホストvolumeの同期動作確認
Pod内のコンテナにシェルで入り、ファイルを/mnt/pvc/from_pod.txt
上に作成する
k exec -it helloworld-pod sh
echo "from pod" > /mnt/pvc/from_pod.txt
cat /mnt/pvc/from_pod.txt
Nodeにsshして入り、Pod内のコンテナで作成した/mnt/pvc/from_pod.txt
がNode上にあることを確認できる
minikube ssh
cat /mnt/pvc/from_pod.txt
学習ログ的解説
configmapを定義する
podに記憶領域を定義する
podの記憶領域の中にconfigmapを定義する
podの記憶領域の中にsecretを定義する
pvについて
pvcを定義する
最後に
完全に自己満な学習ログとなってしまいました。今後もk8sの勉強をがんばっていきたいです。
Author And Source
この問題について(初学者がKubernetesをはじめてみた ~#3 nodeのpvとホストvolumeを同期し、podの中にpvcを設定するなど~), 我々は、より多くの情報をここで見つけました https://qiita.com/theFirstPenguin/items/51235c48dc680d9f209d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .