本次使用环境為:

  • 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 << EOF > 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 << EOF > 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 << EOF > 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 << EOF > 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 << EOF > 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