Kubernetes 1.10.2でDeploymentの作成と削除
目次
概要
『Kubernetes 1.10.2をAWS EC2(CentOS 7.5)へインストールしてkubeadmでマスタサーバとして構成』と 『Kubernetes 1.10.2をAWS EC2(CentOS 7.5)へインストールしてkubeadmでk8sのノードとして構成』で 構築したKubernetesのクラスタ環境でDeploymentを作成し、ノードでDockerコンテナが稼働することを確認します。 kubernetes.ioで公開されているDeploymentのサンプルの定義ファイルをそのまま使って試します。
構成
利用環境
サーバ環境はAWS(Amazon Web Services)のEC2インスタンスを利用しました。 サーバのスペックは以下のとおりです。
項目 | 内容 |
---|---|
AMI | CentOS 7 (x86_64) - with Updates HVM |
インスタンスタイプ | t2.micro |
vCPU | 1 |
メモリ | 1GiB |
ディスク | 汎用SSD(GP2) 8GiB |
リージョン | 日本 |
サーバ構成
OSバージョン
CentOS 7.5.1804 x86_64
ソフトウェア・パッケージ一覧
- docker-1.13.1-58.git87f2fab.el7.centos.x86_64.rpm
- 32e8bd812a3944ccf07750d52088a118fa11493d34e009e2873317e0f0b0dfd2-kubectl-1.10.2-0.x86_64.rpm
- b754a6990af7d7012189610b0dc69e6e950c13a8c415b9ebea8d56352e9719fd-kubeadm-1.10.2-0.x86_64.rpm
- bdee083331998c4631bf6653454c584fb796944fe97271906acbaacbf340e1d5-kubelet-1.10.2-0.x86_64.rpm
環境構築
マスタサーバでDeploymentの作成
Deploymentの定義ファイル作成
kubernetes.ioで公開されているサンプルの定義ファイルをそのまま作成します。
$ sudo su - # cd /data/k8s/ # vi nginx-deployment.yaml
※ファイルを新規作成※
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
定義ファイルからDeploymentを作成
上記の定義ファイルを元にDeploymentを作成します。
# kubectl create -f nginx-deployment.yaml deployment.apps "nginx-deployment" created
Deploymentの確認
作成されたDeploymentを確認します。 定義ファイルに記述された通り、nginx-deploymentという名のDeploymentが作成されていることが分かります。 このDeploymentでは3つのPodが必要とされており(DESIRED)、3つとも利用可能(AVAILABLE)となっています。
# kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx-deployment 3 3 3 3 38s
ReplicaSetの確認
DeploymentからReplicaSetが自動で作成されます。 ReplicaSetの情報を表示すると、nginx-deployment-75675f5897という名のReplicaSetが作成されていることが分かります。 また、Podの必要数3つに対して、現在3つのPodが作成され、3つとも利用可能な状態になっています。
# kubectl get rs NAME DESIRED CURRENT READY AGE nginx-deployment-75675f5897 3 3 3 42s
Podの確認
Deploymentの定義ファイルで定義したレプリカ数だけPodが作成されます。 今回は1つのDeploymentに対して1つのReplicaSetが作成され、1つのReplicaSetに対して3つのPodが作成されています。
# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-75675f5897-29dfk 1/1 Running 0 46s nginx-deployment-75675f5897-mx79w 1/1 Running 0 46s nginx-deployment-75675f5897-w5f7z 1/1 Running 0 46s
これで定義ファイルを元に nginx-deployment という名のDeploymentが作成され、Podが起動したことが確認できました。
ノードでDockerコンテナの起動確認
Dockerコンテナの確認
続いて、ノード(Kubernetesで管理するサーバ、Dockerの実行環境)にログインして、 3つのPodからそれぞれ起動された3つのDockerコンテナが存在していることを確認します。 以下の実行結果では、表示されたうち上からの3つのコンテナが今回起動したものになります。
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3b13222bfdeb 84581e99d807 "nginx -g 'daemon ..." 16 minutes ago Up 16 minutes k8s_nginx_nginx-deployment-75675f5897-mx79w_default_00cae3d8-641d-11e8-bac5-0643f5f5d140_0 ←起動したDockerコンテナ 713299fb49a4 84581e99d807 "nginx -g 'daemon ..." 16 minutes ago Up 16 minutes k8s_nginx_nginx-deployment-75675f5897-w5f7z_default_00c93022-641d-11e8-bac5-0643f5f5d140_0 ←起動したDockerコンテナ fabab491676d 84581e99d807 "nginx -g 'daemon ..." 16 minutes ago Up 16 minutes k8s_nginx_nginx-deployment-75675f5897-29dfk_default_00cacb42-641d-11e8-bac5-0643f5f5d140_0 ←起動したDockerコンテナ 07dccaa13047 k8s.gcr.io/pause-amd64:3.1 "/pause" 16 minutes ago Up 16 minutes k8s_POD_nginx-deployment-75675f5897-mx79w_default_00cae3d8-641d-11e8-bac5-0643f5f5d140_0 9b0f0ba39fcf k8s.gcr.io/pause-amd64:3.1 "/pause" 16 minutes ago Up 16 minutes k8s_POD_nginx-deployment-75675f5897-w5f7z_default_00c93022-641d-11e8-bac5-0643f5f5d140_0 771903b2bb82 k8s.gcr.io/pause-amd64:3.1 "/pause" 16 minutes ago Up 16 minutes k8s_POD_nginx-deployment-75675f5897-29dfk_default_00cacb42-641d-11e8-bac5-0643f5f5d140_0 7939fe8b6e01 f0fad859c909 "/opt/bin/flanneld..." 11 days ago Up 11 days k8s_kube-flannel_kube-flannel-ds-m9dkj_kube-system_0950d872-5abb-11e8-92f3-0643f5f5d140_0 739feabcaf8c k8s.gcr.io/kube-proxy-amd64@sha256:c7036a8796fd20c16cb3b1cef803a8e980598bff499084c29f3c759bdb429cd2 "/usr/local/bin/ku..." 11 days ago Up 11 days k8s_kube-proxy_kube-proxy-z2wft_kube-system_094ff39e-5abb-11e8-92f3-0643f5f5d140_0 403243e62b71 k8s.gcr.io/pause-amd64:3.1 "/pause" 11 days ago Up 11 days k8s_POD_kube-proxy-z2wft_kube-system_094ff39e-5abb-11e8-92f3-0643f5f5d140_0 f3a5ecdf9ba9 k8s.gcr.io/pause-amd64:3.1 "/pause" 11 days ago Up 11 days k8s_POD_kube-flannel-ds-m9dkj_kube-system_0950d872-5abb-11e8-92f3-0643f5f5d140_0
Dockerイメージの確認
一応このサーバにダウンロードされているDockerイメージの一覧を表示すると、 nginx という名前で 1.7.9 タグのイメージが存在していることが分かります。
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kube-proxy-amd64 v1.10.2 77019aa0531a 4 weeks ago 97.1 MB
docker.io/busybox latest 8ac48589692a 7 weeks ago 1.15 MB
k8s.gcr.io/kubernetes-dashboard-amd64 v1.8.3 0c60bcf89900 3 months ago 102 MB
quay.io/coreos/flannel v0.10.0-amd64 f0fad859c909 4 months ago 44.6 MB
k8s.gcr.io/pause-amd64 3.1 da86e6ba6ca1 5 months ago 742 kB
gcr.io/google_samples/gb-frontend v3 c038466384ab 2 years ago 510 MB
docker.io/nginx 1.7.9 84581e99d807 3 years ago 91.7 MB ←今回コンテナの元になったイメージ
プロセスの確認
nginxという名前のプロセスを確認すると、確かに3つのマスタプロセスと3つのワーカプロセスが起動していることが分かります。 DockerコンテナはホストOSのカーネルで動作するため、コンテナ内のプロセスであってもこのようにホストOS上のプロセスとして表示されます。
# ps -ef | grep nginx | grep -v grep root 9549 9531 0 15:20 ? 00:00:00 nginx: master process nginx -g daemon off; root 9578 9559 0 15:20 ? 00:00:00 nginx: master process nginx -g daemon off; 101 9582 9549 0 15:20 ? 00:00:00 nginx: worker process 101 9603 9578 0 15:20 ? 00:00:00 nginx: worker process root 9626 9605 0 15:20 ? 00:00:00 nginx: master process nginx -g daemon off; 101 9639 9626 0 15:20 ? 00:00:00 nginx: worker process
マスタサーバでDeploymentの削除
Deploymentの削除
今回作成した nginx-deployment という名のDeploymentを削除してみます。
# kubectl delete deployment nginx-deployment deployment.extensions "nginx-deployment" deleted
DeploymentとReplicaSetとPodの確認
DeploymentとReplicaSetとPodの状態を確認します。 いずれもリソースが存在しないと表示され、DeploymentもReplicaSetもPodも削除されたことが分かります。
# kubectl get deployments No resources found. ←Deploymentが削除されたため、表示されなくなった # kubectl get rs No resources found. ←Deploymentの削除に合わせてReplicaSetも削除された # kubectl get pods No resources found. ←ReplicaSetの削除に合わせてPodも削除された
ノードでコンテナの削除確認
Dockerコンテナの確認
続いて、ノードで k8s_nginx_nginx-deployment-75675f5897-xxxxx のDockerコンテナが停止して表示されなくなっていることを確認します。
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7939fe8b6e01 f0fad859c909 "/opt/bin/flanneld..." 11 days ago Up 11 days k8s_kube-flannel_kube-flannel-ds-m9dkj_kube-system_0950d872-5abb-11e8-92f3-0643f5f5d140_0 739feabcaf8c k8s.gcr.io/kube-proxy-amd64@sha256:c7036a8796fd20c16cb3b1cef803a8e980598bff499084c29f3c759bdb429cd2 "/usr/local/bin/ku..." 11 days ago Up 11 days k8s_kube-proxy_kube-proxy-z2wft_kube-system_094ff39e-5abb-11e8-92f3-0643f5f5d140_0 403243e62b71 k8s.gcr.io/pause-amd64:3.1 "/pause" 11 days ago Up 11 days k8s_POD_kube-proxy-z2wft_kube-system_094ff39e-5abb-11e8-92f3-0643f5f5d140_0 f3a5ecdf9ba9 k8s.gcr.io/pause-amd64:3.1 "/pause" 11 days ago Up 11 days k8s_POD_kube-flannel-ds-m9dkj_kube-system_0950d872-5abb-11e8-92f3-0643f5f5d140_0
Dockerイメージの確認
余談ですが、今回のようにDeploymentの削除に伴い、Dockerコンテナも削除されますが、 ダウンロードしたDockerイメージは削除されずに残っています。 そのため次回以降同じDockerイメージを利用する場合は改めてのダウンロードは行われないため、 起動が少し早くなることが期待されます。
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kube-proxy-amd64 v1.10.2 77019aa0531a 4 weeks ago 97.1 MB
docker.io/busybox latest 8ac48589692a 7 weeks ago 1.15 MB
k8s.gcr.io/kubernetes-dashboard-amd64 v1.8.3 0c60bcf89900 3 months ago 102 MB
quay.io/coreos/flannel v0.10.0-amd64 f0fad859c909 4 months ago 44.6 MB
k8s.gcr.io/pause-amd64 3.1 da86e6ba6ca1 5 months ago 742 kB
gcr.io/google_samples/gb-frontend v3 c038466384ab 2 years ago 510 MB
docker.io/nginx 1.7.9 84581e99d807 3 years ago 91.7 MB ←削除されずに残っている
プロセスの確認
Dockerコンテナが停止したため、コンテナで稼働しているプロセスも停止しました。
# ps -ef | grep nginx | grep -v grep
(プロセスが表示されない)
参考にしたサイト
Kubernetesの公式サイト kubernetes.io に掲載されているDeploymentの定義ファイルを参考にしました。