ページの先頭行へ戻る
Enterprise Service Development Platform V1.0.0 チューニングガイド
FUJITSU Software

2.2.2 Kubernetesクラスタのスケールアウト

  1. Kubernetes node サーバの払い出し

    ■Kubernetes node サーバの払い出し

    ご利用のIaaSが提供するサーバの払い出し方法に従って、作成してください。 ご利用のIaaSがFUJITSU Cloud service for OSSの場合、サービスポータルまたはAPI等を使用して作成します。 詳細はIaaSドキュメントを参照してください。

    払い出しを行う際に、下記の設定を行う必要があります。既存のKubernetes nodeの設定を参考に設定してください。 既存のサーバの確認操作についてはIaaSサービスポータルユーザーズガイドを参照してください。

    • サーバ名
    • イメージ名
    • ブロックストレージ
    • ネットワーク
    • キーペア
    • セキュリティグループ
    • サーバグループ

    ネットワークは2つ割り当てる必要があります。

    • az1_common_management_network
    • az1_common_service_network

    払い出し後に、既存のKubernetes nodeの設定を参考にネットワークの設定を行ってください。

    また、払い出し後に、既存のKubernetes nodeの設定を参考にIaaSポータル等から拡張ボリューム(ブロックストレージ)を作成、および、払い出したKubernetes nodeサーバへの接続を行ってください。

  2. Kubernetesクラスタへ登録

    作成したサーバにSSHで接続し、下記の設定を行います。

    ■NTPの設定

    既存のKubernetes nodeの設定に合わせて設定してください。

    ■Docker/Docker-Composeインストール

    【CentOSの場合】と記載された手順については、サーバのOSがCentOSの場合のみ実施してください。

    【RHELの場合】と記載された手順については、サーバのOSがRed Hat Enterprise Linuxの場合のみ実施してください。

    1. 【RHELの場合】RHUIをセットアップします。

      FUJITSU Cloud Service for OSS ポータルの以下を参照し、RHUI設定用ファイルをセットアップしてください。

      RHUI設定用ファイル > Red Hat Update Infrastructure 3.0移行手順 > クライアントパッケージの取得

    2. SELinuxを無効化します。

      > sudo su
      # sed -i "s/\(^SELINUX=\).*/\1disabled/" /etc/selinux/config
    3. カーネルパラメーターを設定します。

      # sysctl net.ipv4.conf.all.forwarding=1
      # echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
    4. OSを再起動します。

      # reboot
    5. 管理者権限に変更します。

      > sudo su -

      sudoが使えない場合は、以下を実行してください。

      > su -
    6. 【RHELの場合】firewalldサービスを停止・無効化します。

      # systemctl stop firewalld
      # systemctl disable firewalld
    7. メディアパックに入っている下記のパッケージを任意の場所にコピーします。

      【CentOSの場合】

      • yum-utils-1.1.31-46.el7_5.noarch.rpm
      • device-mapper-persistent-data-0.7.3-3.el7.x86_64.rpm
      • lvm2-2.02.177-4.el7.x86_64.rpm
      • lvm2-libs-2.02.177-4.el7.x86_64.rpm
      • device-mapper-1.02.146-4.el7.x86_64.rpm
      • device-mapper-event-1.02.146-4.el7.x86_64.rpm
      • device-mapper-event-libs-1.02.146-4.el7.x86_64.rpm
      • device-mapper-libs-1.02.146-4.el7.x86_64.rpm
      • docker-ce-18.03.0.ce-1.el7.centos.x86_64.rpm
      • pip-9.0.3.tar.gz
      • pip-9.0.3-py2.py3-none-any.whl
      • docker_compose-1.21.0-py2.py3-none-any.whl

      【RHELの場合】

      • pip-9.0.3.tar.gz
      • pip-9.0.3-py2.py3-none-any.whl
      • docker_compose-1.21.0-py2.py3-none-any.whl
    8. Dockerのインストールを実行します。

      【CentOSの場合】

      コピーしたパッケージの存在するディレクトリで実行してください。

      # yum -y localinstall yum-utils-1.1.31-46.el7_5.noarch.rpm \
      device-mapper-persistent-data-0.7.3-3.el7.x86_64.rpm \
      lvm2-2.02.177-4.el7.x86_64.rpm \
      lvm2-libs-2.02.177-4.el7.x86_64.rpm \
      device-mapper-1.02.146-4.el7.x86_64.rpm \
      device-mapper-event-1.02.146-4.el7.x86_64.rpm \
      device-mapper-event-libs-1.02.146-4.el7.x86_64.rpm \
      device-mapper-libs-1.02.146-4.el7.x86_64.rpm \
      docker-ce-18.03.0.ce-1.el7.centos.x86_64.rpm
      # systemctl enable docker
      # systemctl start docker
      # useradd -g docker docker

      【RHELの場合】

      # yum install -y \
        yum-utils-1.1.31 \
        device-mapper-persistent-data-0.7.3 \
        lvm2-2.02.180 \
        docker-1.13.1-88.git07f3374.el7
      # systemctl enable docker
    9. 【RHELの場合】Dockerの設定を行います。

      # sed -i \
        -e "s/DOCKER_STORAGE_OPTIONS=.*/DOCKER_STORAGE_OPTIONS=\"--storage-driver devicemapper\"/g" \
        /etc/sysconfig/docker-storage
      # sed -i \
        -e "s/OPTIONS=.*/OPTIONS='--log-driver=json-file --signature-verification=false'/g" \
        /etc/sysconfig/docker
      # sed -i \
        -e "s/--exec-opt native.cgroupdriver=.*/--exec-opt native.cgroupdriver=cgroupfs/g" \
        -e '/--seccomp-profile=/d' \
        /usr/lib/systemd/system/docker.service
    10. 【RHELの場合】設定の反映を行います。

      # systemctl daemon-reload
    11. 【RHELの場合】LVMの設定を実施します。

      # vgcreate docker /dev/vdb
      # lvcreate --wipesignatures y -n thinpool docker -l 95%VG
      # lvcreate --wipesignatures y -n thinpoolmeta docker -l 1%VG
      # lvconvert -y \
      --zero n \
      -c 512K \
      --thinpool docker/thinpool \
      --poolmetadata docker/thinpoolmeta

      以下のファイルを作成してください。

      /etc/lvm/profile/docker-thinpool.profile

      activation {
        thin_pool_autoextend_threshold=80
        thin_pool_autoextend_percent=20
      }

      下記コマンドを実行してください。

      # lvchange --metadataprofile docker-thinpool docker/thinpool
    12. 以下のファイルを作成してください。

      /etc/docker/daemon.json

      【CentOSの場合】

      {
          "insecure-registries": [
              "172.16.1.0:4567"
          ], 
          "log-driver": "json-file", 
          "log-opts": {
              "max-file": "10", 
              "max-size": "10m"
          }, 
          "storage-driver": "devicemapper", 
          "storage-opts": [
              "dm.directlvm_device=/dev/vdb"
          ]
      }

      【RHELの場合】

      {
          "insecure-registries": [
              "172.16.1.0:4567"
          ], 
          "log-driver": "json-file", 
          "log-opts": {
              "max-file": "10", 
              "max-size": "10m"
          }, 
          "storage-driver": "devicemapper", 
          "storage-opts": [
              "dm.thinpooldev=/dev/mapper/docker-thinpool",
              "dm.use_deferred_removal=true",
              "dm.use_deferred_deletion=true"
          ]
      }
    13. 【RHELの場合】設定の反映を行います。

      # systemctl daemon-reload
    14. 【RHELの場合】Dockerを起動します。

      # systemctl start docker
    15. docker-composeのインストールを実行します。

      メディアパックからコピーしたパッケージの存在するディレクトリで実行してください。

      【CentOSの場合】

      # chown root:docker /etc/docker/daemon.json
      # systemctl restart docker
      # easy_install pip-9.0.3.tar.gz
      # pip install pip-9.0.3-py2.py3-none-any.whl
      # pip install docker_compose-1.21.0-py2.py3-none-any.whl
      # exit
      >

      【RHELの場合】

      # easy_install pip-9.0.3.tar.gz
      # pip install pip-9.0.3-py2.py3-none-any.whl
      # pip install docker_compose-1.21.0-py2.py3-none-any.whl
      # exit
      >

    ■Dockerイメージのload

    メディアパックに入っている下記のファイルをコピーしてください。

    • gcr.io_kubernetes-helm_tiller_v2.9.1.tar.gz
    • k8s.gcr.io_defaultbackend_1.3.tar.gz
    • k8s.gcr.io_etcd-amd64_3.1.12.tar.gz
    • k8s.gcr.io_k8s-dns-dnsmasq-nanny-amd64_1.14.8.tar.gz
    • k8s.gcr.io_k8s-dns-kube-dns-amd64_1.14.8.tar.gz
    • k8s.gcr.io_k8s-dns-sidecar-amd64_1.14.8.tar.gz
    • k8s.gcr.io_kube-apiserver-amd64_v1.10.12.tar.gz
    • k8s.gcr.io_kube-controller-manager-amd64_v1.10.12.tar.gz
    • k8s.gcr.io_kube-proxy-amd64_v1.10.12.tar.gz
    • k8s.gcr.io_kube-scheduler-amd64_v1.10.12.tar.gz
    • k8s.gcr.io_pause-amd64_3.1.tar.gz
    • quay.io_coreos_flannel_v0.10.0-amd64.tar.gz
    • quay.io_kubernetes-ingress-controller_nginx-ingress-controller_0.15.0.tar.gz

    コピーしたファイルの存在するディレクトリで実行してください。

    > sudo su
    # docker load -i gcr.io_kubernetes-helm_tiller_v2.9.1.tar.gz
    # docker load -i k8s.gcr.io_defaultbackend_1.3.tar.gz
    # docker load -i k8s.gcr.io_etcd-amd64_3.1.12.tar.gz
    # docker load -i k8s.gcr.io_k8s-dns-dnsmasq-nanny-amd64_1.14.8.tar.gz
    # docker load -i k8s.gcr.io_k8s-dns-kube-dns-amd64_1.14.8.tar.gz
    # docker load -i k8s.gcr.io_k8s-dns-sidecar-amd64_1.14.8.tar.gz
    # docker load -i k8s.gcr.io_kube-apiserver-amd64_v1.10.12.tar.gz
    # docker load -i k8s.gcr.io_kube-controller-manager-amd64_v1.10.12.tar.gz
    # docker load -i k8s.gcr.io_kube-proxy-amd64_v1.10.12.tar.gz
    # docker load -i k8s.gcr.io_kube-scheduler-amd64_v1.10.12.tar.gz
    # docker load -i k8s.gcr.io_pause-amd64_3.1.tar.gz
    # docker load -i quay.io_coreos_flannel_v0.10.0-amd64.tar.gz
    # docker load -i quay.io_kubernetes-ingress-controller_nginx-ingress-controller_0.15.0.tar.gz
    # exit
    >

    ■DNSの設定

    既存のKubernetes nodeの設定に合わせて設定してください。

    ■yumリポジトリの設定

    > sudo su

    上記コマンドの後、以下のファイルを作成してください。

    /etc/yum.repos.d/kubernetes.repo

    [kubernetes]
    name=Kubernetes
    baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=1
    repo_gpgcheck=0
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

    その後、以下を入力し権限を設定してください。

    # chown root:root /etc/yum.repos.d/kubernetes.repo
    # chmod 644 /etc/yum.repos.d/kubernetes.repo
    # exit
    >

    ■Kubernetesインストール

    メディアパックに入っている下記のパッケージをコピーしてください。

    【CentOSの場合】

    • ebtables-2.0.10-16.el7.x86_64.rpm
    • 6cf7336247f0cee728548c92956baeb267d544740c7e80e7b3c0aa37209367b4-kubeadm-1.10.12-0.x86_64.rpm
    • fe33057ffe95bfae65e2f269e1b05e99308853176e24a4d027bc082b471a07c0-kubernetes-cni-0.6.0-0.x86_64.rpm
    • socat-1.7.3.2-2.el7.x86_64.rpm
    • 3d82ae28cd39aa5f80b5b68b74d63b4a4c84b31ba7973c08b8ae72c1e4eaeade-kubectl-1.10.12-0.x86_64.rpm
    • 2f6f9dbc0cefa96e1282ec67151f4975781be2cc95c0575b8e8a3fd7ba2e19ad-kubelet-1.10.12-0.x86_64.rpm
    • 53edc739a0e51a4c17794de26b13ee5df939bd3161b37f503fe2af8980b41a89-cri-tools-1.12.0-0.x86_64.rpm
    • tcp_wrappers-libs-7.6-77.el7.x86_64.rpm

    【RHELの場合】

    • 6cf7336247f0cee728548c92956baeb267d544740c7e80e7b3c0aa37209367b4-kubeadm-1.10.12-0.x86_64.rpm
    • fe33057ffe95bfae65e2f269e1b05e99308853176e24a4d027bc082b471a07c0-kubernetes-cni-0.6.0-0.x86_64.rpm
    • 3d82ae28cd39aa5f80b5b68b74d63b4a4c84b31ba7973c08b8ae72c1e4eaeade-kubectl-1.10.12-0.x86_64.rpm
    • 2f6f9dbc0cefa96e1282ec67151f4975781be2cc95c0575b8e8a3fd7ba2e19ad-kubelet-1.10.12-0.x86_64.rpm
    • 53edc739a0e51a4c17794de26b13ee5df939bd3161b37f503fe2af8980b41a89-cri-tools-1.12.0-0.x86_64.rpm

    コピーしたパッケージの存在するディレクトリで実行してください。

    下記の$IPADDRには、az1_common_management_networkに割り当てたIPアドレスを指定します。

    【CentOSの場合】

    > sudo su
    # yum -y localinstall ebtables-2.0.10-16.el7.x86_64.rpm \
    6cf7336247f0cee728548c92956baeb267d544740c7e80e7b3c0aa37209367b4-kubeadm-1.10.12-0.x86_64.rpm \
    fe33057ffe95bfae65e2f269e1b05e99308853176e24a4d027bc082b471a07c0-kubernetes-cni-0.6.0-0.x86_64.rpm \
    socat-1.7.3.2-2.el7.x86_64.rpm \
    3d82ae28cd39aa5f80b5b68b74d63b4a4c84b31ba7973c08b8ae72c1e4eaeade-kubectl-1.10.12-0.x86_64.rpm \
    2f6f9dbc0cefa96e1282ec67151f4975781be2cc95c0575b8e8a3fd7ba2e19ad-kubelet-1.10.12-0.x86_64.rpm \
    53edc739a0e51a4c17794de26b13ee5df939bd3161b37f503fe2af8980b41a89-cri-tools-1.12.0-0.x86_64.rpm \
    tcp_wrappers-libs-7.6-77.el7.x86_64.rpm
    # sed -i 's/cgroup-driver=systemd/cgroup-driver=cgroupfs/' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    # sed -ri 's/cluster-dns=[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/cluster-dns=10.1.0.10/' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    # echo "Environment=\"KUBELET_EXTRA_ARGS=--node-ip=$IPADDR\"" >> /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    # systemctl enable kubelet
    # systemctl daemon-reload
    # systemctl restart kubelet
    # exit

    【RHELの場合】

    > sudo su
    # yum -y install ebtables-2.0.10-16.el7 \
    socat-1.7.3.2-2.el7 \
    tcp_wrappers-libs-7.6-77.el7
    # yum -y localinstall \
    6cf7336247f0cee728548c92956baeb267d544740c7e80e7b3c0aa37209367b4-kubeadm-1.10.12-0.x86_64.rpm \
    fe33057ffe95bfae65e2f269e1b05e99308853176e24a4d027bc082b471a07c0-kubernetes-cni-0.6.0-0.x86_64.rpm \
    3d82ae28cd39aa5f80b5b68b74d63b4a4c84b31ba7973c08b8ae72c1e4eaeade-kubectl-1.10.12-0.x86_64.rpm \
    2f6f9dbc0cefa96e1282ec67151f4975781be2cc95c0575b8e8a3fd7ba2e19ad-kubelet-1.10.12-0.x86_64.rpm \
    53edc739a0e51a4c17794de26b13ee5df939bd3161b37f503fe2af8980b41a89-cri-tools-1.12.0-0.x86_64.rpm
    # sed -i 's/cgroup-driver=systemd/cgroup-driver=cgroupfs/' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    # sed -ri 's/cluster-dns=[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/cluster-dns=10.1.0.10/' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    # echo "Environment=\"KUBELET_EXTRA_ARGS=--node-ip=$IPADDR\"" >> /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    # systemctl enable kubelet
    # systemctl daemon-reload
    # systemctl restart kubelet
    # exit

    ■カーネルパラメーターの設定

    /etc/sysctl.confに下記のパラメーターを設定し保存後、sysctl -pコマンドを実行します。

    • net.ipv4.ip_forward = 1
    • net.bridge.bridge-nf-call-ip6tables = 1
    • net.bridge.bridge-nf-call-iptables = 1

    ■kubeadm設定

    Kubernetes masterサーバでトークンを発行します。

    > sudo kubeadm token create

    上記で発行されたトークンを指定して、クラスタに参加します。

    > sudo kubeadm join --token <トークン> \
      172.16.2.0:6443 --discovery-token-unsafe-skip-ca-verification --ignore-preflight-errors=CRI

    ■ログローテーションのインストール

    【CentOSの場合】

    メディアパックに入っている下記のパッケージをコピーしてください。

    • logrotate-3.8.6-15.el7.x86_64.rpm

    コピーしたパッケージの存在するディレクトリで実行してください。

    > sudo yum -y localinstall logrotate-3.8.6-15.el7.x86_64.rpm

    【RHELの場合】

    > sudo yum install -y logrotate-3.8.6-15.el7

    ■ログローテーションの設定

    下記の2つのファイルを作成します。

    /etc/logrotate.d/syslog

    /var/log/cron
    /var/log/maillog
    /var/log/messages
    /var/log/secure
    /var/log/spooler
    {
        size 5M
        daily
        rotate 14
        missingok
        sharedscripts
        compress
        postrotate
            /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        endscript
    }

    /etc/logrotate.d/tuned

    /var/log/tuned/tuned.log
    {
        size 1M
        daily
        rotate 14
        missingok
        copytruncate
    }

    作成したファイルの権限を変更します。

    > sudo chown root:root /etc/logrotate.d/syslog
    > sudo chown root:root /etc/logrotate.d/tuned
    > sudo chmod 644 /etc/logrotate.d/syslog
    > sudo chmod 644 /etc/logrotate.d/tuned

    ■LoadBalancerへのインスタンスの追加

    • az1_lb_prv_k8s

    上記の名前を持つLoadBalancerの負荷分散対象(メンバー)として、追加したサーバのインスタンスIDの追加を行ってください。

    ご利用のIaaSがFUJITSU Cloud service for OSSの場合、作成したサーバのインスタンスIDを確認した上で、APIを使用してインスタンスIDの追加を行う必要があります。 インスタンスの登録についての詳細はIaaS APIリファレンスを参照してください。

  3. API Proxyへの振分け設定

    API Proxyへの振分け設定の追加手順については「操作ガイド」の「振り分け先ノードの追加および削除」を参照してください。