环境版本说明:三台vmware虚拟机,系统版本CentOS7.6。Kubernetes1.16.0,最新版本。Flannelv0.11docker18.09可以使用kubeadm轻松搭建k8s集群环境,无需关注安装部署的细节,而且现在k8s版本更新频率非常快,强烈推荐这种方式。相关准备注意:本节相关操作必须在所有节点上进行。硬件环境使用三台vmware虚拟机,配置网络,保证可以上网。k8s-master4G4核CentOS7192.168.10.20k8s-node12G2核CentOS7192.168.10.21k8s-node22G2核CentOS7192.168.10.22宿主机分k8s-master作为集群管理节点:etcdkubeadmkube-apiserverkube-schedulerkube-controller-managerkubeletflannelddockerk8s-node1作为工作节点:kubeadmkubeletflannelddockerk8s-node2作为工作节点:kubeadmkubeletflannelddocker准备工作安装必要的rpm软件:yuminstall-ywgetvimnet-toolsepel-release关闭防火墙systemctldisablefirewalldsystemctlstopfirewalldcloseselinux#临时禁用selinuxsetenforce0#永久关闭修改/etc/sysconfig/selinux文件设置sed-i's/SELINUX=permissive/SELINUX=disabled/'/etc/sysconfig/selinuxsed-i"s/SELINUX=enforcing/SELINUX=disabled/g"/etc/selinux/config禁用交换分区swapoff-a#永久禁用,打开/etc/fstab并注释掉交换行。sed-i's/.*swap.*/#&/'/etc/fstab修改/etc/hostscat<>/etc/host192.168.10.20k8s-master192.168.10.21k8s-node1192.168.10.22k8s-node2EOF修改内核参数cat</etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables=1net.bridge.bridge-nf-call-iptables=1EOFsysctl--system安装docker18.09并配置yum源##配置默认源##备份mv/etc/yum.repos.d/CentOS-Base.repo/etc/yum.repos.d/CentOS-Base.repo.backup##下载阿里源wget-O/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.repo##刷新yummakecachefast##配置k8s源猫</etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0EOF##重建yumcacheyumcleanallyummakecachefastyum-yupdate安装docker下载docker的yum源文件yum-yinstallyum-utilsdevice-mapper-persistent-datalvm2yum-config-manager--add-repohttp://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo在这里指定docker版本,可以是先查看支持的版本[root@localhost~]#yumlistdocker-ce--showduplicates|sort-r*updates:mirrors.aliyun.comLoadingmirrorspeedsfromcachedhostfileLoadedplugins:fastestmirror*extras:mirrors.aliyun.com*epel:hkg.mirror.rackspace.comdocker-ce.x86_643:19.03.2-3.el7docker-ce-stabledocker-ce.x86_643:19.03.1-3.el7docker-ce-stabledocker-ce.x86_643:19.03.0-3.el7docker-ce-stabledocker-ce.x86_643:18.09.9-3.el7docker-ce-stable...*base:mirrors.aliyun.com最新版本为19.03,指定下载18.09yuminstall-ydocker-ce-18.09.9-3.el7systemctlenabledockersystemctlstartdocker修改docker启动参数cat>/etc/docker/daemon.json<26sv1.16.0k8s-node2NotReady12sv1.16.0但是节点的状态是NotReady,需要一些操作在master上安装flanneld,复制配置,让kubectl使用mkdir-p$HOME/。kubesudocp-i/etc/kubernetes/admin.conf$HOME/.kube/configsudochown$(id-u):$(id-g)$HOME/.kube/config下载flannel配置文件wgethttps://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml因为kube-flannel.yml文件中使用的图片是qu对于ay.io,国内是拉不下来的,所以同样是先从国内源下载,然后修改tag。脚本如下#vimflanneld.sh#!/bin/bashset-eFLANNEL_VERSION=v0.11.0#这里修改源码QUAY_URL=quay.io/coreosQINIU_URL=quay-mirror.qiniu.com/coreosimages=(flannel:${FLANNEL_VERSION}-amd64flannel:${FLANNEL_VERSION}-arm64flannel:${FLANNEL_VERSION}-armflannel:${FLANNEL_VERSION}-ppc64$leflannel:}-s390x)forimageNamein${images[@]};dodockerpull$QINIU_URL/$imageNamedockertag$QINIU_URL/$imageName$QUAY_URL/$imageNamedockerrmi$QINIU_URL/$imageNamedone运行脚本,这个脚本需要在每个节点运行Executeshflanneld.sh安装flanneldkubectlapply-fkube-flanneld.yamlflanneld默认安装在kube-systemNamespace中,使用如下命令查看:#kubectl-nkube-systemgetpodsNAMEREADYSTATUSRESTARTSAGEcoredns-5644d7b6d9-h9bxt0/1Pending057mcoredns-5644d7b6d9-pkhls0/1待定057metcd-k8s-master1/1运行057mkube-apiserver-k8s-master1/1运行057mkube-controller-manager-k8s-master1/1运行057mkube-flannel-ds-amd64-c4hnf1/1运行138skube-flannel-ds-amd64-djzmx1/1运行038skube-flannel-ds-amd64-mdg8b1/1运行138skube-flannel-ds-amd64-tjxql0/1终止05m34skube-proxy-4n5dr0/1ErrImagePull013mkube-proxy-dc68d1/1运行057mkube-proxy-zplgt0/1ErrImagePull013mkube-scheduler-k8s-master1/1Running057m出现错误,因为两个工作节点无法拉取pause和kube-proxy镜像,可以直接从master打包.在节点上使用##在master上执行dockersave-opause.tark8s.gcr.io/pause:3.1dockersave-okube-proxy.tark8s.gcr.io/kube-proxy##在节点上执行dockerload-我pause.tardockerload-ikube-proxy。tarreinstallflanneldkubectldelete-fkube-flannel.ymlkubectlcreate-fkube-flannel.yml修改kubelet,使用kubeadm添加节点后,节点一直处于NotReady状态,报错信息为:runtimenetworknotready:NetworkReady=falsereason:NetworkPluginNotReadymessage:docker:networkpluginisnotready:cniconfiguninitialized地址:解决办法是修改/var/lib/kubelet/kubeadm-flags.env文件,删除参数--network-plugin=cnicat</var/lib/kubelet/kubeadm-flags.envKUBELET_KUBEADM_ARGS="--cgroup-driver=systemd--pod-infra-container-image=k8s.gcr.io/pause:3.1"EOFsystemctl重启kubelet[root@k8s-master~]#kubectlgetnodesNAMESTATUSROLESAGEVERSIONk8s-masterReadymaster79mv1.16.0k8s-node1Ready34mv1.16.0k8s-node2Ready34mv1.16.0错误解决关于报错cniconfiguninitializedAddresses,之前是直接删除参数--network-plugin=cni,但是这样只能把node状态改成ready,但是Pod之间的网络还是不可用正确解决方法:修改kube-flannel.yaml,在第111行添加参数cniVersion:vimkube-flanneld.yaml{"name":"cbr0","cniVersion":"0.3.1",....installflannel##如果之前安装过,先删除##kubectldelete-fkube-flannel.yamlkubectlapply-fkube-flannel.yaml