kubernetesのReplicationControllerを使ってみたときのメモです。

以下のドキュメントを参考に記述しています。
http://kubernetes.io/docs/user-guide/replication-controller/

ReplicationControllerとは

ReplicationControllerを使うことで、指定されたレプリカ数のpodが同時に実行されていることが保証されます。少ない場合は起動され、多い場合は削除されます。自動的にpod数が調整されるので単一のpodしか必要ない場合でもReplicationControllerを使ってpodを起動することが推奨されています。

が、将来的にReplicaSetに置き換えられる予定があるのでReplicaSetを使うと良いらしいです。selectorの考え方が若干変わっているみたいです。

環境

3つのminionがある環境で動作を確認します。

root$ kubectl get nodes
NAME STATUS AGE
centos-minion-1 Ready 24m
centos-minion-2 Ready 22m
centos-minion-3 Ready 21m

rcを作る

kind: ReplicationControllerを指定したyamlを作ります。

$ vi replication.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 2 # defaultは1
selector: # rcのselector。ココで指定したセレクタと同じ.spec.template.metadata.labelsがrcで管理される。
app: nginx
template: # rcで管理するpodの内容
metadata:
name: nginx
labels: # spec.selectorと同じものを指定する
app: nginx 
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80

selectorのラベルを変更すればrcの管理から切り離すことも可能みたいです。

root$ kubectl create -f replication.yaml

rcで作成されたpodを確認します。

root$ kubectl get rc -o wide
NAME DESIRED CURRENT AGE CONTAINER(S) IMAGE(S) SELECTOR
nginx 2 2 2m nginx nginx app=nginx
root$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-fom54 1/1 Running 0 2m 172.30.59.2 centos-minion-1
nginx-w1jor 1/1 Running 0 2m 172.30.21.2 centos-minion-3

試しにpodを削除して、rcが動作しているか確認してみます。

root$ kubectl delete pod nginx-fom54
pod "nginx-fom54" deleted

podを確認するとcentos-minion-2に作り直されていることが確認できます。

root$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-jyaqo 1/1 Running 0 55s 172.30.91.2 centos-minion-2
nginx-w1jor 1/1 Running 0 31m 172.30.21.2 centos-minion-3

ReplicaSetに置き換えられる予定なのでReplicaSetを使いましょう。

おわり。

参考

  1. http://kubernetes.io/docs/user-guide/replication-controller/