CentOS 7インストールKubernetesレコード(ca認証付き)

20004 ワード

CentOS 7インストールKubernetesレコード(ca認証付き)


一、環境準備


サーバに静的IPを配置するのが望ましい.そうしないと、シャットダウン後の多くの場所のipを修正する必要がある.参考記事

1.すべてのノードがホスト名で解決できるようにhostを構成します。


ホスト名は上の記事リンクを参照して変更できます
$ vi /etc/hosts
#      (ip   servername      )
172.16.136.201 server01
172.16.136.202 server02
172.16.136.203 server03

2.すべてのノードがファイアウォールを閉じる

systemctl disable firewalld
systemctl stop firewalld

3.すべてのノードがSELinuxを無効にする

setenforce 0

4.すべてのノードがNetworkManagerをシャットダウンする(仮想マシン環境)

systemctl stop NetworkManager
systemctl disable NetworkManager

VM環境ではFailed to start LSB: Bring up/down networking.エラーが発生し、networkが起動できない場合があります.

5.swapを閉じる


性能のために
swapoff -a

二、Dockerのインストール(すべてのノード)


1.インストールスクリプト

wget -qO- https://get.docker.com/ | sh

2.dockerのネットワーク転送ルールの変更

vi /lib/systemd/system/docker.service
#  ExecStart=xxx,         ,    :(k8s     )
ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT

3.オプションでdockerにアクセラレータを設定


DaoCloudにアカウントを登録して無料で申請できます.ページの下部にあるアクセルオプションです.
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://0ed63f2c.m.daocloud.io

4.構成を有効にしdockerを起動する

systemctl daemon-reload
systemctl start docker
systemctl enable docker

5.インストール完了の確認

$ docker version

Client:
 Version:       18.03.0-ce
 API version:   1.37
 Go version:    go1.9.4
 Git commit:    0520e24
 Built: Wed Mar 21 23:09:15 2018
 OS/Arch:       linux/amd64
 Experimental:  false
 Orchestrator:  swarm

Server:
 Engine:
  Version:      18.03.0-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.4
  Git commit:   0520e24
  Built:        Wed Mar 21 23:13:03 2018
  OS/Arch:      linux/amd64
  Experimental: false

三、Kubernetesインストール


1.システムパラメータの設定(すべてのノード)

  • は、bridgeのデータを処理することなくルーティング転送を許可する
  • .
    #      
    cat < /etc/sysctl.d/k8s.conf
    net.ipv4.ip_forward = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    #      
    sysctl -p /etc/sysctl.d/k8s.conf

    2.kubernetesバイナリファイルのダウンロード(すべてのノード)


    ダウンロードアドレス
    ダウンロードが完了したら、サーバーユーザーディレクトリにアップロードして解凍し、そのディレクトリをPATH環境変数に追加します.
    tar -zxf kubernetes-bins.tar.gz;rm -rf kubernetes-bins.tar.gz;mv kubernetes-bins bin
    #      
    vim /etc/profile
    export PATH=$PATH:/root/bin
    source /etc/profile

    3.プロファイルをダウンロードしてプロファイルを生成する(すべてのノード)

    yum install gitでGitを取り付ける
    git clone https://github.com/KingBoyWorld/kubernetes-starter

    3.1権限認証付きプロファイルの生成(すべてのノード)

    cd ~/kubernetes-starter && vi config.properties && ./gen-config.sh with-ca

    プライマリノードがhttpsを使用していることに注意してください.次の構成例です.
    #kubernetes       ,eg: /home/michael/bin
    BIN_PATH=/root/bin
    
    #    ip, eg: 192.168.1.102
    NODE_IP=172.16.136.201
    
    #etcd      , eg: http://192.168.1.102:2379
    #    etcd         。      :http://${MASTER_IP}:2379 (MASTER_IP           ip)
    ETCD_ENDPOINTS=https://172.16.136.202:2379
    
    #kubernetes   ip  , eg: 192.168.1.102
    MASTER_IP=172.16.136.202

    4.cfsslをインストールし、ルート証明書(すべてのノード)を生成


    4.1 cfssl(すべてのノード)のインストール


    証明書の生成に使用
    wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 && wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 && chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 && mv cfssl_linux-amd64 /usr/local/bin/cfssl && mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
    cfssl version

    4.2ルート証明書の生成(マスターノード)

    mkdir -p /etc/kubernetes/ca && cp ~/kubernetes-starter/target/ca/ca-config.json /etc/kubernetes/ca && cp ~/kubernetes-starter/target/ca/ca-csr.json /etc/kubernetes/ca && cd /etc/kubernetes/ca && cfssl gencert -initca ca-csr.json | cfssljson -bare ca && ls && cd ~/kubernetes-starter

    5.ETCDサービスのインストール(メインノード)


    5.1 ETCD証明書の生成(マスターノード)

    mkdir -p /etc/kubernetes/ca/etcd && cp ~/kubernetes-starter/target/ca/etcd/etcd-csr.json /etc/kubernetes/ca/etcd/ && cd /etc/kubernetes/ca/etcd/ && cfssl gencert -ca=/etc/kubernetes/ca/ca.pem -ca-key=/etc/kubernetes/ca/ca-key.pem -config=/etc/kubernetes/ca/ca-config.json -profile=kubernetes etcd-csr.json | cfssljson -bare etcd && ls && cd ~/kubernetes-starter

    5.2 ETCDのインストールと起動(メインノード)

    mkdir -p /var/lib/etcd && cp ~/kubernetes-starter/target/master-node/etcd.service /lib/systemd/system/ && systemctl daemon-reload && systemctl enable etcd && systemctl start etcd

    インストールが完了したことを確認
    $ ETCDCTL_API=3 etcdctl \
      --endpoints=https://172.16.136.202:2379  \
      --cacert=/etc/kubernetes/ca/ca.pem \
      --cert=/etc/kubernetes/ca/etcd/etcd.pem \
      --key=/etc/kubernetes/ca/etcd/etcd-key.pem \
      endpoint health
    
    #        
    https://172.16.136.202:2379 is healthy: successfully committed proposal: took = 1.04668ms

    6.APIServerのインストール(マスターノード)


    6.1証明書の生成(マスターノード)

    mkdir -p /etc/kubernetes/ca/kubernetes && cp ~/kubernetes-starter/target/ca/kubernetes/kubernetes-csr.json /etc/kubernetes/ca/kubernetes/ && cd /etc/kubernetes/ca/kubernetes/ && cfssl gencert -ca=/etc/kubernetes/ca/ca.pem -ca-key=/etc/kubernetes/ca/ca-key.pem -config=/etc/kubernetes/ca/ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes && ls && cd ~/kubernetes-starter

    6.2 token認証ファイルの生成(プライマリノード)


    ランダムtokenの生成
    $ head -c 16 /dev/urandom | od -An -t x | tr -d ' '
    8afdf3c4eb7c74018452423c29433609

    tokenを固定形式で書き込む.csv、tokenコンテンツの置き換えに注意
    echo "8afdf3c4eb7c74018452423c29433609,kubelet-bootstrap,10001,\"system:kubelet-bootstrap\"" > /etc/kubernetes/ca/kubernetes/token.csv

    6.3 APIServer(プライマリノード)の起動

    cp ~/kubernetes-starter/target/master-node/kube-apiserver.service /lib/systemd/system/ && systemctl daemon-reload && systemctl enable kube-apiserver.service && systemctl start kube-apiserver && cd ~/kubernetes-starter

    検証#ケンショウ#
    journalctl -f -u kube-apiserver

    7.ControllerManagerのインストール(メインノード)


    インストール
    cp ~/kubernetes-starter/target/master-node/kube-controller-manager.service /lib/systemd/system/ && systemctl daemon-reload && systemctl enable kube-controller-manager && systemctl start kube-controller-manager

    検証#ケンショウ#
    journalctl -f -u kube-controller-manager

    8.Schedulerのインストール(メインノード)


    インストール
    cp ~/kubernetes-starter/target/master-node/kube-scheduler.service /lib/systemd/system/ && systemctl enable kube-scheduler.service && systemctl start kube-scheduler

    検証#ケンショウ#
    journalctl -f -u kube-scheduler

    9.kubectl(プライマリノード)の構成


    9.1証明書の生成(プライマリノード)

    mkdir -p /etc/kubernetes/ca/admin && cp ~/kubernetes-starter/target/ca/admin/admin-csr.json /etc/kubernetes/ca/admin/ && cd /etc/kubernetes/ca/admin/ && cfssl gencert -ca=/etc/kubernetes/ca/ca.pem -ca-key=/etc/kubernetes/ca/ca-key.pem -config=/etc/kubernetes/ca/ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin && ls && cd ~/kubernetes-starter

    9.2 kubectlの構成(プライマリノード)


    注意IPアドレスの変更
    kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/ca/ca.pem --embed-certs=true --server=https://172.16.136.202:6443 && kubectl config set-credentials admin --client-certificate=/etc/kubernetes/ca/admin/admin.pem --embed-certs=true --client-key=/etc/kubernetes/ca/admin/admin-key.pem && kubectl config set-context kubernetes --cluster=kubernetes --user=admin && kubectl config use-context kubernetes

    生成されたファイルの内容の表示
    cat ~/.kube/config

    検証#ケンショウ#
    $ kubectl get componentstatus
    NAME                 STATUS    MESSAGE              ERROR
    controller-manager   Healthy   ok
    etcd-0               Healthy   {"health": "true"}
    scheduler            Healthy   ok

    10 calico-node(すべてのノード)の構成


    10.1証明書の生成(マスターノード)

    mkdir -p /etc/kubernetes/ca/calico && cp ~/kubernetes-starter/target/ca/calico/calico-csr.json /etc/kubernetes/ca/calico/ && cd /etc/kubernetes/ca/calico/ && cfssl gencert -ca=/etc/kubernetes/ca/ca.pem -ca-key=/etc/kubernetes/ca/ca-key.pem -config=/etc/kubernetes/ca/ca-config.json -profile=kubernetes calico-csr.json | cfssljson -bare calico && ls && cd ~/kubernetes-starter

    10.2証明書を他のマシンにコピーする(マスターノード)


    2台のマシンに/etc/kubernetesディレクトリを作成する必要がある場合があります
    scp -r /etc/kubernetes/ca/ root@172.16.136.201:/etc/kubernetes/ca/
    scp -r /etc/kubernetes/ca/ root@172.16.136.201:/etc/kubernetes/ca/

    10.2 calio-node(すべてのノード)の起動


    dockerミラーをダウンロードする必要がありますが、遅くなります.
    cp ~/kubernetes-starter/target/all-node/kube-calico.service /lib/systemd/system/ && systemctl daemon-reload && systemctl enable kube-calico && systemctl start kube-calico

    ログの表示
    journalctl -f -u kube-calico

    検証#ケンショウ#
    calicoctl node status

    11クbelet(ワークノード)のインストール


    11.1構成表示(マスターノード)

    #          clusterrole  
    $ kubectl -n kube-system get clusterrole
    #      token     
    $ cat /etc/kubernetes/ca/kubernetes/token.csv
    8afdf3c4eb7c74018452423c29433609,kubelet-bootstrap,10001,"system:kubelet-bootstrap"

    11.2環境準備


    (ワークノード)
    mkdir -p /var/lib/kubelet && mkdir -p /etc/kubernetes && mkdir -p /etc/cni/net.d

    (プライマリノード)
    kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap

    11.3 bootstrapを生成する.kubeconfigプロファイル(ワークノード)


    注意IPアドレスとtokenの置換
    kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/ca/ca.pem --embed-certs=true --server=https://172.16.136.202:6443 --kubeconfig=bootstrap.kubeconfig && kubectl config set-credentials kubelet-bootstrap --token=8afdf3c4eb7c74018452423c29433609 --kubeconfig=bootstrap.kubeconfig && kubectl config set-context default --cluster=kubernetes --user=kubelet-bootstrap --kubeconfig=bootstrap.kubeconfig && kubectl config use-context default --kubeconfig=bootstrap.kubeconfig && mv bootstrap.kubeconfig /etc/kubernetes/

    11.4 cni構成(ワークノード)

    cp ~/kubernetes-starter/target/worker-node/10-calico.conf /etc/cni/net.d/

    11.5クbeletサービスの起動(ワークノード)

    cp ~/kubernetes-starter/target/worker-node/kubelet.service /lib/systemd/system/ && systemctl daemon-reload && systemctl enable kubelet && systemctl start kubelet
    
    #  kubelet   master    worker  (  worker tls    )
    #--------*      *---------
    $ kubectl get csr|grep 'Pending' | awk '{print $1}'| xargs kubectl certificate approve
    #-----------------------------

    ログの確認
    journalctl -f -u kubelet

    12 kube-proxy(ワークノード)のインストール


    作業ディレクトリの作成(作業ノード)

    mkdir -p /var/lib/kube-proxy

    12.1証明書の生成(ワークノード)

    mkdir -p /etc/kubernetes/ca/kube-proxy && cp ~/kubernetes-starter/target/ca/kube-proxy/kube-proxy-csr.json /etc/kubernetes/ca/kube-proxy/ && cd /etc/kubernetes/ca/kube-proxy/ && cfssl gencert -ca=/etc/kubernetes/ca/ca.pem -ca-key=/etc/kubernetes/ca/ca-key.pem -config=/etc/kubernetes/ca/ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy && ls && cd ~/kubernetes-starter

    12.2 kube-proxyを生成する.kubeconfig構成(ワークノード)


    注意IPアドレスの置換
    kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/ca/ca.pem --embed-certs=true --server=https://172.16.136.202:6443 --kubeconfig=kube-proxy.kubeconfig && kubectl config set-credentials kube-proxy --client-certificate=/etc/kubernetes/ca/kube-proxy/kube-proxy.pem --client-key=/etc/kubernetes/ca/kube-proxy/kube-proxy-key.pem --embed-certs=true --kubeconfig=kube-proxy.kubeconfig && kubectl config set-context default --cluster=kubernetes --user=kube-proxy --kubeconfig=kube-proxy.kubeconfig && kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig && mv kube-proxy.kubeconfig /etc/kubernetes/kube-proxy.kubeconfig

    12.3 kube-proxy(ワークノード)の起動

    cp ~/kubernetes-starter/target/worker-node/kube-proxy.service /lib/systemd/system/ && systemctl daemon-reload && yum -y install conntrack && systemctl enable kube-proxy && systemctl start kube-proxy

    けんさ
    journalctl -f -u kube-proxy

    13 kube-dnsの配備(プライマリノード)

    kubectl create -f ~/kubernetes-starter/target/services/kube-dns.yaml

    検証#ケンショウ#
    kubectl -n kube-system get pods