之前记录过k8s的yum安装(推荐初学者)以及kubeadm安装(仅推荐了解kubeadm安装过程),这两种安装方式仅限于学习了解,实际生产环境基本都是基于二进制精确控制安装,本文记录kubenetes v1.12.2 版本的二进制精确控制安装,适用于线上生产环境部署方式,当然坑还是不少的,谁装谁知道。
本文主要参考了jimmysong大神、朋友公司线上生产以及公司测试、线上生产环境的部署方式。
分为如下章节:
由于篇幅过长,本文记录一下服务器的前期准备工作,后续文章版本发布回滚、监控实现后续再更新:
1, kubenetes 集群二进制安装之创建TLS证书和密钥
2,kubenetes 集群二进制安装之安装etcd集群
3,kubenetes 集群二进制安装之安装flannel网络组件
4,kubenetes 集群二进制安装之安装kubectl命令行工具
5,kubenetes 集群二进制安装之master安装部署
6,kubenetes 集群二进制安装之node节点docker-ce和kubenetes组件安装部署
环境平台 :CentOS Linux release 7.5.1804 (Core)
master01: 10.1.14.21
master02: 10.1.14.22
etcd01: 10.1.14.23
etcd02: 10.1.14.24
node01: 10.1.14.25
node02: 10.1.14.26
说明:mastr高可用线下建议采用keepalive或者haproxy或者其他代理工具,仅限学习或者本地测试环境。线上直接使用slb或elb等调度器实现。
一,集群服务器说明
1,服务器角色说明
master01和master02:分别是k8s集群的两个master节点,设置两个是考虑到高可用。内部机房或者虚拟机可以考虑keepalive或ha实现,线上生产建议考虑调度器比如slb或elb。
etcd01和etcd02: etcd集群。用于存在集群的配置信息,机器宕机或者损坏则会导致集群异常甚至集群崩溃,设置两个也是为了防止单点故障以达到高可用的目的。
node01和node02: node节点,这里以两个举例,实际线上肯定是node x节点群。
2,各角色服务器配置组件
master:二进制安装kube-apiserver,kube-scheduler,kube-config-manager,命令行工具kubectl 【kube-scheduler、kube-controller-manager 和 kube-apiserver 三者的功能紧密相关; 同时只能有一个 kube-scheduler、kube-controller-manager 进程处于工作状态,如果运行多个,则需要通过选举产生一个 leader;】
etcd: yum安装etcd
node: 安装flannel,kubelet,kube-proxy,docker-ce
haproxy:配置tcp代理haproxy组件。
3,软件版本信息
kubernetes: 1.12.2
etcd : 3.2.22
docker-ce : 18.06
flannel: 0.7.1
haproxy: 1.5.18
二,部署前期所有服务器准备工作(推荐使用批管理工具salt或者ansible)
1,关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
2,关闭selinux
修改/etc/selinux/config为SELINUX=disabled
重启后配置生效。不建议临时关闭(setenfore 0),防止机器重启失效。
3,配置yum源(为方便以后kubenetes组件安装提供yum源)
epel源: yum install -y epel-release #kubenetes yum源 ,采用阿里云,方便一些组件安装 vim /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
4,host定向,将机器内部主机名通信打通:
vi /etc/hosts
10.1.14.21 master01 10.1.14.22 master02 10.1.14.23 etcd01 10.1.14.24 etcd02 10.1.14.25 node01 10.1.14.26 node02 10.1.14.27 mastercluster
5,master01生成密钥对,设置免密钥登陆其他机器
ssh-keygen #生成密钥对 ssh-copy-id -i /root/.ssh/id_rsa.pub master02 ssh-copy-id -i /root/.ssh/id_rsa.pub etcd01 ssh-copy-id -i /root/.ssh/id_rsa.pub etcd02 ssh-copy-id -i /root/.ssh/id_rsa.pub node01 ssh-copy-id -i /root/.ssh/id_rsa.pub node02 ssh-copy-id -i /root/.ssh/id_rsa.pub mastercluster
6,配置ntpdate保持时间一致
yum install ntpdate -y systemctl enable ntpdate.service systemctl start ntpdate.service 临时同步:ntpdate time7.aliyun.com 设置任务计划crontab -e: */30 * * * * /usr/sbin/ntpdate time7.aliyun.com >/dev/null 2>&1
7,关闭swap:
临时关闭:
swapoff -a
永久关闭:
sed -i 's/.*swap.*/#&/' /etc/fstab
否则会导致kubelet启动失败。