このエントリーをはてなブックマークに追加

概要

 『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インスタンスを利用しました。 サーバのスペックは以下のとおりです。

■サーバスペック
項目内容
AMICentOS 7 (x86_64) - with Updates HVM
インスタンスタイプt2.micro
vCPU1
メモリ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の作成

(1) Deploymentの定義ファイル作成

 kubernetes.ioで公開されているサンプルの定義ファイルをそのまま作成します。

$ sudo su -
# cd /data/k8s/
# vi nginx-deployment.yaml
ファイル名:/data/k8s/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

(2) 定義ファイルからDeploymentを作成

 上記の定義ファイルを元にDeploymentを作成します。

# kubectl create -f nginx-deployment.yaml
deployment.apps "nginx-deployment" created

(3) 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

(4) 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

(5) 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コンテナの起動確認

(1) 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

(2) 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 ←今回コンテナの元になったイメージ

(3) プロセスの確認

 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の削除

(1) Deploymentの削除

 今回作成した nginx-deployment という名のDeploymentを削除してみます。

# kubectl delete deployment nginx-deployment
deployment.extensions "nginx-deployment" deleted

(2) 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も削除された

ノードでコンテナの削除確認

(1) 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

(2) 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 ←削除されずに残っている

(3) プロセスの確認

 Dockerコンテナが停止したため、コンテナで稼働しているプロセスも停止しました。

# ps -ef | grep nginx | grep -v grep
(プロセスが表示されない)

参考にしたサイト

 Kubernetesの公式サイト kubernetes.io に掲載されているDeploymentの定義ファイルを参考にしました。