主机准备 VMware安装三台CentOS7虚拟机,一台作为master节点,2台作为worker节点。
主机名 
操作系统 
CPU核数 
内存 
角色 
 
 
master1 
CentOS7最小化 
2 
2G 
master 
 
worker1 
CentOS7最小化 
2 
2G 
worker 
 
worker2 
CentOS7最小化 
2 
2G 
worker 
 
 
 
主机网络配置 设置主机名 1 hostnamectl set-hostname XXX
设置IP 编辑配置文件
1 vi /etc/sysconfig/network-scripts/ifcfg-ens33
添加如下设置:
1 2 3 4 5 BOOTPROTO="none"  #获取ip方式,把dhcp改为none
重启网卡:
1 systemctl restart network
查看ip
设置主机名称解析 添加
1 2 3 192.168.xxx.xxx master1 
主机安全配置 关闭防火墙 1 2 3 4 systemctl stop firewalld     disable  firewalld  
SELINUX配置 禁用selinux
1 2 3 sed -ri 's/SELINUX=enforcing/SELINUX=disabled/'  /etc/selinux/config  
主机时间同步 由于最小化安装系统,需要单独安装ntpdate
1 2 yum -y install ntpdate  
永久关闭swap分区 使用kubeadm部署必须关闭swap分区,修改配置文件后需要重启操作系统。
1 2 3 4 cat /etc/fstab
添加网桥过滤 添加网桥过滤及地址转发
1 2 3 4 5 6 cat /etc/sysctl.d/k8s.conf
加载br_netfilter模块 
查看是否加载
1 lsmod | grep br_netfilter
加载网桥过滤配置文件,让刚刚添加的k8s.conf配置文件生效
1 sysctl -p /etc/sysctl.d/k8s.conf
开启ipvs 安装ipset及ipvsadm
1 yum -y install ipset ipvsadm
添加需要加载的模块,编辑配置文件vi /etc/sysconfig/modules/ipvs.modules
1 2 3 4 5 6 #!/bin/bash 
1 2 3 chmod 755 /etc/sysconfig/modules/ipvs.modules  
集群软件安装 
软件 
作用 
版本 
 
 
kubeadm 
初始化集群、管理集群等 
1.17.2 
 
kubelet 
用于接收api-server指令,对pod生命周期进行管理 
1.17.2 
 
kubectl 
集群命令行管理工具 
1.17.2 
 
docker-ce 
容器管理 
18.06.3 
 
 
 
vim /etc/yum.repos.d/k8s.repo
谷歌YUM源
1 2 3 4 5 6 7 8 [kubernetes]
阿里云YUM源
1 2 3 4 5 6 7 8 [kubernetes]
docker安装 yum源获取,使用使用清华镜像源作为docker-ce的安装源
1 wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
查看docker-ce版本,对版本排序
1 yum list docker-ce.x86_64 -- showduplicates | sort -r
安装指定版本docker-ce,此版本不需要修改服务启动文件及iptables默认规则链策略
1 yum -y install --setopt =obsoletes=0 docker-ce-18.06.3.ce-3.el7
查看docker-ce服务配置文件(可不修改)
1 cat /usr/lib/systemd/system/docker.service
添加配置文件/etc/docker/daemon.json
1 2 3 4 cat /etc/docker/daemon.json"exec-opts" : ["native.cgroupdriver=systemd" ]
k8s安装 安装指定版本kubeadm,kubelet ,kubectl/etc/yum.repos.d下新建文件k8s.repo,内容填写为阿里云k8s镜像源
1 2 yum list kubeadm.x86_64 -- showduplicates | sort -r  setopt =obsoletes=0 kubeadm-1.17.2-0 kubelet-1.17.2-0 kubectl-1.17.2-0  
软件设置:kubelet,如果不配置可能会导致k8s集群无法启动。cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容。 
1 2 vim /etc/sysconfig/kubelet"--cgroup-driver=systemd" 
设置开机启动,集群初始化后自动启动
1 systemctl enable  kubelet
k8s集群容器镜像准备 Master主机镜像 由于使用kubeadm部署集群,集群所有核心组件均以Pod运行,需要为主机准备镜像,不同角色主机准备不同镜像。
查看集群使用的容器镜像,将镜像列表输出到文件中,便于下载使用
1 kubeadm config images list >> image.list
修改文件image.list,保存为镜像下载脚本image.pull:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/bin/bash ' k8s.gcr.io/kube-apiserver:v1.17.2 k8s.gcr.io/kube-controller-manager:v1.17.2 k8s.gcr.io/kube-scheduler:v1.17.2 k8s.gcr.io/kube-proxy:v1.17.2 k8s.gcr.io/pause:3.1 k8s.gcr.io/etcd:3.4.3-0 k8s.gcr.io/coredns:1.6.5 ' for  img in  $img_list do  $img done 
执镜像下载脚本:sh image.pull
查看已下载镜像:docker images
拉取k8s镜像需要科学上网。百度云 下载到本地,提取码:6mkm
 
Worker主机镜像 在master节点中保存k8s.gcr.io/kube-proxy:v1.17.2和k8s.gcr.io/pause:3.1镜像
1 2 docker save -o kube-proxy.tar k8s.gcr.io/kube-proxy:v1.17.2
复制到2个worker节点:
1 2 scp kube-proxy.tar pause.tar worker1:/root
2个worker节点分别导入镜像:
1 2 docker load -i kube-proxy.tar
集群部署 k8s集群初始化 在master节点执行初始化操作:
1 kubeadm init --kubernetes-version=v1.17.2 --pod-network-cidr=172.16.0.0/16 --apiserver-advertise-address=192.168.xxx.xxx 
准备集群管理文件
1 2 3 mkdir .kube
网络插件使用 calico镜像准备
百度云 下载,提取码:3ea6
 
1 2 3 4 docker load -i calico-cni.tar
修改calico资源清单文件calico.yml
1 2 3 4 5 6 7 8 9 10 11 12             -  name:  CLUSTER_TYPE value:  "k8s,bgp" -  name:  IP value:  "autodetect" -  name:  IP_AUTODETECTION_METHOD  value:  "interface=eth.*"   607          608         - name:  CALICO_IPV4POOL_IPIP value:  "Always" 
修改620行指定的ip地址段,设置为初始化时指定的值:
1 2 3 4 5 6 7 8             -  name:  CALICO_IPV4POOL_CIDR 620           value:  "10.224.0.0/16"    -  name:  CALICO_DISABLE_FILE_LOGGING value:  "true" 
在应用caclico资源清单文件之前,需要把calico所有的镜像导入到node节点中。
1 2 
添加工作节点到集群 2个worker节点先导入calico相关镜像,然后执行kubeadm join操作。kubeadm init初始化操作时生成的输出,2个worker节点分别执行:
1 kubeadm join 192.168.xxx.xxx:6443 --token m0rpym.522tija0299geb8h --discovery-token-ca-cert-hash sha256:cef7351d9fefc67868f22aa3122165dd01f63e 95870d2fb22197ee66c61b18d6
加入时报错:error execution phase preflight: couldn’t validate the identity of the API Server: abort connecting to API servers after timeout of 5m0s。
检查主机的防火墙是否关闭;
token错误或者已失效,生成新的token。
1 2 3 4 in  /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' 
 
验证k8s集群可用性方法 1 2 3 4 5