Pod
チートシート
- コンテナを表現するk8s APIの最小の単位
- Podには1つ、または、複数のコンテナが含まめる場合がある
Pod生成方法
kubectl run web --image=nginx:1.14 --port=80
nginxのイメージで80ポートを設定する
Pod確認
kubectl get pods
Pod削除方法
kubectl delete pod web
web というPodを削除する
Pod作成Yaml方法
kubectl run web --image=nginx:1.14 --port=80 --dry-run=client -o > web.yaml
dry run実行計画をweb.yamlファイルで出力
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
kubectl apply -f web.yaml
作成したYamlファイルを元に、Podを作成
CKA試験例1
cka-exam
というnamespaceを作成し、cka-exam
namespaceに下のようなPodを作成しなさい
pod 名: pod-01
image: buxybox
環境変数: CERT="CKA-cert"
command: /bin/sh
args: -c "while true; do echo $(CERT); sleep 10; done"
kubectl config use-context k8s
kubectl create namespace cka-exam
kubectl run pod-01 --image=busybox --dry-run=client -o yaml > 3-1.yaml
3-1.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-01
namespace: cka-exam
spec:
containers:
- name: pod-o1
image: busybox
env:
- name: CERT
value: "CKA-cert"
command: ["/bin/sh"]
args: ["-c", "while true; do echo $(CERT); sleep 10; done"]
kubectl apply -f 3-1.yaml
CKA試験例2
pod custom-app
のLogをモニタリングし、file not found
メッセージを含むログラインをopt/REPORT/2022/custom-app/log
に記録しなさい
kubectl get logs custom-app | grep 'file not found' > opt/REPORT/2022/custom-app/log
Static Pod
- APIサバーなしに、特定のノードにある
kubelet
によって、直接管理する -
/etc/kubernetes/manifests/
ディレクトリにPod Yamlファイルを保存したら、適応される - 上記の
ディレクトリ(/etc/kubernetes/manifests/)
は/var/lib/kubelet/config.yaml
にて設定可能 - Static Podを置いておくディレクトリを修正したら、Kubeletでデモンを再実行する必要ある
systemctl restart kubelet
sudo su -
cd /etc/kubernetes/manifest
kubectl run webserver --image=nginx:1.14 --port=80 --dry-run=client -o yaml > webserver.yaml
Multi-Container
- ひとつのPodに幾つかのコンテナが含まめて一緒に実行される
チートシート
apiVersion: v1
kind: Pod
metadata:
name: two-containers
spec:
restartPolicy: Never
volumes:
- name: shared-data
emptyDir: {}
containers:
- name: nginx-container
image: nginx
volumeMounts:
- name: shared-data
mountPath: /usr/share/nginx/html
- name: debian-container
image: debian
volumeMounts:
- name: shared-data
mountPath: /pod-data
command: ["/bin/sh"]
args: ["-c", "echo Hello from the debian container > /pod-data/index.html"]
CKA試験例3
4つのコンテナを動作する eshop-frontend
Pod を作成しなさい
- nginx
- redis
- memcached
- consul
kubectl run eshop-frontend --image=nginx --dry-run=client -o yaml > 3-2.yaml
3-2.yaml
apiVersion: v1
kind: Pod
metadata:
name: eshop-frontend
spec:
containers:
- image: nginx
name: nginx-container
- image: redis
name: redis-container
- image: memcached
name: memcached-container
- image: consul
name: consul-container
kubectl apply -f 3-2.yaml
kubectl get pod eshop-frontend
Sidecarコンテナ
- 基本コンテナ機能を拡張するために利用。本来のコンテナは基本サービスを実行し、追加機能を別途コンテナを利用して適応
CKA試験例4
現在の運用中のeshop-cart-app
PodのログをKubernetes built in loggingアーキテクチャに統合するログストリミんぐサイドカーコンテナを運営しなさい
-
busybox
イメージを利用したprice
という名前のサイドカーコンテナを既存のeshop-cart-app
に追加します - 新たな
price
コンテナは次のコマンドを実行する必要があります`/bin/sh, -c, "tail -n+1 -f /var/log/cart-app.log" -
/var/log
にマウントしたVolumeを利用し、サイドカーコンテナでログファイルcart-app.log
うぃ利用する必要があります -
eshop-cart-app
PODとcart-app
コンテナを修正しないでください
kubectl get pod eshop-cart-app -o yaml > 3-3.yaml
3-3.yaml
apiVersion: v1
kind: Pod
metadata:
name: eshop-cart-app
namespace: default
resourceVersion: "978814"
uid: a9800501-c50e-4168-a142-347ea9173433
spec:
containers:
- command:
- /bin/sh
- -c
- 'i=1;while :;do echo -e ": Price: 1875" >> /var/log/cart-app.log; i=1; sleep
2; done'
image: busybox
name: cart-app
volumeMounts:
- mountPath: /var/log
name: varlog
- name: price
image: busybox:1.28
args: [/bin/sh, -c, 'tail -n+1 -f /var/log/cart-app.log']
volumeMounts:
- name: varlog
mountPath: /var/log
volumes:
- name: varlog
emptyDir: {}
kubectl apply -f 3-3.yaml
チートシート