基本的な操作方法は別の記事で紹介してきましたが、ここではもう少し詳しくPodなどの設定方法を見ていきます。
Podのマニフェストファイルを作成した際に、sepc.containersにイメージを指定して、リポジトリからダウンロードする方法は既にご紹介しています。
そこで、毎回イメージをダウンロードしてくるのか、それともローカルにイメージが無ければエラー処理にするのかなども設定できます。
Always | 毎回リポジトリからダウンロードを行う |
Never | ローカルにあるイメージを利用 |
IfNotPresent | ローカルに存在すればローカルを利用し、 無ければリポジトリからダウンロードする ※デフォルト設定になっている |
ホストのフォルダをマウントする方法
ここでは良く使う機能として、ホスト側のフォルダをマウントすることをやってみたいと思います。
手順としては、
1、ホストにフォルダを作成
2、作成したフォルダをマウントしたマニフェストファイルを作成
3、リソースを作成
となります。
それではやっていきましょう。
ホスト側のどこでもいいのですが、空フォルダを作成します。
そして、マウントした時に挙動が正しいか確認するため用のファイルを作成しておきます。
mkdir /data/storage
echo “Hello” >> /data/storage/message.txt
ここからは、マニフェストファイルを作成していきます。
pod.yml
apiVersion: v1
kind: Pod
metadata:
name: sample
spec:
containers:
- name: nginx
image: nginx:1.17.2-alpine
volumeMounts:
- name: storage
mountPath: /home/nginx
volumes:
- name: storage
hostPath:
path: /data/storage
type: Directory
ここで重要なのが、volumeMountsのnameとvolumesのnameを揃える点です。
そうしないと上手くマウントされないので注意が必要です。
マニフェストファイルが作成できたら、リソースを作成してあげます。
kubectl apply -f pod.yml
リソース作成が上手くいったら、コンテナに入りマウントができているかどうか見てみます。
kubectl exec -it pod/sample sh
cat /home/nginx/message.txt
> Hello
無事マウントができることが確認できました。
Replicasetを使ってスケールする方法
確認しておきたいのは、replicas、selector、templateプロパティです。
replicasは、Podを複製する数を指定することができ、値を変更することでスケールアウトやスケールインができます。
selectorは複製するPod数を数えるために使うラベルを指定します。ここでラベルの数とreplicasで指定した数が一致するようにk8sは動作します。
templateは複製するPodのマニフェストを指定するものになります。
中身はPodと全く一緒です。
具体的なReplicaSetを作成する手順をみていきます。
1、ReplicaSetマニフェストファイルを作成
2、リソース作成
3、手動スケールアウト
早速、マニフェストファイルから作成していきます。
pod.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: sample
spec:
replicas: 2
selector:
matchLabels:
app: web
env: study
template:
metadata:
name: nginx
labels:
app: web
env: study
spec:
containers:
- name: nginx
image: nginx:1.17.2-alpine
マウントする時と同様に、selectorのmatchLabelsに指定した名前と、templateのlabelsが一緒になるようにしてください。
そしたら、リソースを作成し、podが複数立ち上がっているか確認してみます
kubectl apply -f pod.yml
kubectl get all
成功していますね。スケールアウトするには、この状態でpod.ymlのreplicasの値を3に変えて、再びapplyすれば可能です。
Deploymentを使って世代管理する方法
基本的には、ReplicaSetと同じですが、異なる点としてはrevisionHistoryLimitとstrategyプロパティがある点です。
revisionHistoryLimitはReplicaSetの履歴保存数を指定でき、デフォルトは10です。
strategyはデプロイ方法を指定するものです。新しいリリースをしたい時にPodを一気に置き換えてしまうとサービスが停止してしまいます。
そこで、1度に置き換えても良いPod数などを指定することでサービスが停止せずに新しいリリースを出すことができます。
早速Deploymentの使い方をみていきます。
pod.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 2
selector:
matchLabels:
app: web
env: study
revisionHistoryLimit: 14
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
name: nginx
labels:
app: web
env: study
spec:
containers:
- name: nginx
image: nginx:1.17.2-alpine
maxUnavailableが一度に置き換えていいPod数で、maxSurgeはレプリカ数を超えていいPod数になります。
リソースを作成して、できているか確認します。
kubectl apply -f pod.yml
kubectl get all
Deploymentではロールアウトの履歴確認もできます
kubectl rollout history deploy/nginx
この段階では、1つしか出てきませんが、何回もデプロイしていくと情報が溜まっていきます。
Chane Causeにはコメントが残すことができるので、何をしたかということを書いておくと別の人がみた時にも便利です。
コメントを残す方法は、マニフェストファイルにannotationsというプロパティを加えてあげれば可能です。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
annotations:
kubernetes.io/change-cause: "Update nginx 1.17.3"
spec:
replicas: 2
selector:
matchLabels:
app: web
env: study
revisionHistoryLimit: 14
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
name: nginx
labels:
app: web
env: study
spec:
containers:
- name: nginx
image: nginx:1.17.3-alpine
この状態で再度applyしてあげて、ロールアウト履歴を見るとコメントが追加されているのが分かります。
ここで良く使うのが、ロールバック機能ですね。これは本当に良く使うので覚えておいた方がいいです。
kubectl rollout undo deploy/nginx
これで直前のバージョンに戻ることができます。
他にもまだたくさんのリソースがあるのですが、次回に紹介していこうと思います。