Skip to content

高可用集群搭建-binary

软件版本

软件 版本
os centos7.2
kubenetes v1.11.2
etcd 3.2.18
docker 17.03
calico 3.1.3

服务器说明

  • 官方推荐实例 CPU 大于等于2个, Memory 大于等于2G
系统类型 IP地址 节点角色 CPU Memory hostname
centos-7.1 172.168.31.10 master >=2 >=2G test10.com
centos-7.1 172.168.31.11 master >=2 >=2G test11.com
centos-7.1 172.168.31.12 master >=2 >=2G test12.com
centos-7.1 172.168.31.13 master >=2 >=2G test13.com
centos-7.1 172.168.31.14 master >=2 >=2G test14.com

系统设置

主机名

  • 主机名:主机名必须每个节点都不一样,并且保证所有点之间可以通过hostname互相访问。
    # 查看主机名
    $ hostname
    # 修改主机名
    $ hostnamectl set-hostname <your_hostname>
    # 配置host. 使所有节点之间可以通过hostname互相访问
    $ vi /etc/hosts
    # <node-ip> <node-hostname>
    

安装依赖包

# 更新yum
$ yum update
# 安装依赖包
$ yum install -y connntrack ipvsadm ipset jq sysstat curl iptables libseccomp

关闭防火墙、swap,重置iptables

# 关闭防火墙
$ systemctl stop firewalld && ststemctl disable firewalld
# 重置iptables
$ iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
# 关闭swap
$ wsapoff -a
$ sed -i '/swap/s/^\(.*)$/#\1/g' /etc/fstab
# 关闭selinux
$ setenforce 0
# 关闭dnsmasq(否则可能导致docker容器无法解析域名)
$ service dnsmasq stop && systemctl disable dnsmasq

系统参数设置

# 制作配置文件
$ cat > /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
EOF
## 生效文件
$ sysctl -p /etc/sysctl.d/kubernetes.conf

安装docker(work节点)

# 手动下载rpm包
$ mkdir -p /opt/kubernetes/docker && cd /opt/kubernetes/docker
$ wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-selinux-17.03.1.ce-1.el7.centos.x86_64.rpm
$ wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm
$ wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-debuginfo-17.03.1.ce-1.el7.centos.x86_64.rpm
# 清理所有版本
$ yum remove -y docker* container-selinux
# 安装rpm包
$ yum localinstall -y *.rpm
# 开机启动
$ systemctl enable docker
# 设置参数
# 1. 查看磁盘挂载
$ df -h 
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G   24G   14G  63% /
tmpfs           7.8G   11M  7.8G   1% /dev/shm
/dev/vdb         97G  587M   92G   1% /home/work/project
# 2. 选择比较大的分区
$ mkdir -p /tol/docker-data
$ cat <<EOF > /etc/docker/daemon.json
{
    "graph": "/tol/docker-data"
}
EOF
# 启动docker服务
service docker restart

准备二进制文件(所有节点)

配置免密登录

  • 方便文件copy选择一个中转节点
    # 查看是否已经存在rsa公钥
    $ cat ~/.ssh/id_rsa.pub
    
    # 如果不存在就创建一个新的
    $ ssh-keygen -t rsa
    
    # 把id_rsa.pub文件内容copy到其他机器的授权文件中
    $ cat ~/.ssh/id_rsa.pub
    
    # 在其他节点执行下面命令包括worker节点
    $ echo "<file_content>" >> ~/.ssh/authorized_keys
    

下载二进制文件

  • 官方下载地址:http://github.com/kubernetes/kubernetes/releases

分发文件并设置好PATH

# 把文件copy到每个节点上
$ ssh <user>@<node-ip> "mkdir -p /opt/kubernetes/bin"
$ scp master/* <user>@<master-ip>:/opt/kubernetes/bin
$ scp worker/* <user>@<worker-ip>:/opt/kubernetes/bin

# 给每个节点设置PATH
$ ssh <user>@<node-ip> "echo 'PATH=/opt/kubernetes/bin:$PATH' >>~/.bashrc"

# 给自己设置path,后面会用到kubectl命令
$ vi ~/.bash_profile

后期步骤

graph LR
  A[配置文件配置] --> B[CA证书];
  B[配置etcd集群] --> C[部署api-server];
  C[部署keepalived - apiserver高可用] --> D[部署scheduler];
  D[部署kubelet] --> E[部署kube-proxy.config];
  E[部署网络插件-calico] --> F[网络插件 - coredns];