kubernetes 1.8インストールスクリプトのノード

5694 ワード

今回の使用環境は次のとおりです.
  • CentOs 7.3
  • Etcd v3.2.9

  • IP
    コンポーネント
    192.168.2.11
    etcd1
    192.168.2.12
    etcd1
    192.168.2.13
    etcd1
    192.168.2.1
    ホスト
    各仮想マシンにetcdが事前にインストールされています
    足どりはホスト上で実行され、ホストには密sshのない各サーバが必要です.ホストにcfsslをインストールする必要があります
    kubernetes 1.8インストールスクリプトは全部で3つのスクリプトがあり、各スクリプトは対応する名前のフォルダの下に置く必要があります.3つのフォルダは同じ親ディレクトリの下にある必要があります.後のスクリプトは前のスクリプトで生成する*を使用する必要があります.pem
    #!/bin/bash
    #********************************************************************
    #Author:      bravewang
    #QQ:          6142553
    ##blog:       http://brave666.blog.51cto.com/
    #Description: Kubernetes Master install
    #Date:        2017-11-14
    #********************************************************************
    export host1=192.168.2.11
    export host2=192.168.2.12
    export host3=192.168.2.13
    export host4=192.168.2.14
    export host5=192.168.2.15
    export zhuji="$host4 $host5 "
    
    cat < config
    ###
    # kubernetes system config
    #
    # The following values are used to configure various aspects of all
    # kubernetes services, including
    #
    #   kube-apiserver.service
    #   kube-controller-manager.service
    #   kube-scheduler.service
    #   kubelet.service
    #   kube-proxy.service
    # logging to stderr means we get it in the systemd journal
    KUBE_LOGTOSTDERR="--logtostderr=true"
    
    # journal message level, 0 is debug
    KUBE_LOG_LEVEL="--v=2"
    
    # Should this cluster be allowed to run privileged docker containers
    KUBE_ALLOW_PRIV="--allow-privileged=true"
    
    # How the controller-manager, scheduler, and proxy find the apiserver
    # KUBE_MASTER="--master=http://127.0.0.1:8080"
    EOF
    
    cat < nginx.conf
    error_log stderr notice;
    
    worker_processes auto;
    events {
      multi_accept on;
      use epoll;
      worker_connections 1024;
    }
    
    stream {
        upstream kube_apiserver {
            least_conn;
            server $host1:6443;
            server $host2:6443;
            server $host3:6443;
        }
    
        server {
            listen        0.0.0.0:6443;
            proxy_pass    kube_apiserver;
            proxy_timeout 10m;
            proxy_connect_timeout 1s;
        }
    }
    EOF
    cat < nginx-proxy.service
    [Unit]
    Description=kubernetes apiserver docker wrapper
    Wants=docker.socket
    After=docker.service
    
    [Service]
    User=root
    PermissionsStartOnly=true
    ExecStart=/usr/bin/docker run -p 127.0.0.1:6443:6443 \\
                                  -v /etc/nginx:/etc/nginx \\
                                  --name nginx-proxy \\
                                  --network=host \\
                                  --restart=on-failure:5 \\
                                  --memory=512M \\
                                  nginx
    ExecStartPre=-/usr/bin/docker rm -f nginx-proxy
    ExecStop=/usr/bin/docker stop nginx-proxy
    Restart=always
    RestartSec=15s
    TimeoutStartSec=30s
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    peizhi()
    {
    cat < proxy${IP##*.}
    ###
    # kubernetes proxy config
    # default config should be adequate
    # Add your own!
    KUBE_PROXY_ARGS="--bind-address=$IP \\
                     --hostname-override=docker${IP##*.} \\
                     --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \\
                     --cluster-cidr=10.254.0.0/16"
    EOF
    
    cat < kubelet${IP##*.}
    ###
    # 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=$IP"
    
    # 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=docker${IP##*.}"
    
    # location of the api-server
    # KUBELET_API_SERVER=""
    
    # Add your own!
    KUBELET_ARGS="--cgroup-driver=cgroupfs \\
                  --cluster-dns=10.254.0.2 \\
                  --resolv-conf=/etc/resolv.conf \\
                  --experimental-bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig \\
                  --kubeconfig=/etc/kubernetes/kubelet.kubeconfig \\
                  --fail-swap-on=false \\
                  --cert-dir=/etc/kubernetes/ssl \\
                  --cluster-domain=cluster.local. \\
                  --hairpin-mode=promiscuous-bridge \\
                  --serialize-p_w_picpath-pulls=false \\
                  --pod-infra-container-p_w_picpath=gcr.io/google_containers/pause-amd64:3.0"
    EOF
    
    ssh root@$IP hostnamectl set-hostname docker${IP##*.}
    ssh root@$IP mkdir /etc/kubernetes/ssl
    scp ../Master/*.pem root@$IP:/etc/kubernetes/ssl
    scp ../Master/*.kubeconfig ../Master/token.csv ../Master/audit-policy.yaml root@$IP:/etc/kubernetes
    ssh root@$IP chown -R kube:kube /etc/kubernetes/ssl
    ssh root@$IP mkdir -p /etc/etcd/ssl
    scp ../etcd/*.pem root@$IP:/etc/etcd/ssl
    ssh root@$IP chmod -R 644 /etc/etcd/ssl/*
    ssh root@$IP chmod 755 /etc/etcd/ssl
    
    scp kubelet${IP##*.} root@$IP:/etc/kubernetes/kubelet
    scp proxy${IP##*.} root@$IP:/etc/kubernetes/proxy
    scp config root@$IP:/etc/kubernetes/config
    ssh root@$IP mkdir -p /etc/nginx/
    scp nginx.conf root@$IP:/etc/nginx/nginx.conf
    ssh root@$IP chmod +r /etc/nginx/nginx.conf
    scp nginx-proxy.service root@$IP:/etc/systemd/system/nginx-proxy.service
    ssh root@$IP systemctl daemon-reload
    #ssh root@$IP systemctl start nginx-proxy
    sleep 2
    ssh root@$IP systemctl start nginx-proxy
    sleep 2
    ssh root@$IP systemctl enable nginx-proxy
    sleep 2
    ssh root@$IP systemctl start kubelet
    sleep 2
    ssh root@$IP systemctl enable kubelet
    sleep 2
    ssh root@$IP systemctl start kube-proxy
    sleep 2
    ssh root@$IP systemctl enable kube-proxy
    sleep 2
    ssh root@$IP systemctl restart kubelet
    
    }
    
    for IP in $zhuji ;do
    peizhi
    done

    スクリプトが正常に実行されると、Masterノードでkubectl get csrを使用するとNode申請が表示されます.
    次のコマンドを使用して承認します.
    kubectl get csr | grep Pending | awk '{print $1}' | xargs kubectl certificate approve