打不开公式编辑器(公式编辑器用不了)
880
2022-05-30
前言:三个节点的节点配置相关信息以及各个节点的Docker安装,见我的前两篇博客!下面开始正文。
安装K8S集群及网络组件
2.6.1安装前准备工作
K8S官方安装文档建议每个节点在安装前都需要禁用SELINUX
Note:
Disabling SELinux by running setenforce 0 is required to allow containers to access the host filesystem, which is required by pod networks for example. You have to do this until SELinux support is improved in the kubelet.
Node1节点SELINUX已禁用!
2.6.2配置安装源-官方文档/阿里云源
cat <
这里由于我们没法用京东云主机翻墙,因此我直接配置阿里的镜像安装K8S
cat <
增加了kubernetes.repo
2.6.3安装K8S组件
#yum install -y kubelet kubeadm kubectl ipvsadm #yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes (官方文档命令)
安装完成!
重启K8S相关服务
#systemctl enable kubelet && systemctl start kubelet
2.6.4配置相关参数
A:分别配置三台主机hosts文件解析
B:关闭系统swap分区(三节点全部操作)
# 临时关闭swap
# 永久关闭 注释/etc/fstab文件里swap相关的行
swapoff -a
这里解析下为什么要关闭系统的swap分区:
kubernetes的想法是将实例紧密包装到尽可能接近100%。 所有的部署应该与CPU /内存限制固定在一起。 所以如果调度程序发送一个pod到一台机器,它不应该使用交换。 设计者不想交换,因为它会减慢速度。所以关闭swap主要是为了性能考虑。当然为了一些节省资源的场景,比如运行容器数量较多,可添加kubelet参数 --fail-swap-on=false来解决。
C:开启forward(三节点全部操作)
Docker从1.13版本开始调整了默认的防火墙规则
禁用了iptables filter表中FOWARD链
这样会引起Kubernetes集群中跨Node的Pod无法通信
# iptables -P FORWARD ACCEPT
D:配置相关转发参数(三节点全部操作)
在CentOS/redhat上可能会出现路由失败,因此需要做如下配置:
cat <
E:配置pause镜像/cgroup等(三节点全部操作)
# 配置kubelet使用国内pause镜像 # 配置kubelet的cgroups # 获取docker的cgroups DOCKER_CGROUPS=$(docker info | grep 'Cgroup' | cut -d' ' -f3) echo $DOCKER_CGROUPS cat >/etc/sysconfig/kubelet< 2.6.5初始化master节点 kubeadm init --kubernetes-version=v1.11.0 --pod-network-cidr=10.244.0.0/16 报错了,截图如下: 应该是无法直接从google拉取相关容器镜像,但是我应该配置过阿里的K8S镜像源了为啥还报错呢?(这里是个巨大的坑,最主要的原因是没有科学上网,后面自己做实验的小伙伴,要不想办法让你的环境科学上网,要不就自己把需要的镜像全部pull到本地节点,然后按照他们的要求用docker tag命令修改成他要求的格式image,后面我会继续遇到此类问题,请继续往下围观。。。) 解决办法:新建一个执行脚本,先把镜像下载下来后改名然后再做kubeadm初始化工作(脚本内容和脚本执行后的结果如下图,从脚本内容看,这个脚本也是网上的兄弟分享出来的,这位兄弟写的脚本也是从自己的私有镜像仓库里拉到本地节点,然后修改image的名称) 以上运行后发现还是有三个包无法下载下来,但是比第一次要少,第一次一共有7个image无法pull,前面有截图大家可以对比一下 备注:脚本内容有问题,最后三个包(k8s.gcr.io/pause:3.1; k8s.gcr.io/etcd-amd64:3.2.18 ;k8s.gcr.io/coredns:1.1.3)在脚本里的版本不一致,更换脚本内容如下: 重新执行脚本,截图如下: 再次开始初始化,前面是K8S版本号,后面是你POD 网络的 IP 段(为啥非得是这个网段?flannel网络默认?-确实是flannel网络默认的pod网络地址段) 初始化成功! 最下面的这行kubeadm join,就是用来让别的node加入集群的,可以看出非常方便。我们要保存好这一行东西,这是我们之后让node加入集群的凭据,一会儿会用到。 kubeadm join 192.168.0.12:6443 --token m9t7wo.ut3wimfioutlvdmw --discovery-token-ca-cert-hash sha256:8d11ddabde6a0b597bae9e0df488b14101486c7406797b10716e3fd053a31920 这个时候,我们还不能通过kubectl来控制集群,要让kubectl可用(配置 kubectl认证信息),我们需要做: # 对于非root用户 $ mkdir -p $HOME/.kube $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config # 对于root用户$ export KUBECONFIG=/etc/kubernetes/admin.conf # 也可以直接放到~/.bash_profile(推荐用这个命令) $ echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile 2.6.6安装网络network add-on(flannel) network addon必须在任何app部署之前安装好。同样的,kube-dns也会在network addon安装好之后才启动。kubeadm只支持CNI-based networks(不支持kubenet)。 比较常见的network addon有:Calico, Canal, Flannel, Kube-router, Romana, Weave Net等。这里我们使用Flannel。 # 下载配置 mkdir flannel && cd flannel wget # 修改配置yaml文件 # 此处的ip配置要与上面kubeadm的pod-network一致 net-conf.json: | { "Network": "10.244.0.0/16", "Backend": { "Type": "vxlan" } } # 修改镜像 image: registry.cn-shanghai.aliyuncs.com/gcr-k8s/flannel:v0.10.0-amd64 # 如果Node有多个网卡的话,参考flannel issues 39701, # https://github.com/kubernetes/kubernetes/issues/39701 # 目前需要在kube-flannel.yml中使用--iface参数指定集群主机内网网卡的名称, # 否则可能会出现dns无法解析。容器无法通信的情况,需要将kube-flannel.yml下载到本地, # flanneld启动参数加上--iface= 创建flannel目录,并进入目录,利用wget下载flannelv0.10.0版本的yml文件,如下图: 执行kubectl apply -f kube-flannel.yml # 查看 kubectl get pods --namespace kube-system kubectl get svc --namespace kube-system 2.6.7配置节点加入集群 在其他两个节点输入我们之前在做kubeadm初始化的时候命令行给出的命令: 小技巧 忘记初始master节点时的node节点加入集群命令怎么办(在master节点输入) # 简单方法 kubeadm token create --print-join-command # 第二种方法token=$(kubeadm token generate) kubeadm token create $token --print-join-command --ttl=0 查看节点状态 kubectl get node 接下来看我在安装flannel组件的时候踩过的坑,以及如何解决!!! 2.6.8解决flannel报错问题 安装完flannel网络组件查看状态的时候发现有错误出现:导致我刚开始没发现,当在创建pod的时候,一直提示containercreating,容器创建中,始终无法创建成功!!! 进一步看看报错信息发现: 解决方案: 针对缺少k8s.gcr.io/kube-proxy-amd64:V1.11.0的解决方案思路是,从阿里云镜像服务市场内pull了一个V1.11.1的包,然后重新tag! 备注:第二行命令里面 k8s前面的“tag”多余了。 结果发现还是报错,原因是我实在找不到v1.11.0的包,用pull了一个v1.11.1d的image,最后无奈就又用tag命令把版本更换成v1.11.0后,再次 Kubectl describe pod –namespace=kube-system发现之前报错的两个节点的proxy服务正常! 但是flannel的组件在node2和node3仍然报错,之前我们查看过详细报错说是flannel的image已经在节点存在,于是我们就到node2和node3上分别重启了kubelet服务 systemctl restart kubelet后,全部正常: 至此 3节点的K8S集群+flannel安装完成。 最后给大家分享一个学习k8s的视频网站,马哥的教程,我看了非常深入也成体系,讲解由浅入深,我觉得非常棒,解决了我很多在普通的文章里看不到的疑问!!!大家可以扫码学习,价格也不算贵! CentOS Kubernetes
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。