一.环境准备
关闭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
二.拓扑环境
etcd集群:
etcd1 192.168.93.201
etcd2 192.168.93.202
etcd3 192.168.93.203
master集群:
master1 192.168.93.221
master2 192.168.93.222
master3 192.168.93.223
node节点:
node1 192.168.92.110
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
方式,实现核心组件实现高可用
dns组件:
kubectl scale deploy/kube-dns --replicas=3 -n kube-system