centos 7 yumインストールkubernetes cluster 1.0


ここでは、1つのmasterと2つのminionsを含むkubernetes clusterをインストールする方法を示します.
環境要件:
centos 7 64ビットシステム3台マシン
master:192.168.5.131
minions:192.168.5.132
minions:192.168.5.133
kubernetesのコンポーネント:
etcd
flannel
kube-apiserver
kube-controller-manager
kube-scheduler
kubelet
kube-proxy
一、centos 7に配備
図は後で添える
前提条件
  • 各マシンがiptablesを無効にするdockerのiptablesとの競合を回避する:
  • $ systemctl stop firewalld
    $ systemctl disable firewalld

    2.NTPを取り付け、正常に動作していることを確認する
    $ yum -y install ntp
    $ systemctl start ntpd
    $ systemctl enable ntpd

    3.2個のminionsマシン取付docker
    yum install docker -y
    yum update -y
    reboot

    CentOSシステムでは、devicemapperをストレージバックエンドとして使用し、最初にdockerをインストールするとloopbackが使用され、dockerの起動エラーが発生します.アップデートしてから起動する必要があります
    ps aux|grep dockerの結果は次の通りです.
     /usr/bin/docker -d --selinux-enabled --storage-driver devicemapper --storage-opt dm.fs=xfs --storage-opt dm.thinpooldev=/dev/mapper/VolGroup00-docker--pool

    二、kubernetes masterを取り付ける
    次の手順はすべてmasterで実行します.
  • yumでetcdとkubernetes
  • をインストール
    yum -y install etcd kubernetes

    2.プロファイル/etc/etcd/etcdを変更する.confは、etcdがすべてのアドレスを傍受していることを確認し、以下のように変更します.
    ETCD_NAME=default
    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
    ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

    3.プロファイル/etc/kubernetes/apiserverを変更し、以下のように変更します.
    KUBE_API_ADDRESS="--address=0.0.0.0"
    KUBE_API_PORT="--port=8080"
    KUBELET_PORT="--kubelet_port=10250"
    KUBE_ETCD_SERVERS="--etcd_servers=http://127.0.0.1:2379"
    KUBE_SERVICE_ADDRESSES="--portal_net=10.254.0.0/16"
    KUBE_ADMISSION_CONTROL="--admission_control=NamespaceAutoProvision,LimitRanger,ResourceQuota"
    KUBE_API_ARGS=""

    4.プロファイル/etc/kubernetes/controller-managerを変更し、minions ipアドレスを定義する
    KUBELET_ADDRESSES="--machines=192.168.5.132,192.168.5.133"

    5.サービスの開始
    for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do 
        systemctl restart $SERVICES
        systemctl enable $SERVICES
        systemctl status $SERVICES 
    done

    6.flannelネットワーク構成をetcdに定義し、この構成は各minionsのflannelサービスにプッシュされます.
    etcdctl mk /coreos.com/network/config '{"Network":"172.17.0.0/16"}'

    三、minionsのインストール
    以下の操作はminions 1,minions 2で実行します.
  • flannelとkubernetes
  • をインストール
    yum -y install flannel kubernetes

    2.etcdサービスのflannelを構成し、プロファイル/etc/sysconfig/flanneldを変更する
    FLANNEL_ETCD="http://192.168.5.131:2379"

    3.kubernetesプロファイルを変更し、masterを指定します./etc/kubernetes/config
    KUBE_MASTER="--master=http://192.168.5.131:8080"

    4.クbeletサービスを構成します./etc/kubernetes/kubelet 
    minions1:
    ###
    # kubernetes kubelet (minion) config
    
    # The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
    KUBELET_ADDRESS="--address=192.168.5.132"
    
    # The port for the info server to serve on
    KUBELET_PORT="--port=10250"
    
    # You may leave this blank to use the actual hostname
    KUBELET_HOSTNAME="--hostname_override=192.168.5.132"
    
    # location of the api-server
    KUBELET_API_SERVER="--api_servers=http://192.168.5.131:8080"
    
    # Add your own!
    KUBELET_ARGS=""

    minions2:
    ###
    # kubernetes kubelet (minion) config
    
    # The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
    KUBELET_ADDRESS="--address=192.168.5.133"
    
    # The port for the info server to serve on
    KUBELET_PORT="--port=10250"
    
    # You may leave this blank to use the actual hostname
    KUBELET_HOSTNAME="--hostname_override=192.168.5.133"
    
    # location of the api-server
    KUBELET_API_SERVER="--api_servers=http://192.168.5.131:8080"
    
    # Add your own!
    KUBELET_ARGS=""

    5.サービスの開始
    for SERVICES in kube-proxy kubelet docker flanneld; do 
        systemctl restart $SERVICES
        systemctl enable $SERVICES
        systemctl status $SERVICES 
    done

    6.minionsごとに2つのNICを見ることができます:docker 0とflannel 0、この2つのNICのipは異なる機械のipアドレスで違います
    minion1:
     ip a | grep flannel | grep inet
    inet 172.17.20.0/16 scope global flannel0

    minion2:
    $ ip a | grep flannel | grep inet
    inet 172.17.21.0/16 scope global flannel0

    7.マスターにログインし、minionsの状態を確認する
    [root@k8s_master ~]# kubectl get nodes
    NAME            LABELS                                 STATUS
    192.168.5.132   kubernetes.io/hostname=192.168.5.132   Ready
    192.168.5.133   kubernetes.io/hostname=192.168.5.133   Ready

    素晴らしい!kubernetesのクラスタ構成が完了しました.podを始めましょう.
    podの作成中にエラーが発生した場合は
    is forbidden: no API token found for service account default/default, retry after the token is automatically created and added to the service account

    apiserverで次のように構成されている場合:
    # default admission control policies#
    KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"

    取り除く必要がある
    SecurityContextDeny,ServiceAccount