kubernetes的学习日志3-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”选项即可。

准备用于实践操作的集群环境

K8s集群部署目标示意图

准备四个虚拟主机

这里使用的虚拟机是VMware,操作系统是Centos7。
修改主机名:
vim /etc/networks
修改主机名-k8s-master
修改主机名映射:
vim /etc/hosts
在这里插入图片描述
关闭firewalld:
systemctl stop firewalld(关闭)
systemctl disable firewalld(开机禁用)

设置docker yum源:

yum install -y yum-utils device-mapper-persistent-data lvm2

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
修改节点主机IP
vim /etc/networks
修改节点主机名

vim /etc/hosts
修改节点主机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相应导入到本地仓库,那么会报错:
kubeadm初始化所需的镜像
错误会显示所需要拉取的镜像仓库和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初始化成功
如果出现上面的内容表示初始化成功,如何把图中的红圈标记的三条命令,分别执行一次,这是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安装
在flannel的Githup主页面介绍,如果kubernetes是1.7版本以上我们只需要安装后面的命令安装即可,我上面安装的是1.15.3。

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

flannel开始安装
上面输入内容表示flannel已经开始安装,但是不代表已经安装完成。
我们通过命令

docker images

查看flannel镜像是否已经拉下来
flannel-images-pull
当镜像拉取下来后,我们通过命令

kubectl get pods -n kube-system

初始化Pods
上面输出显示了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-join
输出上面信息,表示node节点已经加入到当前k8s集群。

再到master主机,输入

kubectl get nodes

nodes
如同所示,这样集群中便有了一个master节点和一个node节点

node2和node3同样的方式初始化
集群环境初始化完成
这样我们用于实践的K8s集群环境就初始化完成了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章