一、环境部署
主机 | 服务 |
---|---|
192.168.91.5 | k8s集群master01 |
192.168.91.8 | k8s集群master02 |
192.168.91.6 | k8s集群node01 |
192.168.91.7 | k8s集群node02 |
192.168.91.9 | 负载均衡nginx+keepalive01(master) |
192.168.91.10 | 负载均衡nginx+keepalive02(backup) |
二、部署flannel
2.1叙述
2.2 部署
2.2.1 在node01节点上操作
2.2.1.1 上传cni-plugins-linux-amd64-v0.8.6.tgz和flannel.tar到/opt目录中
cd /opt/
docker load -i flannel.tar
mkdir /opt/cni/bin
tar zxvf cni-plugins-linux-amd64-v0.8.6.tgz -c /opt/cni/bin
2.2.2 在master01节点上操作
2.2.2.1 上传kube-flannel.yml文件到/opt/k8s目录中,部署cni网络
2.2.3 部署calico
k8s 组网方案对比:
- flannel方案
需要在每个节点上把发向容器的数据包进行封装后,再用隧道将封装后的数据包发送到运行着目标pod的node节点上。目标node节点再负责去掉封装,将去除封装的数据包发送到目标pod上。数据通信性能则大受影响。
- calico方案
calico不使用隧道或nat来实现转发,而是把host当作internet中的路由器,使用bgp同步路由,并使用iptables来做安全访问策略,完成跨host转发。
采用直接路由的方式,这种方式性能损耗最低,不需要修改报文数据,但是如果网络比较复杂场景下,路由表会很复杂,对运维同事提出了较高的要求。
calico 主要由三个部分组成:
calico cni插件:主要负责与kubernetes对接,供kubelet调用使用。
- felix:负责维护宿主机上的路由规则、fib转发信息库等。
- bird:负责分发路由规则,类似路由器。
- confd:配置管理组件。
calico 工作原理:
calico 是通过路由表来维护每个 pod 的通信。calico 的 cni 插件会为每个容器设置一个 veth pair 设备, 然后把另一端接入到宿主机网络空间,由于没有网桥,cni 插件还需要在宿主机上为每个容器的 veth pair 设备配置一条路由规则, 用于接收传入的 ip 包。
有了这样的 veth pair 设备以后,容器发出的 ip 包就会通过 veth pair 设备到达宿主机,然后宿主机根据路由规则的下一跳地址, 发送给正确的网关,然后到达目标宿主机,再到达目标容器。
这些路由规则都是 felix 维护配置的,而路由信息则是 calico bird 组件基于 bgp 分发而来。
calico 实际上是将集群里所有的节点都当做边界路由器来处理,他们一起组成了一个全互联的网络,彼此之间通过 bgp 交换路由, 这些节点我们叫做 bgp peer。
目前比较常用的cni网络组件是flannel和calico,flannel的功能比较简单,不具备复杂的网络策略配置能力,calico是比较出色的网络管理插件,但具备复杂网络配置能力的同时,往往意味着本身的配置比较复杂,所以相对而言,比较小而简单的集群使用flannel,考虑到日后扩容,未来网络可能需要加入更多设备,配置更多网络策略,则使用calico更好。
2.2.3.1 在master01节点上操作
2.2.3.2 等calico pod都running,节点也会准备就绪
2.2.4 node02节点部署
2.2.4.1 在node01节点上操作
2.2.5 在node02节点上操作
2.2.5.1 启动kubelet服务
2.2.6 在master01节点上操作
kubectl get csr
2.2.7 通过csr请求
kubectl certificate approve node-csr-bbqeh6lvhd4r6yddueepthkb6t_cjdcpvsmdvnh81y0
kubectl get csr
2.2.8 加载ipvs模块
2.2.9 部署coredns
2.2.9.1 在所有node节点上操作
2.2.9.1.1 上传coredns.tar到/opt目录中
2.2.9.2 在master01节点上操作
2.2.9.2.1 上传coredns.yaml文件到/opt/k8s目录中,部署coredns
2.2.9.3 dns解析测试
注:
如果出现以下报错
[root@master01 k8s]# kubectl run -it --image=busybox:1.28.4 sh
if you don't see a command prompt, try pressing enter.
error attaching, falling back to logs: unable to upgrade connection: forbidden (user=system:anonymous, verb=create, resource=nodes, subresource=proxy)
error from server (forbidden): forbidden (user=system:anonymous, verb=get, resource=nodes, subresource=proxy) ( pods/log sh)
需要添加 rbac的权限 直接使用kubectl绑定 clusteradmin 管理员集群角色 授权操作权限
[root@master01 k8s]# kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous
clusterrolebinding.rbac.authorization.k8s.io/cluster-system-anonymous created
2.2.10 master02节点部署
2.2.10.1 从master01节点上拷贝证书文件、各master组件的配置文件和服务管理文件到master02 节点
2.2.10.2 修改配置文件kube-apiserver中的ip
2.2.10.3 在master02节点上启动各服务并设置开机自启
2.2.10.4 查看node节点状态
2.2.11 负载均衡部署
//配置load balancer集群双机热备负载均衡(nginx实现负载均衡,keepalived实现双机热备)
##### 在lb01、lb02节点上操作 #####
//配置nginx的官方在线yum源,配置本地nginx的yum源
2.2.11.1 修改nginx配置文件,配置四层反向代理负载均衡,指定k8s群集2台master的节点ip和6443端口
2.2.11.2 检查配置文件语法
2.2.11.3 启动nginx服务,查看已监听6443端口
2.2.11.4 部署keepalived服务
2.2.11.5 修改keepalived配置文件
2.2.11.6 创建nginx状态检查脚本
2.2.11.7 启动keepalived服务(一定要先启动了nginx服务,再启动keepalived服务)
2.2.11.8 修改node节点上的bootstrap.kubeconfig,kubelet.kubeconfig配置文件为vip
2.2.11.9 重启kubelet和kube-proxy服务
2.2.11.10 在lb01上查看nginx和 node 、 master节点的连接状态
2.2.12 在master01节点上操作
2.2.12.1 测试创建pod
2.2.12.2 查看pod的状态信息
kubectl get pods
kubectl get pods
kubectl get pods -o wide
curl 172.17.36.2
kubectl logs nginx-dbddb74b8-nf9sk
2.3 部署 dashboard
2.3.1 dashboard介绍
仪表板是基于web的kubernetes用户界面。您可以使用仪表板将容器化应用程序部署到 kubernetes集群,对容器化应用程序进行故障排除,并管理集群本身及其伴随资源。您可以使用仪表板来概述群集上运行的应用程序,以及创建或修改单个kubernetes资源(例如deployment,job,daemonset等)。例如,您可以使用部署向导扩展部署,启动滚动更新,重新启动pod或部署新应用程序。仪表板还提供有关群集中kubernetes资源状态以及可能发生的任何错误的
2.3.1.1 在master01节点上操作
2.3.1.1.1 上传recommended.yaml文件到/opt/k8s目录中
2.3.1.1.2 创建service account并绑定默认cluster-admin管理员集群角色
发表评论