前言
本文的云主机或虚拟机默认为Centos7,虚拟机的宿主机默认win10操作系统
1.前置准备
1.1 基础环境准备
1.使用云主机,或者Virtualbox+Vagrant安装Centos7 安装Centos7 (建议3台以上,每台机器 4 GB 以上的内存,内存不足时应用会受限制。用作控制平面节点的计算机上至少有2个 CPU)
第二种需先安装VirtualBox和Vagrant[需要注意二者的版本兼容]
使用vagrant其配置文件Vagrantfile可以参考如下(3节点集群):
// An highlighted block
Vagrant.configure("2") do |config|
config.vm.box_check_update = false
config.vm.provider 'virtualbox' do |vb|
vb.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 1000 ]
end
$num_instances = 3
# curl https://discovery.etcd.io/new?size=3
(1..$num_instances).each do |i|
config.vm.define "node#{i}" do |node|
node.vm.box = "centos/7"
node.vm.hostname = "node#{i}"
ip = "172.17.8.#{i+100}"
node.vm.network "private_network", ip: ip
node.vm.provider "virtualbox" do |vb|
vb.memory = "8192"
if i==1 then
vb.cpus = 2
else
vb.cpus = 1
end
vb.name = "node#{i}"
end
end
end
end
配置完成后
2.运行vagrant up指令生成3台虚拟机
1.2 docker环境准备
1.由于docker对内核有一定要求 我们可以先升级内核
具体指令参考如下:
查看内核版本 —这里的内核版本(3.10)和系统架构(64位)
uname -smr
更新软件包仓库
yum update
启用Elrepo库
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
安装 Elrepo 软件库
rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
列出可用的内核版本
yum list available --disablerepo=‘*’ --enablerepo=elrepo-kernel
kernel-lt表示一个稳定的LTS(长期支持)版本,而kernel-ml表示一个提供短期支持但提供更频繁更新的
设置新的默认启动项
grub2-set-default 0
重启后查看版本
reboot //重启
uname -smr //查看版本
2.基本docker安装
查看系统要求
Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看CentOS的内核版本。
uname -a
删除旧版本
yum remove docker docker-common docker-selinux docker-engine
安装需要的软件包
yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
设置Docker yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装docker
sudo yum install docker-ce
如果要安装特定版本:
sudo yum install docker-ce-18.06.1.ce
启动
设置为开机启动
systemctl enable docker
启动
systemctl start docker
查看启动状态
systemctl status docker
查看版本
docker version
2.正式安装
2.1 安装kubectl
注意Linux命令引号的格式
针对集群的三台机器安装Kubectl
curl -LO “https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl” && chmod +x kubectl && cp kubectl /usr/bin/
国内备用 curl -fL “https://kinshy-generic.pkg.coding.net/south/study/kubectl?version=latest” -o kubectl && chmod +x kubectl && cp kubectl /usr/bin/
2.2 安装rke
针对主节点安装rke
curl -LO “https://github.com/rancher/rke/releases/download/v1.3.10/rke_linux-amd64” && mv rke_linux-amd64 rke && chmod +x rke && ./rke --version && cp rke /usr/bin/
国内备用 curl -fL “https://kinshy-generic.pkg.coding.net/south/study/rke?version=latest” -o rke && chmod +x rke && ./rke --version && cp rke /usr/bin/
2.3 配置机器运行环境
a.禁用 SELinux
/usr/sbin/sestatus -v |grep “SELinux status”
#结果为 enabled 为启用状态
vim /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled
b.禁用 swap
free -h
#total used free shared buff/cache available
#Mem: 7.8G 205M 6.9G 8.7M 715M 7.3G
#Swap: 5.0G 0B 5.0G
#Swap 有值代表启用了swap
vim /etc/fstab
使用 # 注释掉有 swap 的一行
c.关闭防火墙
firewall-cmd --state
systemctl stop firewalld.service
systemctl disable firewalld.service
重启查看修改是否生效
reboot
/usr/sbin/sestatus -v |grep “SELinux status”
free -h
d.CentOS7不能使用root用户安装
adduser rke -G docker
#设置 RKE 用户密码
passwd rke
#尝试使用rke用户操作docker,观察是否有权限
su rke
docker ps
e.配置主节点到各个节点rke用户的免密登录(仅在主节点操作,执行rke命令的机器)
#一路回车按到底
ssh-keygen
ssh-copy-id rke@节点IP
这个地方要给全部的机器配置ssh,包括自己
比如我有 172.12.17.167 172.12.17.166 两台机器
#在 172.12.17.167 上执行
ssh-keygen
ssh-copy-id rke@172.12.17.167
ssh-copy-id rke@172.12.17.166
#在 172.12.17.166 上执行
ssh-keygen
ssh-copy-id rke@172.12.17.166
ssh-copy-id rke@172.12.17.167
#如何有新的节点加入也需要在所以机器上配置ssh
#测试 ssh 并执行 docker ps 看是否正常工作
ssh rke@节点IP
docker ps
2.4 集群部署配置
注意以下编辑rke.yaml和执行的操作需以上述新建的rke用户执行
编辑rke.yaml(如仅有内网,则去掉所有node的internal_address,并将address改为内网地址:如192.168.xxx.xx;如仅有外网(跨云主机),则去掉所有node的internal_address,则将自有机器外网ip分别加入安全组开放所有端口,并做好从主节点rke用户到其它节点rke用户的免密登录,完成后记得关闭密码登录以免出现云服务器安全问题)
可选(通过rke config生成cluster.yaml,自定义程度更高)注意格式
nodes:
- address: 165.227.114.63
internal_address: 172.16.22.12
user: rke
role: [controlplane, worker, etcd] - address: 165.227.116.167
internal_address: 172.16.32.37
user: rke
role: [worker] - address: 165.227.127.226
internal_address: 172.16.42.73
user: rke
role: [worker]
services:
etcd:
snapshot: true
creation: 6h
retention: 24h
ingress:
provider: nginx
options:
use-forwarded-headers: “true”
执行集群安装 rke up --config rke.yaml
运行完成后执行mkdir ~/.kube && mv kube_config_rke.yaml ~/.kube/config
使用kubectl get node 查看节点,完成集群安装
3.部分报错处理
1.如果报错:The connection to the server localhost:8080 was refused - did you specify the right host or port?
就执行命令:export KUBECONFIG=$(pwd)/kube_config_rke.yaml
$(pwd)为kube_config_rke.yaml的目录
2.如果报错:[某节点ip] not found
可能由于之前的集群配置导致,允许删除的情况下
就执行命令
删除集群【注意操作不可逆】
【删除不可逆】rke remove --config rke.yaml【删除不可逆】
【再次执行集群】执行集群安装 rke up --config rke.yaml