一.环境准备

  1. 关闭Selinux


   vi /etc/sysconfig/selinux

   SELINUX=disabled


2. 关闭防火墙


   systemctl  stop     firewall 

   systemctl  disabled  firewall


3. 设置NTP


  保持服务器的时间一致


4. 安装git


  yum instll git -y


5. 设置hostname

        

hostnamectl --static set-hostname master1
hostnamectl --static set-hostname master2
hostnamectl --static set-hostname master3

6.

master1 192.168.93.221
master2 192.168.93.222
master3 192.168.93.223

二.拓扑环境

wKiom1hYznjxHmPpAAF4yUw7crE660.png-wh_50


  1. etcd集群:

    etcd1 192.168.93.201

    etcd2 192.168.93.202

    etcd3 192.168.93.203

  2. master集群:

    master1 192.168.93.221

    master2 192.168.93.222

    master3 192.168.93.223

  3. node节点:

    node1  192.168.92.110

  4. centos7.2mini





三.etcd集群安装


安装etcd

[root@kube ~]# yum install etcd -y


修改配置文件

vi /etc/etcd//etcd.conf 


ETCD_NAME=etcd01


ETCD_DATA_DIR="/var/lib/etcd/etcd01"


ETCD_LISTEN_PEER_URLS="http://192.168.93.201:2380"


ETCD_LISTEN_CLIENT_URLS="http://192.168.93.201:2379,http://127.0.0.1:2379"


ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.93.201:2380"


ETCD_INITIAL_CLUSTER="etcd01=http://192.168.93.201:2380,etcd02=http://192.168.93.202:2380,etcd03=http://192.168.93.203:2380"


ETCD_INITIAL_CLUSTER_STATE="new"


ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-00"


ETCD_ADVERTISE_CLIENT_URLS="http://192.168.93.201:2379"


###########################################################################

ETCD_NAME=etcd02


ETCD_DATA_DIR="/var/lib/etcd/etcd01"


ETCD_LISTEN_PEER_URLS="http://192.168.93.202:2380"


ETCD_LISTEN_CLIENT_URLS="http://192.168.93.202:2379,http://127.0.0.1:2379"


ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.93.202:2380"


ETCD_INITIAL_CLUSTER="etcd01=http://192.168.93.201:2380,etcd02=http://192.168.93.202:2380,etcd03=http://192.168.93.203:2380"


ETCD_INITIAL_CLUSTER_STATE="new"


ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-00"


ETCD_ADVERTISE_CLIENT_URLS="http://192.168.93.202:2379"



####################################################################


ETCD_NAME=etcd03


ETCD_DATA_DIR="/var/lib/etcd/etcd01"


ETCD_LISTEN_PEER_URLS="http://192.168.93.203:2380"


ETCD_LISTEN_CLIENT_URLS="http://192.168.93.203:2379,http://127.0.0.1:2379"


ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.93.203:2380"


ETCD_INITIAL_CLUSTER="etcd01=http://192.168.93.201:2380,etcd02=http://192.168.93.202:2380,etcd03=http://192.168.93.203:2380"


ETCD_INITIAL_CLUSTER_STATE="new"


ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-00"


ETCD_ADVERTISE_CLIENT_URLS="http://192.168.93.203:2379"


确认etcd启动文件


less /usr/lib/systemd/system/etcd.service


[Unit]

Description=Etcd Server

After=network.target

After=network-online.target

Wants=network-online.target


[Service]

Type=notify

WorkingDirectory=/var/lib/etcd/

EnvironmentFile=-/etc/etcd/etcd.conf

User=etcd

# set GOMAXPROCS to number of processors

ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /usr/bin/etcd --name=\"${ETCD_NAME}\" --data-dir=\"${ETCD_DATA_DIR}\" --listen-client-urls=\"${ETCD_LISTEN_CLIENT_URLS}\""

Restart=on-failure

LimitNOFILE=65536


[Install]

WantedBy=multi-user.target


更新启动:

systemctl daemon-reload
systemctl start etcd
systemctl enable etcd



校验状态:


etcdctl member list 
etcdctl cluster-health

  


这里有个问题就是最好先看看etcd集群写没写进内容,如果有会导致报错,可以去集群服务器的/var/lib/etcd/etcd01/member下的snap和wal目录下看看,有的话就清理掉。


四.编译rpm包安装kubernets(在master1)

mkdir /data

cd /data

git clone https://github.com/kubernetes/release.git

cd /data/release/rpm

./docker-build.sh


五.安装kubeadm

cd /data/release/rpm/output/x86_64

yum localinstall *.rpm -y

systemctl enable kubelet 

systemctl start kubelet


六.安装docker

yum update


增加repo

tee /etc/yum.repos.d/docker.repo <<-'EOF'

[dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/7/

enabled=1

gpgcheck=1

gpgkey=https://yum.dockerproject.org/gpg

EOF



Install the Docker package


yum install docker-engine -y

systemctl enable docker.service

systemctl start docker


七.Pull镜像


p_w_picpaths=(kube-proxy-amd64:v1.5.1 kube-discovery-amd64:1.0 kubedns-amd64:1.9 kube-scheduler-amd64:v1.5.1 kube-controller-manager-amd64:v1.5.1 kube-apiserver-amd64:v1.5.1 


etcd-amd64:3.0.14-kubeadm kube-dnsmasq-amd64:1.4 exechealthz-amd64:v1.2.0 pause-amd64:3.0 kubernetes-dashboard-amd64:v1.5.0)

for p_w_picpathName in ${p_w_picpaths[@]} ; do

  docker pull mritd/$p_w_picpathName

  docker tag mritd/$p_w_picpathName gcr.io/google_containers/$p_w_picpathName

  docker rmi mritd/$p_w_picpathName

done




八.初始化master1

#添加vip(在/etc/hosts    192.168.93.214  master1 要保证第一行)  

ip addr add 192.168.93.214/24 dev eno16777984

kubeadm init --api-advertise-addresses=192.168.93.214 --external-etcd-endpoints=http://192.168.93.201:2379,http://192.168.93.202:2379,http://192.168.93.203:2379


--api-advertise-addresses 支持多个ip,但是会导致kubeadm join无法正常加入, 所以对外服务只配置为一个vip


九.部署其他master

  1.参照master1 安装kubeadm

  2.拷贝master1 的/etc/kubernetes/并启动kubelet

 

  scp -r /etc/kubernetes/* root@192.168.93.222:/etc/kubernetes/ (在221上)

  

   systemctl enable docker && systemctl start docker
  systemctl enable kubelet && systemctl start kubelet

  

kube-controller-manager ``kube-scheduler 通过 --leader-elect实现了分布式锁. 所以三个     master节点可以正常运行


十,优化组件


采用daemonsets方式,实现核心组件实现高可用

  1. dns组件:


kubectl scale deploy/kube-dns  --replicas=3 -n kube-system