Translated message

A translation of this page exists in English.

Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

Kubernetes クラスターを作成して Docker フォーマットのコンテナーイメージを実行する

更新 -

Kubernetes を使用して、1 つのシステム (Kubernetes マスター) から docker コンテナーを実行して管理し、別のシステム (Kubernetes ノード) にデプロイして実行できます。ここでは、以下の方法について説明します。

  • 1 つの Kubernetes マスターならびに 2 つの Kubernetes ノード (別名 minion) として、Red Hat Enterprise Linux 7 または RHEL Atomic システムを 3 つ設定します。
  • Flannel を使用してコンテナー間のネットワークを設定します。
  • (yaml フォーマットで) データファイルを作成し、サービス、ポッド、レプリケーションコントローラーを定義します。

この手順で起動するサービスには、etcd、kube-apiserver、kubecontroller-manager、kube-proxy、kube-scheduler および kubelet が含まれます。yaml ファイルからコンテナーを起動したり、Kubernetes 環境を管理したりするには、kubectl コマンドを使用します。

重要: この手順は、2015 年 5 月 21 日に改訂されました。この手順を最初から行う場合は、このクラスターのマスターおよびノードで、以下のバージョン以上の RHEL Atomic host または RHEL 7 サーバーを実行している必要があります。

  • RHEL Atomic: Version 7.1.2 (2015-05-07 19:00:48 以降) (これより低いバージョンを使用している場合は、atomic host upgrade を実行して RHEL Atomic host を再起動します)
  • RHEL 7 サーバー: サーバーには、少なくても以下のバージョンが必要 (これより低いバージョンを使用している場合は yum upgrade kubernetes etcd docker flannel を実行してください)

    • kubernetes-0.15.0-0.3.git0ea87e4.el7.x86_64
    • etcd-2.0.9-2.el7.x86_64
    • docker-1.6.0-11.el7.x86_64
    • flannel-0.2.0-7.el7.x86_64

    改訂前のガイドに従って設定した場合は、Upgrading a Kubernetes Cluster を参照して、最新バージョンのソフトウェアに設定をアップグレードしてください。

この手順を行うと、複数のホストシステム間に Docker コンテナーをデプロイする基礎となる Kubernetes 環境を設定できます。以下のガイドも合わせて参照してください。

目次

Kubernetes でコンテナーをデプロイする準備をする

3 つのシステムの間に Kubernetes 環境を設定するには、以下を実行してください。

  1. RHEL 7 または RHEL Atomic システムをインストールする。この Kubernetes 環境に、RHEL 7 または RHEL Atomic システムを 3 つインストールし、システムをサブスクライブします。基本的な RHEL または RHEL Atomic システムを設定して Kubernetes を使用する方法については、以下のガイドを参照してください。

    Get Started with Docker Containers in RHEL 7 and RHEL Atomic

    yum upgrade (RHEL 7 システム) または atomic host upgrade (RHEL Atomic システム) を実行して、オペレーティングシステムソフトウェアの最新バージョンを取得してください。

  2. ネットワークタイムプロトコルを設定する。クラスター (マスターおよびノード) のすべてのシステムで、時刻が同期されている必要があります。これらのシステムに Network Time Protocol daemon (ntpd) または Chrony Daemon (chronyd) を設定する方法については、RHEL 7 System Administrator's Guide を参照してください。

  3. Kubernetes をインストールする。RHEL 7 システムの場合は、マスターに kubernetes および etcd パッケージ、そしてノードに kubernetes をインストールしてください。このパッケージは RHEL Atomic にはすでにインストールされています。

    • マスターで以下のコマンドを実行します。
    # yum install kubernetes etcd
    
    • ノードで以下のコマンドを実行します。
    # yum install kubernetes
    
  4. ホスト名およびアドレスを割り当てる。マスターとノードを互いに特定するのにホスト名または IP アドレスを使用できます。この例では、3 つの Kubernetes システムに以下のホスト名を割り当てました。

    master.example.com
    node1.example.com
    node2.example.com

  5. firewalld を無効する。RHEL 7 ホストを使用している場合は firewalld サービスを無効にします (Atomic host には firewalld サービスはインストールされていません)。RHEL 7 では、以下のコマンドを実行して firewalld サービスを無効にして停止します。

    # systemctl disable firewalld
    # systemctl stop firewalld
    
  6. Docker コンテナーを取得する。以下の 2 つのコンテナーを構築して、そのコンテナーのイメージを両ノードで利用できるようにします (つまり、片方のノードで docker images コマンドを実行した時に 2 つのイメージが表示されるようにします)。

    コンテナーの構築とテストが終了したら、停止させてください (docker stop mydbforweb および docker stop mywebwithdb)。

  7. コンテナーを各ノードにインポートする。各コンテナーイメージを各ノードにコピーし、ロードします。コンテナーイメージを構築するシステムから開始するには、以下のコマンドを実行します。

    # docker export mydbforweb > dbforweb.tar
    # docker export mywebwithdb > webwithdb.tar
    # scp dbforweb.tar webwithdb.tar node1:/tmp
    # scp dbforweb.tar webwithdb.tar node2:/tmp
    

    各ノードで、以下のコマンドを実行します。

    # cat /tmp/webwithdb.tar | docker import - webwithdb
    # cat /tmp/dbforweb.tar | docker import - dbforweb
    # docker images | grep web
    dbforweb  latest  2e48be49fec4  About a minute ago  568.7 MB
    webwithdb latest  5f2daa2e04e9  2 minutes ago       408.6 MB
    

    注意: 各ノードにコンテナーをインポートする代替案として、プライベートのコンテナーレジストリを作成して、この後で作成する yaml ファイルがコンテナーを起動する際にそのレジストリを指定する方法があります。

Kubernetes サービスを起動する

Kubernetes のマスターおよびノードの起動には、異なる systemd サービスを必要とします。3 つのホストシステム (1 つの Kubernetes マスターと 2 つの Kubernetes ノード) で以下の手順を行って、Kubernetes クラスターに必要な systemd サービスを設定および開始します。

重要: ノードを起動する前にマスターを設定して起動する必要があります。マスターを起動する前にノードを起動すると、ノードを Kubernetes に適切に登録できない場合があります。

  1. Kubernetes マスターを設定する: マスターにノードの場所、etcd サーバー、および API サーバーを設定する必要があります。それには、マスターにあるこの設定ファイルを編集します。

    • /etc/etcd/etcd.conf: etcd サービスが、ポート 2380、7001 (ETCD_LISTEN_PEER_URLS)、4001 (ETCD_LISTEN_CLIENT_URLS) へのすべてのインターフェイスを listen するように設定する必要があります。このファイルを下記のようにコメントを解除します。
    ETCD_NAME=default
    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
    ETCD_LISTEN_PEER_URLS="http://localhost:2380,http://localhost:7001"
    ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:4001,http://0.0.0.0:2379"
    

    etcd.conf ファイルは、このファイルの以前のバージョンから大きく変更しました。このファイルがどのようにアップデートされたかについては、Upgrading a Kubernetes Cluster を参照してください。

    • /etc/kubernetes/config: KUBE_MASTER 行を変更して、マスターサーバーの場所を指定します (デフォルトでは 127.0.0.1)。その他の設定はそのままにします。変更した 2 行は以下のようになります。
    KUBE_MASTER="--master=http://master.example.com:8080"
    

    • /etc/kubernetes/apiserver: 以下のように新しい KUBE_ETCD_SERVERS 行を追加して、apiserver 設定ファイルのその他の行を確認して変更します。KUBE_API_ADDRESS を変更して、ローカルホストだけでなく、すべてのネットワークアドレス (0.0.0.0) を listen するようにします。Kubernetes がサービスを割り当てるのに使用できる KUBE_SERVICE_ADDRESS でアドレス範囲を設定します (後述するこのアドレスの説明を参照)。以下はその一例です。
    KUBE_ETCD_SERVERS="--etcd_servers=http://master.example.com:4001"
    KUBE_API_ADDRESS="--address=0.0.0.0"
    KUBE_SERVICE_ADDRESSES="--portal_net=10.254.0.0/16"
    

    以下は、 使用する KUBE_SERVICE_ADDRESSES アドレス範囲の注意点です。

    • アドレス範囲は、Kubernetes が Kubernetes サービスを割り当てるために使用します。
      • この例では、アドレス範囲 10.254.0.0 ~ 16 は、必要に応じて Kubernetes によって割り当てられる 10.254 サブネットを使用します。たとえば、10.254.1.X や 10.254.2.X などになります。
    • このアドレス範囲は、環境内の他の場所では使用されません。
    • 割り当てられた各アドレス範囲は、ノード内でのみ使用され、ノード外でルーティングすることはできません。
    • このアドレス範囲は、flannel で使用されている範囲とは異なります (flannel のアドレス範囲はポッドに割り当てられます)。
  2. マスターで Kubernetes systemd サービスを設定する。Kubernetes マスターに割り当てられている複数のサービスを起動する必要があります。マスターから以下の for ループを実行して、マスターで Kubernetes systemd サービスを起動して有効にします。

    # for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do 
        systemctl restart $SERVICES
        systemctl enable $SERVICES
        systemctl status $SERVICES 
        done
    
  3. Kubernetes ノードを設定する。2 つの Kubernetes ノード (この例では node1.example.com および node2.example.com in this example) のいずれかで、以下の設定ファイルを編集する必要があります。

    • /etc/kubernetes/config: KUBE_MASTER 行を編集して、マスターの場所を指定します (デフォルトでは 127.0.0.1)。その他の設定はそのままにします。
    KUBE_MASTER="--master=http://master.example.com:8080"
    
    • /etc/kubernetes/kubelet: 各ノードのこのファイルで、KUBELET_ADDRESS (ネットワークインターフェイスで listen するため 0.0.0.0)、KUBELET_HOSTNAME (hostname_override を、ローカルシステムのホスト名または IP アドレスに置換 (node1.example.com または node2.example.com))、そして KUBELET_API_SERVER (--api_servers=http://master.example.com:8080 またはマスターの他の場所を設定) を以下のように編集します。
    # KUBE_ETCD_SERVERS="--api_servers=http://master.example.com:8080"
    KUBELET_ADDRESS="--address=0.0.0.0"
    KUBELET_HOSTNAME="--hostname_override=node1.example.com"
    KUBELET_API_SERVER="--api_servers=http://master.example.com:8080"
    
    • /etc/kubernetes/proxy: このファイルを設定する必要はありません。KUBE_PROXY_ARGS を設定した場合は、コメントアウトできます。
    # KUBE_PROXY_ARGS="--master=http://master.example.com:8080"
    
  4. Kubernetes ノードの systemd サービスを起動する。各ノードで、Kubernetes ノードに割り当てられている複数のサービスを起動する必要があります。

    # for SERVICES in docker kube-proxy.service kubelet.service; do 
        systemctl restart $SERVICES
        systemctl enable $SERVICES
        systemctl status $SERVICES 
    done
    
  5. サービスを確認する。その 3 つの各システムで netstat コマンドを実行して、 サービスを実行しているポートを確認します。etcd サービスでは、以下を行います。

    • マスターで以下のコマンドを実行します。
    # netstat -tulnp | grep -E "(kube)|(etcd)"
    
    • ノードで以下のコマンドを実行します。
    # netstat -tulnp | grep kube
    

    注意: この手順では firewalld サービスが Atomic にインストールされていません (そして RHEL では無効になっています) が、システム上のポートへのアクセスを直接ブロックするための iptables ルールを使用することもできます。使用した場合は、この netstat コマンドを実行すると、Kubernetes クラスターが動作するために各システムでアクセスできるようにする必要があるポートを表示します。したがって、個別のファイアウォールルールを作成して、これらのポートへのアクセスを開きます。

  6. etcd サービスをテストする: curl コマンドをいずれかのシステムから実行して、その etcd サービスが実行していてアクセスできることを確認します。

    # curl -s -L http://master.example.com:4001/version
    etcd 2.0.9
    
  7. ノードを確認する。マスターから、以下のコマンドを実行して、マスターが 2 つのノードとやりとりしていることを確認します。

    # kubectl get nodes
    NAME               LABELS       STATUS
    node1.example.com  Schedulable  name=node1.example.com Ready
    node2.example.com  Schedulable  name=node2.example.com Ready
    

これで、Kubernetes クラスターを設定できました。この設定を使用して、ネットワークを設定し、Kubernetes サービス、レプリケーションコントローラー、およびポッドをデプロイすることでコンテナーをデプロイすることができます。

Kubernetes に flannel ネットワークを設定する

flannel パッケージには、Kubernetes クラスターのマスターとノードとの間にネットワークを設定できる機能が含まれています。(マスターで) etcd サーバーへのネットワーク設定を含んだ json 設定ファイルを作成してアップデートすれば、flanneld サービスを設定できます。したがって、マスターと各ノードに flanneld systemd サービスを設定してその etcd サービスを指定し、flanneld サービスを起動します。この手順では、その方法が説明されます。

flannel は、この例では、Kubernetes 環境のすべてのノードで使用されるアドレス範囲 10.20.0.0/16 を割り当てます。これにより、マスターと両ノードのネットワークインターフェイスに割り当てられる範囲内に別の /24 サブネットが使用できます。この例の 3 つのシステムに対して以下の手順を行うと、以下のアドレス範囲が flannel.1 および docker0 インターフェイスに割り当てられます。

  • master:
    • flannel.1:10.20.21.0/16
  • node1:
    • flannel.1:10.20.26.0/16
    • docker0: 10.20.26.1/24
  • node2:
    • flannel.1:10.20.37.0/16
    • docker0: 10.20.37.1/24

重要: docker0 インターフェイスは、この手順を行う時にはすでに配置されているため、flanneld から docker0 に割り当てられた IP アドレスの範囲はすぐには有効になりません。flanneld アドレス範囲を有効にするには docker を停止 (systemctl stop docker) して docker0 インターフェイスを削除し、docker インターフェイスを再起動 (systemctl start docker) する必要があります。この手順の実施には、システムを再起動するのが簡単です。

  1. flannel をインストールする。flannel パッケージは RHEL Atomic にプレインストールされています。RHEL 7 を使用している場合は、以下のように、マスターと各ノードに flannel パッケージをインストールできます。

    # yum install flannel
    
  2. flannel 設定ファイルを作成する。マスターで、(json フォーマットの) Flannel 設定ファイルで IP アドレスとネットワークの種類を指定します。この例では、以下の内容を含む flannel-config.json ファイルを作成しました。

    {
      "Network":"10.20.0.0/16",
      "SubnetLen":24,
      "Backend":{
        "Type":"vxlan",
        "VNI":1
      }  
    }
    
  3. etcd サービスに flannel 設定をアップロードする。マスターで、flannel 設定ファイルを etcd サービスにアップロードして、以下のコマンドを実行します。

    # etcdctl set coreos.com/network/config 
    {"action":"set","node":{"key":"/coreos.com/network/config","value":"{\n\"Network\":\"10.20.0.0/16\",\n\"SubnetLen\":24,\n\"Backend\":{\n\"Type\":\"vxlan\",\n\"VNI\":1\n     }\n}\n","modifiedIndex":10,"createdIndex":10},"prevNode":{"key":"/coreos.com/network/config","value":"","modifiedIndex":9,"createdIndex":9}}
    

    次に、アップロードが適切に終了したことを確認します。

    # etcdctl get coreos.com/network/config
    {
      "Network":"10.20.0.0/16",
      "SubnetLen":24,
      "Backend":{
        "Type":"vxlan",
        "VNI":1
      }
    }
    
  4. flanneld のオーバーレイネットワークを設定する。flanneld systemd サービスを起動したら、オプションの /etc/sysconfig/flanneld ファイルを読み込んで、flanneld デーモンに渡します。
    マスターおよび 2 つのノードで /etc/sysconfig/flanneld を編集して、etcd サービス (マスター) を含むシステムの IP アドレス名を追加します。FLANNEL_ETCD_KEY 行はそのままにします。

    FLANNEL_ETCD="http://master.example.com:4001"
    FLANNEL_ETCD_KEY="/coreos.com/network"
    
  5. マスターとノードで flanneld を起動する。以下のように、最初にマスター、次に 2 つのノードで flanneld サービスを起動して有効にします。

    # systemctl restart flanneld
    # systemctl enable flanneld
    # systemctl status flanneld
    
  6. flannel.1 ネットワークインターフェイスを確認する。システムから以下のコマンドを実行して、flannel.1 ネットワークインターフェイスが各システムで適切に設定されていることを確認します。最初のコマンドは、各ノードで ip a コマンドを実行し、flannel.1 インターフェイスを確認します。次のコマンドは、サブネットが各システムの flannel に対して設定されている内容を示します。

    # for i in 1 2; do ssh root@node$i ip a l flannel.1; done | grep 'inet '
    root@node1's password:password
        inet 10.20.26.0/16 scope global flannel.1
    root@node2's password:password
        inet 10.20.37.0/16 scope global flannel.1
    # for i in master node1 node2; \
         do echo --- $i ---; ssh root@$i cat /run/flannel/subnet.env; done
    root@master's password:password
    --- master ---
    FLANNEL_SUBNET=10.20.21.1/24
    FLANNEL_MTU=1450
    root@node1's password:password 
    --- node1 ---
    FLANNEL_SUBNET=10.20.26.1/24
    FLANNEL_MTU=1450
    root@node2's password:password
    --- node2 ---
    FLANNEL_SUBNET=10.20.37.1/24
    FLANNEL_MTU=1450
    
  7. ノードを再起動する。docker の systemd サービスが flannel の変更を選択するようにし、すべてのネットワークインターフェイスが適切に起動していることを確認するには、各ノードで以下のコマンドを実行して再起動します。

    # systemctl reboot
    
  8. コンテナーを起動して flannel アドレスを取得する。各ノードで flannel ネットワークのアドレス範囲を確認し、flannel ネットワークからアドレスが選択されることを確認するためにコンテナーイメージを実行します。

    # ip a | grep flannel
    3: flannel.1: mtu 1450 qdisc noqueue state UNKNOWN 
    inet 10.20.26.0/16 scope global flannel.1
    # docker run -d --name=mydbforweb dbforweb
    # docker inspect --format='{{.NetworkSettings.IPAddress}}' mydbforweb
    10.20.26.2
    # docker stop mydbforweb
    # docker rm mydbforweb
    

Kubernetes でサービス、レプリケーションコントローラー、およびコンテナーポッドを起動する

Kubernetes クラスターを適切に設定したら、Kubernetes サービスを設定するのに必要な yaml ファイルを作成し、レプリケーションコントローラーを定義し、コンテナーのポッドを起動できます。上述した 2 つのコンテナー (Web および DB) を使用して、以下の種類の Kubernetes オブジェクトを作成します。

  • サービス: Kubernetes サービスを使用すると、ラベルに特定の IP アドレスおよびポート番号を割り当てることができます。ポッドと IP アドレスは Kubernetes と連携するため、ポッド内でラベルを使用して必要なサービスの場所を特定できます。
  • レプリケーションコントローラー: レプリケーションコントローラーを定義すると、どのポッドを開始するかだけでなく、各ポッドのレプリカをいくつ起動するかについても設定できます。ポッドが停止したら、レプリケーションコントローラーは別のコントローラーを起動してそれに置き換えることができます。
  • ポッド: ポッドは 1 つ以上のコンテナーと、コンテナーを実行して割り当てられたオプションをロードします。

この例では、2 つのポッドが互いにやりとりするのに必要なサービスオブジェクト (yaml ファイル) を作成します。次に、上述されている Web サーバーとデーターベースサーバーのコンテナーを起動して保持するためのポッドを指定するレプリケーションコントローラーを作成します。このガイドで使用されている yaml ファイルおよび json 設定ファイルは、すべて以下の tarball に追加されています。

kube_files*.tar

  1. データベースサーバーに Kubernetes サービスをデプロイする: マスター上で、特定の IP アドレスとポートにデータベースサーバーのコンテナーを結ぶためのラベルを指定する Kubernetes サービスの yaml ファイルを作成します。以下は、db-service.yaml ファイルを使用した例となります。

    apiVersion: v1beta3
    kind:Service
    metadata:
      labels:
        name: db
      name: db-service
      namespace: default
    spec:
      ports:
      - port:3306
      selector:
        name: db
    

    このサービスは外部からは直接アクセスされません。webserver コンテナーがアクセスします。セレクターおよびラベルの名前を db にします。サービスを起動するには、マスター上で以下のコマンドを実行します。

    # kubectl create -f db-service.yaml
    services/db-service
    
  2. データベースサーバーに ReplicationController サービスをデプロイする。次に、実行しているデータベースポッドの数を指定するレプリケーションコントローラーの yaml ファイルを作成します (ここでは 2 つ)。この例では、ファイルの名前は db-rc.yaml です。

    apiVersion: v1beta3
    kind:ReplicationController
    metadata:
      labels:
        name: db-controller
      name: db-controller
      namespace: default
    spec:
      replicas:2
      selector:
        selectorname: db
      template:
        metadata:
          labels:
            name: db
            selectorname: db
        spec:
          containers:
          - image: dbforweb
            name: db
            ports:
            - containerPort:3306
    

    webserver ポッドのレプリケーションコントローラーを起動するには、以下のコマンドを実行します。

    # kubectl create -f db-rc.yaml
    replicationcontrollers/db-controller
    
  3. Web サーバーに Kubernetes サービスの yaml ファイルを作成して起動する: マスター上で Kubernetes サービスの yaml ファイルを作成します。 これは Web サーバーのコンテナーを特定の IP アドレスとポートに結びつけるラベルを指定します。以下は、webserver-service.yaml ファイルを使用した例となります。

    apiVersion: v1beta3
    kind:Service
    metadata:
      labels:
        name: webserver
      name: webserver-service
      namespace: default
    spec:
      ports:
      - port:80
      publicIPs:
      - 192.168.122.15
      selector:
        name: webserver
    

    portalIP は、/etc/kubernetes/apiserver ファイルの範囲セット内のものにする必要があります (ここでは 10.254.100.0/24)。publicIPs 値は、ノードの 1 つにある外部ネットワークインターフェイスに関連する IP アドレスと連携する必要があります (node2 では、eth0 インターフェイスの IP アドレスは 192.168.122.15) です。これにより、外部でもサービスが利用可能になります。セレクターおよびラベルの名前を webserver にします。サービスを起動するには、マスター上で以下のコマンドを実行します。

    # kubectl create -f webserver-service.yaml
    services/webserver-service
    

    上で追加した 2 つのサービスと apiserver を実行中に、以下のコマンドを実行してこれらのサービスを確認します。

    # kubectl get services
    NAME              LABELS                                  SELECTOR       IP              PORT
    webserver-service name=webserver                          name=webserver 10.254.100.50   80
    kubernetes        component=apiserver,provider=kubernetes <none>         10.254.92.19    443
    kubernetes-ro     component=apiserver,provider=kubernetes <none>         10.254.206.141  80
    db-service        name=db                                 name=db        10.254.100.1    3306
    
  4. Web サーバーに ReplicationController サービスをデプロイする: 実行している webserver ポッドを指定するレプリケーションコントローラー yaml ファイルを作成します。以下の yaml ファイルに基づいて、レプリケーションコントローラーは "webserver" ラベルが付いている 2 つのポッドを常に実行するようにします。ポッド定義は、レプリケーションコントローラーの yaml ファイル内にあるため、別のポッドの yaml ファイルは必要ありません。webserver id を持つ実行中のポッドは、(起動方法に関わらず) 要件を満たしているとレプリケーションコントローラーから取得されます。以下は、webserver-rc.yaml ファイルの例です。

    apiVersion: v1beta3
    kind:ReplicationController
    metadata:
      labels:
        name: webserver-controller
      name: webserver-controller
      namespace: default
    spec:
      replicas:2
      selector:
        selectorname: webserver
      template:
        metadata:
          labels:
            name: webserver
            selectorname: webserver
            uses: db
        spec:
          containers:
          - image: webwithdb
            name: apache-frontend
            ports:
            - containerPort:80
    

    webserver ポッドのレプリケーションコントローラーを起動するには、以下のコマンドを実行します。

    # kubectl create -f webserver-rc.yaml
    webserver-service
    

Kubernetes を確認する

アプリケーションが動作していることを確認するには、curl コマンドセットを実行して、Web サーバーからデータを取得します。クラスターが適切に動作していることを確認するには、kubectl コマンドを使用できます。

  1. Web サーバーを確認する: 以下コマンドを実行して、Web サーバーからデータを取得します。ポッドアドレスを使用して、web サービスにアクセスします。

    # kubectl get pod | grep webwithdb
    47f0d628-edc2-11e4-8ee6-5254001aa4ee   10.20.11.3   apache-frontend   webwithdb   node1.example.com/   
          name=webserver,selectorname=webserver,uses=db   Running   2 hours
    # curl http://10.20.11.3/index.html
    The Web Server is Running
    # curl http://10.20.11.3/cgi-bin/action
    <html>
    <head>
    <title>My Application</title>
    </head>
    <body>
    <h2>RedHat rocks</h2>
    <h2>Success</h2>
    </body>
    </html>
    
  2. Kubernetes クラスターを確認する: 以下のコマンドをマスターから実行すると、クラスターを確認できます。

    # kubectl get pods
    # kubectl get replicationControllers
    # kubectl get services
    # kubectl get nodes
    

Kubernetes を削除する

クラスターの使用が終了した場合は、特別な方法で削除する必要があります。その順序は重要です。replicationController を削除する前にポッドを削除すると、ポッドが再起動します。たとえば以下のようになります。

# kubectl delete replicationControllers webserver-controller
# kubectl delete replicationControllers db-controller
# kubectl delete services webserver-service
# kubectl delete services db-service
# kubectl get pods
POD                                  IP          CONTAINER(S)    ...
89d8577d-bceb-11e4-91c4-525400a6f1a0 10.20.26.4  apache-frontend ...
8d30f2de-bceb-11e4-91c4-525400a6f1a0 10.20.26.5  db              ...            
# kubectl delete pods 89d8577d-bceb-11e4-91c4-525400a6f1a0
# kubectl delete pods 8d30f2de-bceb-11e4-91c4-525400a6f1a0

Kubernetes クラスターを引き続き使用する場合は、各ノードで以下のコマンドを実行して、サービスが起動していることを確認します。

# for SERVICES in docker kube-proxy.service kubelet.service; do 
    systemctl restart $SERVICES
    systemctl status $SERVICES 
    done

minion (ノード) を使用して行った場合は、以下のようにマスターから削除できます。

# kubectl delete minions node1.example.com
# kubectl delete minions node2.example.com

Attachments

Comments