kubernetes的集群部署
kubernetes系统可以运行在多种平台之上,包括虚拟机、裸服务器或PC等,例如本地主机或者托管的云端虚拟机。这里使用虚拟机作为本地主机,将master和node部署到多台主机之上。
kubeadm部署工具
kuberadm是kubernetes自带的集群构建工具,它负责执行构建一个最小化的可用集群以及将其启动等必要步骤,简单来讲,kuberadm是kubernetes集群全生命周期的管理工具,可用于实现集群的部署、升级/降级以及拆除。
集群的运行模式
独立模式:系统个组件直接以守护进程的方式运行在节点之上,各个组件之间相互协作构成集群。这种模式需要将个组件运行于系统之上的独立守护进程当中,期间需要用到的证书及Token等认证信息也需要手动完成,过程非常繁琐而且极其容易出错;如果有需要用到,建议使用Githup上合用的项目进行辅助,例如通过ansible playbook进行自动部署。
静态Pod模式:除了kubelet和docker之外的其他组件(如:etcd、kube-apiservice、kube-controller-manager和kube-scheduler等)都是以静态Pod对象运行在集群之上。
自托管模式:类似第二种方式,将kubelet和docker之外的其他组件运行为集群之上的Pod对象,但不同的是,这些Pod对象托管运行在集群自身之上受控于DaemonSet类型的控制器,而非静态的Pod对象。
使用kubeadm部署的kubernetes集群可运行为第二或者第三中模式,默认为静态Pod模式,需要使用自托管模式时,kubeadm init命令使用“–features-gates=seltHosting”选项即可。
准备用于实践操作的集群环境
准备四个虚拟主机
这里使用的虚拟机是VMware,操作系统是Centos7。
修改主机名:
vim /etc/networks
修改主机名映射:
vim /etc/hosts
关闭firewalld:
systemctl stop firewalld(关闭)
systemctl disable firewalld(开机禁用)
设置docker yum源:
yum install -y yum-utils device-mapper-persistent-data lvm2
扫描二维码关注公众号,回复: 8898920 查看本文章
yum-config-manager
–add-repo
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
设置kubernetes yum源:
vim /etc/yum.repos.d/kubernetes.repo
添加内容
[kubernetes] name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
enable=1
这里使用的是阿里的云镜像源
克隆节点主机:
关闭k8s-master主机,右键虚拟机主机->管理->克隆,克隆方式选择完整克隆,分别克隆三台虚拟主机。
修改节点主机参数:
由于node主机是master克隆出来的,需要修改其一些参数,修改node主机IP,主机名称和Hosts
vim /etc/sysconfig/network-scripts/ifcfg-ens33
vim /etc/networks
vim /etc/hosts
初始化Master
修改bridge-nf-call-iptables
由于kubeadm初始化的时候,会生成大量iptables规则,所有需要开启bridge-nf-call-iptables
cat /proc/sys/net/bridge/bridge-nf-call-iptables
如果值为0,则需要修改为1。
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
同理/proc/sys/net/bridge/bridge-nf-call-ip6tables也一样。
安装docker-ce,kubelet,kubeadm,kubectl
yum install -y docker-ce kubelet-1.15.3 kubeadm-1.15.3 kubectl-1.15.3
这里我使用的k8s版本是1.15.3,那是因为后面k8s初始化的时候需要使用k8s.gcr.io这个仓库地址的镜像,而这个仓库因为一些原因在国内无法被访问,不过有很多人把镜像同步到了docker.io上,需要我们自己去找,而我手上有的镜像版本是1.15.3,后面我会放出这些镜像的压缩包的地址。如果你想安装最新的k8s稳定版,只需要把后面的版本号去掉就行,然后根据安装的提示自己去找相应版本的依赖镜像,或者直接FQ。
修改kubelet配置文件
vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="–fail-swap-on=false"
kubeadm初始化
kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
–pod-network-cidr=10.244.0.0/16和–service-cidr=10.96.0.0/12都是kubeadm初始化时候的默认值,也可以不指定这两个参数或者指定为其他网段
这时候如果你不是FQ或者提前把k8s.gcr.io相应导入到本地仓库,那么会报错:
错误会显示所需要拉取的镜像仓库和Tag。
下载所需要的镜像压缩包并且导入到本地仓库
重置kubeadm
kubeadm reset
再次执行初始化命令
kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
如果出现上面的内容表示初始化成功,如何把图中的红圈标记的三条命令,分别执行一次,这是kubeadm创建的k8s配置信息。
同时记得把最后面这个信息记录下来,因为后面node节点需要加入到当前集群需要用到这个信息
kubeadm join 192.168.3.80:6443 --token j5jmj3.f156dy95ejkzonnd \
–discovery-token-ca-cert-hash sha256:d55325115fa153d2fcb53a69bf3d3f24bb6b9369fb3c7594297baa3b98d27cc4
安装flannel
这里k8s集群的Pod网络配置,有flannel插件提供,flannel不属于k8s官方组件,所以需要我们额外自己安装。
flannel Githup
在flannel的Githup主页面介绍,如果kubernetes是1.7版本以上我们只需要安装后面的命令安装即可,我上面安装的是1.15.3。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
上面输入内容表示flannel已经开始安装,但是不代表已经安装完成。
我们通过命令
docker images
查看flannel镜像是否已经拉下来
当镜像拉取下来后,我们通过命令
kubectl get pods -n kube-system
上面输出显示了Master节点所有的系统组件静态Pod对象和flannel Pod对象。
初始化node主机
前面和master初始化时一样:修改bridge-nf-call-iptables、安装docker-ce,kubelet,kubeadm,kubectl、修改kubelet配置文件
导入本地依赖镜像
node节点镜像只需要导入k8s.gcr.io/kube-proxy和k8s.gcr.io/pause即可,flannel在加入master的时候会自动拉取。
加入到mater
找到master刚刚初始化成功后,最后输出的token信息,粘贴过来,同时后面加上–ignore-preflight-errors=Swap
kubeadm join 192.168.3.80:6443 --token j5jmj3.f156dy95ejkzonnd \
–discovery-token-ca-cert-hash
sha256:d55325115fa153d2fcb53a69bf3d3f24bb6b9369fb3c7594297baa3b98d27cc4 --ignore-preflight-errors=Swap
输出上面信息,表示node节点已经加入到当前k8s集群。
再到master主机,输入
kubectl get nodes
如同所示,这样集群中便有了一个master节点和一个node节点
node2和node3同样的方式初始化
这样我们用于实践的K8s集群环境就初始化完成了。