一、写作目的
出于学习和项目测试目的,想在笔记本上基于虚拟机搭建一个简单的Kubernetes(k8s)集群。没想到因为国内flannel 源服务器集体阵亡,直接使用proxy会导致各种问题,导致我弄了十几个小时,下面给出我的修正方案。由于配置过程很复杂,限于篇幅笔者对一些工具的基本操作(VMware使用、Xshell配置等)会省略,可能没有以前文章那么详细,还请谅解!已经安装好基础设施服务器,并与Windows主机网络互通的,可直接跳转到步骤五
下面给出最终目标:
集群相关:
| 角色 | ip地址 | 系统环境 | 
|---|---|---|
| master | 192.168.154.10 | centos 7.9.2,基础设施服务器 | 
| node1 | 192.168.154.11 | centos 7.9.2,基础设施服务器 | 
| node2 | 192.168.154.12 | centos 7.9.2,基础设施服务器 | 
k8s相关版本说明:
| Docker | kubeadm | kubectl | kubelet | |
|---|---|---|---|---|
| 版本号 | 18.06.3 | 1.17.4 | 1.17.4 | 1.17.4 | 
二、环境准备
- Centos 7.9.2镜像(Centos 7即可,版本尽量满足
 下载地址:http://mirrors.163.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso
- 代理工具,下面以V2rayN为例
- VMware Workstations Pro 虚拟机(下载最新版即可,限于篇幅,请读者自行安装并激活)
三、Centos基础设施服务器搭建(资源消耗很小,笔者的笔记本6700HQ+16G内存开5个感觉也没问题)
(VMware的使用不是本文的重点,笔者在这里仅对关键位置给出说明。三个虚拟机这里的设置是一样的,硬件配置可以有差异)
- 硬件配置如下(其余默认即可)磁盘 内存 CPU 40G+ 1G+ 2核心,线程总数不少于2 
- 语言选择中文-中国

- “安装位置” 点击去,然后直接点击完成(即默认设置)
- “软件选择” 修改为基础设施服务器


- “网络和主机名” 按照如下步骤修改:- 分别修改主机名为“master”、“node1”、“node2”,三个虚拟机不要设置为一样了!!
  - 进入“配置”-“常规”, 勾选“可用时自动链接到这个网络”
  - 查看虚拟机LAN口网段。查看VMware的“编辑”–“虚拟网络编辑器”–“VMnet8”
  
 由图可知,笔者虚拟机LAN网段ip为:192.168.154.*,网关地址为:192.168.154.2(VMware默认网关主机号是2)
- 进入“配置”-“IPv4设置”,参照步骤三,进行如图所示设置(记得同步修改网段ip,不要照抄)。DNS服务器我们采用阿里DNS:223.5.5.5,保存即可。截图以master主机为例:**  
  
- 开始安装,点击上面设置root密码。安装完毕后重启即可  
- 四、配置windows主机网络* 
- 确保VMware为主机(windows)分配ip。进入VMware的“编辑”–“虚拟网络编辑器”–“VMnet8”,勾选“将主机虚拟网络适配器连接至此网络”  
- 设置主机的VMnet8虚拟网卡静态ip:192.168.154.1 (根据步骤三中经验,同步修改,不要照抄)  
  
  
  
- 验证是否成功(请确保虚拟机均已经开机)。主机与虚拟机互相ping即可 
  
  
五、通过Xshell(用户自行下载安装)连接三台虚拟机(非必须,但是笔者推荐这么做,因为Xshell支持多台服务器同时操作,可以加快配置速度)
| 1 | Centos基础设置服务器默认已经支持ssh,所以不同安装额外操作 | 

小技巧:Xshell任意终端右键,勾选“发送键输入到所有会话”,可以将命令在所有终端同步操作,使得我们可以同时配置三台服务器。
六、为k8s初始化Centos(以下操作,可三台服务器同步操作)
- 有的读者可能直接从这里开始,未避免不必要bug,请尽量确保系统版本为Centos 7.9 - 1 
 2- # 查看系统版本 
 cat /etc/redhat-release 
- 关闭系统防火墙,并禁止其自启动 - 1 
 2
 3- # 终端键入 
 systemctl stop firewalld
 systemctl disable firewalld
- 配置host表(采用DNS更好,测试/学习为目的,我们可以简单点) - 1 
 2
 3
 4
 5
 6- # 终端键入 
 cat >> /etc/hosts << EOF
 192.168.18.10 master
 192.168.18.11 node1
 192.168.18.12 node2
 EOF
- 设置网络时间同步 - 1 
 2
 3
 4
 5
 6- # 终端键入 
 yum install -y ntpdate
 ntpdate time.windows.com
 # 验证系统时间,键入
 date 
- 关闭selinux(重启后才会生效,这步暂不重启) - 1 
 2- # 终端键入 
 sed -i 's/enforcing/disabled/' /etc/selinux/config
- 关闭swap分区(重启后才会生效,这步暂不重启) 
| 1 | # 终端键入 | 
- 将桥接的IPv4流量传递到iptables的链 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16- # 在每个节点上将桥接的IPv4流量传递到iptables的链 
 cat > /etc/sysctl.d/k8s.conf << EOF
 net.bridge.bridge-nf-call-ip6tables = 1
 net.bridge.bridge-nf-call-iptables = 1
 net.ipv4.ip_forward = 1
 vm.swappiness = 0
 EOF
 # 加载br_netfilter模块
 modprobe br_netfilter
 # 查看是否加载
 lsmod | grep br_netfilter
 # 生效
 sysctl --system
- 开启ipvs - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18- # 安装 
 yum -y install ipset ipvsadm
 # 修改配置文件
 cat > /etc/sysconfig/modules/ipvs.modules <<EOF
 #!/bin/bash
 modprobe -- ip_vs
 modprobe -- ip_vs_rr
 modprobe -- ip_vs_wrr
 modprobe -- ip_vs_sh
 modprobe -- nf_conntrack_ipv4
 EOF
 # 授权、运行、检查是否加载
 chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
 # 检查是否加载
 lsmod | grep -e ipvs -e nf_conntrack_ipv4
- 重启三台机器 
| 1 | reboot | 
-   验证selinux是否关闭,swap分区是否关闭1 
 2
 3
 4
 5# 验证selinux 
 getenforce
 #验证swap分区
 free -m

七、配置http proxy(可三台服务器同步操作)
注:笔者所查阅的教程几乎都是采用的国内源,但是最后安装CNI网络时,由于flannel国内源集体阵亡,会导致临门一脚的时候宣告失败。如果读者在安装时fauy.io国内镜像源恢复,可省略略这一步。
Windows代理工具开启局域网代理功能(大部分代理都是支持的),然后在Centos配置系统代理

- 记下底部网络端口,对应地址应该为:“http://192.168.154.1:10809”
- 配置服务器
| 1 | vim /etc/profile | 
代理生效:
| 1 | source /etc/profile | 
如果你想取消proxy,只需要终端键入:
| 1 | unset http_proxy | 
测试proxy
| 1 | curl www.google.com | 

注:全局/Pac是跟随windows自动适应的
-   下面还要再配置docker proxy,否则后面会出现bug代理生效:1 
 2
 3
 4
 5
 6
 7
 8mkdir -p /etc/systemd/system/docker.service.d 
 vim /etc/systemd/system/docker.service.d/http-proxy.conf
 # http-proxy.conf内容如下:
 [Service]
 Environment="HTTP_PROXY=http://192.168.154.1:10809" "NO_PROXY=localhost,127.0.0.1,192.168.154.10,192.168.154.11,192.168.154.12,10.244.0.0/16,docker-registry.somecorporation.com"
| 1 | sudo systemctl daemon-reload | 
验证代理:
| 1 | systemctl show docker --property Environment | 

八、配置Docker****(以下操作,可三台服务器同步操作)
-   安装Docker1 
 2
 3
 4
 5
 6
 7
 8wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo 
 yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7
 systemctl enable docker && systemctl start docker
 # 查看docker版本
 docker version 
九、安装kubeadm、kubelet和kubectl(以下操作,可三台服务器同步操作)
- 配置yum镜像源(虽然有代理,不过国内镜像源肯定还是快一点) - 1 
 2
 3
 4
 5
 6
 7
 8
 9- cat > /etc/yum.repos.d/kubernetes.repo << EOF 
 [kubernetes]
 name=Kubernetes
 baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
 enabled=1
 gpgcheck=0
 repo_gpgcheck=0
 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
 EOF
- 安装 - 1 - yum install -y --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 
- 确保Docker使用的cgroup drvier和kubelet使用的cgroup drver一致 - 1 
 2
 3
 4
 5- vim /etc/sysconfig/kubelet 
 # 内容如下:
 KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
 KUBE_PROXY_MODE="ipvs"
- 设置开机自启动 - 1 - systemctl enable kubelet 
十、部署master节点(切勿在node节点设置)
- 初始化 - 1 
 2
 3
 4
 5
 6- # 应同步修改“192.168.154.10”、“v1.17.4”,其余保持不变 
 kubeadm init \
 --apiserver-advertise-address=192.168.154.10 \
 --kubernetes-version v1.17.4 \
 --service-cidr=10.96.0.0/12 \
 --pod-network-cidr=10.244.0.0/16
- 根据提示,键入 - 1 
 2
 3- mkdir -p $HOME/.kube 
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config
十一、部署node节点(不要在master节点设置)
在master节点上,键入
| 1 | kubeadm token create --print-join-command | 
系统会输出一条命令,复制并粘贴到node节点运行即可,命令如下(具体命令有差异,仅供参考):
| 1 | kubeadm join 192.168.154.10:6443 --token 5dkam1.8v4coi4tsvtj7ede --discovery-token-ca-cert-hash sha256:252da6842f1ce2b6b90981111734bff000e0cac551f88cea5ca5155c61e85861 | 
运行完毕,在master节点执行
| 1 | kubectl get nodes | 
十二、搭建flannel网络(以下命令仅在master节点执行)
| 1 | # 如果您的代理没有问题,下面的命令直接执行即可 | 
稍等片刻(大概有几十MB的文件下载)。通过如下命令查看进度
| 1 | kubectl get pods -n kube-system | 
如下图所示即为安装完毕:
此时在master查看节点状态
| 1 | kubectl get nodes | 
节点状态为ready即为搭建完毕

十三、部署nginx,测试环境(master节点执行)
| 1 | kubectl create deployment nginx --image=nginx:1.14-alpine # 创建服务 | 

由图可知,外部端口为31547,在主机访问:http://192.168.154.10:31547,能看到如下界面即为成功。
十四、配置kubectl自动补全(可选)
| 1 | yum install -y bash-completion | 
 
		 
                      