kubernetes 1.9.1クラスタ


kubernetes-HA高可用性導入
1.配置アーキテクチャ
  • kubernetesコンポーネント説明
  • kube-apiserver:クラスタコア、クラスタAPIインタフェース、クラスタの各コンポーネント通信の中枢;クラスタセキュリティ制御;
    etcd:クラスタのデータセンターは、クラスタの構成と状態情報を格納するために使用され、非常に重要であり、データが失われるとクラスタは回復できない.したがって、高可用性クラスタの導入は、まずetcdが高可用性クラスタであることである.
    kube-scheduler:クラスタPodのスケジューリングセンター;デフォルトのkubeadmインストールの場合--leader-electパラメータはtrueに設定されており、masterクラスタに1つのkube-schedulerだけがアクティブであることを保証します.
    kube-controller-manager:クラスタ状態マネージャは、クラスタ状態が期待と異なる場合、kcmはクラスタを所望の状態に戻すように努力します.
    kubelet:kubernetes node agentは、node上のdocker engineとの付き合いを担当しています.
    kube-proxy:nodeごとに、サービスvipからendpoint podへのトラフィック転送を担当し、現在は主にiptablesルールを設定することによって実現されています.
    2.環境
  • 172.16.50.121 morepay01 CentOS 7.4.1708
  • 172.16.50.122 morepay02 CentOS 7.4.1708
  • 172.16.50.123 morepay03 CentOS 7.4.1708
  • 172.16.50.125 morepay04 CentOS 7.4.1708

  • 3.基礎配置
    3.1.秘密登録の設定
    すべてのパッケージはサーバ172.16.5.1211にアップロードされる.ミラーのコピー、プロファイルのコピーを容易にするために.構成172.16.5.1211他のサーバへの非機密ログイン
  • morepay 01ホストssh-keygen for i in 121 122 123 125;do ssh-copy-id [email protected].$i ; done

  • 3.2.パラメータ調整
    すべてのホスト
    morepay 01ホスト
      `/etc/sysctl.d/k8s.conf `      :
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1

    他のホストへの配布
    for i in 122 123 125 ; do scp /etc/sysctl.d/k8s.conf [email protected].$i:/etc/sysctl.d/k8s.conf ; done

    効力が生ずる
    for i in 121 122 123 125 ; do ssh [email protected].$i  "sysctl -p /etc/sysctl.d/k8s.conf " ; done

    ヒント
    sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
    sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory

    実行コマンドmodprobe br_netfilter
    3.3.SELINUXを無効にする
    for i in 121 122 123 125 ; do ssh [email protected].$i  'setenforce 0 && sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/sysconfig/selinux' ; done 

    3.4.hosts構成
    すべてのホストの追加
  • 172.16.50.121 morepay01
  • 172.16.50.122 morepay02
  • 172.16.50.123 morepay03
  • 172.16.50.125 morepay04 for i in 122 123 125 ; do scp/etc/hosts [email protected].$i:/etc/hosts ; done

  • 4.etcdクラスタ配置
    参照先:https://blog.51cto.com/11889458/2105040
    ステップ略
    5.Dockerインストール
    for i in 121 122 123 125 ; do ssh [email protected].$i  "yum install docker -y" ; done
    
    for i in 121 122 123 125 ; do ssh [email protected].$i  "systemctl start docker.service && systemctl status docker.service && systemctl enable docker.service" ; done

    6.kubernetesコンポーネントのインストール
    for i in 121 122 123 125 ; do ssh [email protected].$i  "mkdir /data/soft -p" ; done  
    
    cd /data/soft  

    科学的なインターネットダウンロードコンポーネント
  • kubeadm-1.9.1-0.x86_64.rpm
  • kubectl-1.9.1-0.x86_64.rpm
  • kubelet-1.9.1-0.x86_64.rpm
  • kubernetes-cni-0.6.0-0.x86_64.rpm

  • 別のサーバへのコピー
    for i in 122 123 125 ; do scp /data/soft/* [email protected].$i:/data/soft ; done

    インストール
    for i in 121 122 123 125 ; do ssh [email protected].$i  "yum install  /data/soft/* -y" ; done 

    クbelet起動の設定
    for i in 121 122 123 125 ; do ssh [email protected].$i  "systemctl enable kubelet.service" ; done 

    7.クラスタの初期化
    7.1.kubernetesベースミラーのインポート
    科学的なインターネットダウンロードdockerミラー
  • k8s-dns-dnsmasq-nanny-amd64_1.14.7.tar
  • k8s-dns-kube-dns-amd64_1.14.7.tar
  • k8s-dns-sidecar-amd64_1.14.7.tar
  • kube-apiserver-amd64_v1.9.1.tar
  • kube-controller-manager-amd64_v1.9.1.tar
  • kube-proxy-amd64_v1.9.1.tar
  • kube-scheduler-amd64_v1.9.1.tar
  • pause-amd64_3.0.tar

  • ミラーを別のサーバに配布
    for i in 121 122 123 125 ; do ssh [email protected].$i  "mkdir /data/images" ; done  
    for i in 122 123 125 ; do scp /data/images/* [email protected].$i:/data/images ; done

    ミラーのインポート
    for j in `ls /data/images`; do docker load --input /data/images/$j ; done  #       
    
    docker images
    REPOSITORY                                               TAG                 IMAGE ID            CREATED             SIZE
    gcr.io/google_containers/kube-apiserver-amd64            v1.9.1              e313a3e9d78d        6 days ago          210.4 MB
    gcr.io/google_containers/kube-controller-manager-amd64   v1.9.1              4978f9a64966        6 days ago          137.8 MB
    gcr.io/google_containers/kube-proxy-amd64                v1.9.1              e470f20528f9        6 days ago          109.1 MB
    gcr.io/google_containers/kube-scheduler-amd64            v1.9.1              677911f7ae8f        6 days ago          62.7 MB
    gcr.io/google_containers/k8s-dns-sidecar-amd64           1.14.7              db76ee297b85        11 weeks ago        42.03 MB
    gcr.io/google_containers/k8s-dns-kube-dns-amd64          1.14.7              5d049a8c4eec        11 weeks ago        50.27 MB
    gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64     1.14.7              5feec37454f4        11 weeks ago        40.95 MB
    gcr.io/google_containers/pause-amd64                     3.0                 99e59f495ffa        20 months ago       746.9 kB

    7.2.初期化
    プロファイルconfig.yamlを作成するには、次の手順に従います.
    apiVersion: kubeadm.k8s.io/v1alpha1
    kind: MasterConfiguration
    kubernetesVersion: v1.9.1
    networking:
      podSubnet: 10.244.0.0/16
    apiServerCertSANs:
    - morepay01
    - morepay02
    - morepay03
    - 172.16.50.121
    - 172.16.50.122
    - 172.16.50.123
    - 172.16.50.200
    apiServerExtraArgs:
      endpoint-reconciler-type: "lease"
    etcd:
      endpoints:
      - http://172.16.50.121:2379
      - http://172.16.50.122:2379
      - http://172.16.50.123:2379
    token: "deed3a.b3542929fcbce0f0"
    tokenTTL: "0"

    172.16.5.2000をkeepとして
    kubeadmブートクラスタmorepay 01ホスト
    kubeadm init --config=config.yaml 

    コピー/etc/kubernetes/pki/ディレクトリをmorepay 02,morepay 03ホスト
    for i in 122 123 ; do ssh [email protected].$i  "mkdir /etc/kubernetes/pki" ; done 
    for i in 122 123 ; do scp /etc/kubernetes/pki/* [email protected].$i:/etc/kubernetes/pki ; done

    kubeadmブートクラスタmorepay 02,morepay 03ホスト
    for i in 122 123 ; do ssh [email protected].$i  "kubeadm init --config=/data/soft/config.yaml" ; done  

    プロファイルのコピー
    for i in 121 122 123 ; do ssh [email protected].$i  "mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config" ; done

    kubernetesクラスタのステータスの表示
    kubectl get pod --all-namespaces
    NAMESPACE     NAME                                READY     STATUS    RESTARTS   AGE
    kube-system   kube-apiserver-morepay01            1/1       Running   0          17m
    kube-system   kube-apiserver-morepay02            1/1       Running   0          1m
    kube-system   kube-apiserver-morepay03            1/1       Running   0          29s
    kube-system   kube-controller-manager-morepay01   1/1       Running   0          17m
    kube-system   kube-controller-manager-morepay02   1/1       Running   0          1m
    kube-system   kube-controller-manager-morepay03   1/1       Running   0          41s
    kube-system   kube-dns-6f4fd4bdf-hh9zg            0/3       Pending   0          18m
    kube-system   kube-proxy-48k7v                    1/1       Running   0          1m
    kube-system   kube-proxy-m6m7j                    1/1       Running   0          2m
    kube-system   kube-proxy-rl5kz                    1/1       Running   0          18m
    kube-system   kube-scheduler-morepay01            1/1       Running   0          17m
    kube-system   kube-scheduler-morepay02            1/1       Running   0          1m
    kube-system   kube-scheduler-morepay03            1/1       Running   0          35s

    7.3.flannelをインストールする;ネットワークプラグイン
    kubectl create -f kube-flannel.yml 

    pods運転状態の表示
    kubectl get pod --all-namespaces
    NAMESPACE     NAME                                READY     STATUS    RESTARTS   AGE
    kube-system   kube-apiserver-morepay01            1/1       Running   0          21m
    kube-system   kube-apiserver-morepay02            1/1       Running   0          5m
    kube-system   kube-apiserver-morepay03            1/1       Running   0          4m
    kube-system   kube-controller-manager-morepay01   1/1       Running   0          21m
    kube-system   kube-controller-manager-morepay02   1/1       Running   0          5m
    kube-system   kube-controller-manager-morepay03   1/1       Running   0          4m
    kube-system   kube-dns-6f4fd4bdf-hh9zg            3/3       Running   0          22m
    kube-system   kube-flannel-ds-6vwbs               1/1       Running   0          1m
    kube-system   kube-flannel-ds-7gqv2               1/1       Running   0          1m
    kube-system   kube-flannel-ds-k8dp9               1/1       Running   0          1m
    kube-system   kube-proxy-48k7v                    1/1       Running   0          6m
    kube-system   kube-proxy-m6m7j                    1/1       Running   0          6m
    kube-system   kube-proxy-rl5kz                    1/1       Running   0          22m
    kube-system   kube-scheduler-morepay01            1/1       Running   0          21m
    kube-system   kube-scheduler-morepay02            1/1       Running   0          5m
    kube-system   kube-scheduler-morepay03            1/1       Running   0          4m

    8.keepalived取付
    for i in 121 122 123 ; do ssh [email protected].$i  "yum install keepalived -y" ; done 
    for i in 121 122 123 ; do ssh [email protected].$i  "systemctl enable keepalived" ; done  

    健康診断スクリプトの作成check_apiserver.sh;次のようになります.
    #!/bin/bash
    err=0
    for k in $( seq 1 10 )
    do
        check_code=$(ps -ef|grep kube-apiserver | wc -l)
        if [ "$check_code" = "1" ]; then
            err=$(expr $err + 1)
            sleep 5
            continue
        else
            err=0
            break
        fi
    done
    
    if [ "$err" != "0" ]; then
        echo "systemctl stop keepalived"
        /usr/bin/systemctl stop keepalived
        exit 1
    else
        exit 0
    fi

    スクリプトをmorepay 01、morepay 02、morepay 03にコピーします.実行権限の追加
    for i in 121 122 123 ; do scp /data/soft/check_apiserver.sh [email protected].$i:/etc/keepalived/ ; done
    for i in 121 122 123 ; do ssh [email protected].$i  "chmod +x /etc/keepalived/check_apiserver.sh" ; done

    keepalived.confプロファイルを作成します.次のようになります.
    ! Configuration File for keepalived
    global_defs {
        router_id LVS_DEVEL
    }
    vrrp_script chk_apiserver {
        script "/etc/keepalived/check_apiserver.sh"
        interval 60
        weight -5
        fall 3  
        rise 2
    }
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 53
        priority 100
        advert_int 2
        authentication {
            auth_type PASS
            auth_pass 4be37dc3b4c90194d1600c483e10ad1d
        }
        virtual_ipaddress {
            172.16.50.200
        }
        track_script {
           chk_apiserver
        }
    }

    プロファイルをmorepay 01,morepay 02,morepay 03にコピー
    for i in 121 122 123 ; do scp /data/soft/keepalived.conf [email protected].$i:/etc/keepalived/keepalived.conf ; done

    keepalivedの起動
    for i in 121 122 123 ; do ssh [email protected].$i  "systemctl start keepalived" ; done

    9.kubernetesがnodeノードに追加
    for i in 125 ; do echo $i ; ssh [email protected].$i  "kubeadm join --token deed3a.b3542929fcbce0f0 172.16.50.200:6443 --discovery-token-ca-cert-hash sha256:d49e5784284ad741aaa8259b9987d52a394b5d76d137d179951f4979e27eb58d" ; done   

    10.kube-proxy構成
    kubectl edit -n kube-system configmap/kube-proxy
    
    server: https://172.16.50.200:6443

    podの再作成を再開
    kubectl get pods --all-namespaces -o wide | grep proxy
    kubectl delete pod -n kube-system kube-proxy-xxxxx

    11.プラグインのインストール(オプション)
    kubectl create -f heapster.yaml 
    kubectl create -f influxdb.yaml 
    kubectl create -f kubernetes-dashboard.yaml 
    kubectl create -f grafana.yaml 

    12.アクセスダッシュボード
    https://172.16.50.200:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
    12.1.証明書のエクスポート
    cat /etc/kubernetes/admin.conf | grep client-certificate-data | awk -F ': ' '{print $2}' | base64 -d > /etc/kubernetes/pki/client.crt
    cat /etc/kubernetes/admin.conf | grep client-key-data | awk -F ': ' '{print $2}' | base64 -d > /etc/kubernetes/pki/client.key
    openssl pkcs12 -export -inkey /etc/kubernetes/pki/client.key -in /etc/kubernetes/pki/client.crt -out /etc/kubernetes/pki/client.pfx

    ダウンロード/etc/kubernetes/pki/client.pfxファイルインポートブラウザ
    12.2.Tokenの表示
    kubectl get Secret --all-namespaces | grep dashboard-admin
    
    kubectl describe Secret kubernetes-dashboard-admin-token-xxxx -n kube-system 

    13.自動伸縮
    サービスを作成する必要があります
    kubectl create -f deploy.yaml   

    テスト、deploymentの作成
    kubectl run php-apache --image=172.16.50.116/google_containers/hpa-example:latest --requests=cpu=200m --expose --port=80

    horizontalpodautoscalersの作成
    kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

    hpaの表示
    kubectl get hpa
    NAME         REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
    php-apache   Deployment/php-apache   0% / 50%   1         10        1          9m

    cpu負荷の増加
    while true; do wget -q -O- 172.16.50.121:30150; done 
    
       hpa
    kubectl get hpa
    NAME         REFERENCE               TARGETS      MINPODS   MAXPODS   REPLICAS   AGE
    php-apache   Deployment/php-apache   290% / 50%   1         10        4          11m

    14.証明書の手動生成
    参照先:https://github.com/fandaye/k8s-tls