k8s系列02-kubeadm部署flannel网络的k8s集群

本文主要在centos7系统上基于 docker 和 flannel 组件部署 v1.23.6 版本的k8s原生集群,由于集群主要用于自己平时学习和测试使用,加上资源有限,暂不涉及高可用部署。

此前写的一些关于k8s基础知识和集群搭建的一些 方案 ,有需要的同学可以看一下。

机器均为8C8G的虚拟机,硬盘为100G。

同一个k8s集群内的所有节点需要确保 mac 地址和 product_uuid 均唯一,开始集群初始化之前需要检查相关信息

如果k8s集群的节点有多个网卡,确保每个节点能通过正确的网卡互联访问

这里可以根据自己的习惯选择ntp或者是chrony同步均可,同步的时间源服务器可以选择阿里云的 ntp1.aliyun.com 或者是国家时间中心的 ntp.ntsc.ac.cn 。

k8s集群之间通信和服务暴露需要使用较多端口,为了方便,直接禁用防火墙

这里主要是需要配置内核加载 br_netfilter 和 iptables 放行 ipv6 和 ipv4 的流量,确保集群内的容器能够正常通信。

虽然新版本的k8s已经支持双栈网络,但是本次的集群部署过程并不涉及IPv6网络的通信,因此关闭IPv6网络支持

IPVS是专门设计用来应对负载均衡场景的组件, kube-proxy 中的 IPVS 实现 通过减少对 iptables 的使用来增加可扩展性。在 iptables 输入链中不使用 PREROUTING,而是创建一个假的接口,叫做 kube-ipvs0,当k8s集群中的负载均衡配置变多的时候,IPVS能实现比iptables更高效的转发性能。

详细的官方文档可以参考 这里 ,由于在刚发布的1.24版本中移除了 docker-shim ,因此安装的 版本≥1.24 的时候需要注意 容器运行时 的选择。这里我们安装的版本低于1.24,因此我们继续使用docker。

docker的具体安装可以参考我之前写的 这篇文章 ,这里不做赘述。

CentOS7使用的是 systemd 来初始化系统并管理进程,初始化进程会生成并使用一个 root 控制组 ( cgroup ), 并充当 cgroup 管理器。 Systemd 与 cgroup 集成紧密,并将为每个 systemd 单元分配一个 cgroup 。 我们也可以配置 容器运行时 和 kubelet 使用 cgroupfs 。 连同 systemd 一起使用 cgroupfs 意味着将有两个不同的 cgroup 管理器 。而当一个系统中同时存在cgroupfs和systemd两者时,容易变得不稳定,因此最好更改设置,令容器运行时和 kubelet 使用 systemd 作为 cgroup 驱动,以此使系统更为稳定。 对于 Docker, 需要设置 native.cgroupdriver=systemd 参数。

k8s官方有 详细的文档 介绍了如何设置kubelet的 cgroup driver ,需要特别注意的是,在1.22版本开始,如果没有手动设置kubelet的cgroup driver,那么默认会设置为systemd

一个比较简单的指定kubelet的 cgroup driver 的方法就是在 kubeadm-config.yaml 加入 cgroupDriver 字段

我们可以直接查看configmaps来查看初始化之后集群的kubeadm-config配置。

当然因为我们需要安装的版本高于1.22.0并且使用的就是systemd,因此可以不用再重复配置。

kube三件套就是 kubeadm 、 kubelet 和 kubectl ,三者的具体功能和作用如下:

需要注意的是:

CentOS7的安装比较简单,我们直接使用官方提供的 yum 源即可。需要注意的是这里需要设置 selinux 的状态,但是前面我们已经关闭了selinux,因此这里略过这步。

在集群中所有节点都执行完上面的三点操作之后,我们就可以开始创建k8s集群了。因为我们这次不涉及高可用部署,因此初始化的时候直接在我们的目标master节点上面操作即可。

此时我们再查看对应的配置文件中的镜像版本,就会发现已经变成了对应阿里云镜像源的版本

当我们看到下面这个输出结果的时候,我们的集群就算是初始化成功了。

刚初始化成功之后,我们还没办法马上查看k8s集群信息,需要配置kubeconfig相关参数才能正常使用kubectl连接apiserver读取集群信息。

配置完成后,我们再执行相关命令就可以查看集群的信息了。

这时候我们还需要继续添加剩下的两个节点作为worker节点运行负载,直接在剩下的节点上面运行集群初始化成功时输出的命令就可以成功加入集群:

如果不小心没保存初始化成功的输出信息也没有关系,我们可以使用kubectl工具查看或者生成token

添加完成之后我们再查看集群的节点可以发现这时候已经多了两个node,但是此时节点的状态还是 NotReady ,接下来就需要部署CNI了。

flannel 应该是众多开源的CNI插件中入门门槛最低的CNI之一了,部署简单,原理易懂,且相关的文档在网络上也非常丰富。

针对 kube-flannel.yml 文件,我们需要修改一些 参数 以适配我们的集群:

修改完成之后我们直接部署即可

集群部署完成之后我们在k8s集群中部署一个nginx测试一下是否能够正常工作。首先我们创建一个名为 nginx-quic 的命名空间( namespace ),然后在这个命名空间内创建一个名为 nginx-quic-deployment 的 deployment 用来部署pod,最后再创建一个 service 用来暴露服务,这里我们先使用 nodeport 的方式暴露端口方便测试。

部署完成后我们直接查看状态

最后我们进行测试,这个nginx-quic的镜像默认情况下会返回在nginx容器中获得的用户请求的IP和端口

  • k8s绯诲垪02-kubeadm閮ㄧ讲flannel缃戠粶鐨刱8s闆嗙兢
    绛旓細铏界劧鏂扮増鏈殑k8s宸茬粡鏀寔鍙屾爤缃戠粶锛屼絾鏄湰娆$殑闆嗙兢閮ㄧ讲杩囩▼骞朵笉娑夊強IPv6缃戠粶鐨勯氫俊锛屽洜姝ゅ叧闂璉Pv6缃戠粶鏀寔 IPVS鏄笓闂ㄨ璁$敤鏉ュ簲瀵硅礋杞藉潎琛″満鏅殑缁勪欢锛 kube-proxy 涓殑 IPVS 瀹炵幇 閫氳繃鍑忓皯瀵 iptables 鐨勪娇鐢ㄦ潵澧炲姞鍙墿灞曟с傚湪 iptables 杈撳叆閾句腑涓嶄娇鐢 PREROUTING锛岃屾槸鍒涘缓涓涓亣鐨勬帴鍙o紝鍙仛 kube-ip...
  • 鍩轰簬Linux鑷繁鍒濇鎼缓Kubernetes(k8s)闆嗙兢鍩虹,璇︾粏鏁欑▼
    绛旓細鍦ㄥ涓绘満鍒嗗埆璁剧疆涓绘満鍚嶏細k8s-master锛宬8s-node01锛宬8s-node02 hosts璁剧疆 1锛屾洿鏀筪ocker榛樿椹卞姩涓簊ystemd 涓洪槻姝㈠垵濮嬪寲鍑虹幇涓绯诲垪鐨勯敊璇紝璇锋鏌ocker鍜宬ubectl椹卞姩鏄惁涓鑷达紝鍚﹀垯kubectl娌℃硶鍚姩閫犳垚鎶ラ敊銆傜増鏈笉涓鏍凤紝docker鏈変簺涓篶groupfs锛岃宬ubectl榛樿椹卞姩涓簊ystemd锛屾墍浠ラ渶瑕佹洿鏀筪ocker椹卞姩銆傚彲鏌ョ湅鑷繁do...
  • 浣跨敤kubeadm鐨勬柟寮忛儴缃瞯1.21.2鐗堟湰k8s
    绛旓細sysctl -p /etc/sysctl.d/kubernetes.conf 瀹夎kubernetes鍜宒ocker;瀹夎k8s鍜宒ocker;鎵鏈夎妭鐐规坊鍔爇8s鍜宒ocker鐨剏um婧;Yum瀹夎docker锛屽惎鍔╠ocker;yum瀹夎kubeadm锛宬ubelet鍜宬ubectl;閮ㄧ讲涓昏妭鐐癸紝閮ㄧ讲缃戠粶鎻掍欢锛屽伐浣滆妭鐐规敞鍐屽埌涓昏妭鐐;鍦ㄦ瘡鍙版満鍣ㄤ笂閮介渶瑕佹搷浣 cat < >/etc/yum.repos.d/kubernetes.repo [kubern...
  • k8s鎼缓杩囩▼
    绛旓細01 kubectl get pods 02 kubectl get pods -o wide 03 kubectl describe pod nginx-pod 浜庢槸鏉ュ埌worker02鑺傜偣锛宒ocker ps涓涓 涓嶅Θ杩涘叆璇ュ鍣ㄨ瘯璇昜鍙互鍙戠幇鍙湁鍦╳orker02涓婃湁璇ュ鍣紝鍥犱负pod杩愯鍦╳orker02涓奭锛歞ocker exec -it k8s_nginx-container_nginx-pod_default_3ee0706d-e87a-11e9-a904-5...
  • 扩展阅读:www.sony.com.cn ... 80s理论电网 ... k8手机经典版最新款2024 ... k8线三线理论 ... xboxone欧版 ... www.968777.cn ... k8手机经典网 ... matebook14 ... k8线理论大全 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网