当前位置: 首页 > article >正文

k8s网络插件及基础命令

一、k8s的cni网络插件

1.k8s的内部网络模式

  • pod内的容器与容器之间的通信。
  • 一个节点上的pod之间的通信,docker0网桥直接通信。
  • 不同节点上的pod之间的通信:通过物理网卡的ip地址和其他节点上的物理网卡的设备进行通信,然后把流量转发到指定的pod内。

2.cni作用

  • 给每一个pod提供一个全局的ip地址
  • CNI是一个标准接口,用于容器运行时调用网络插件,配置容器的网络,设置容器的网络命名空间,ip地址,路由等参数。

3.cni的插件类型  

3.1 flannel插件

        它是一种overlay网络模式,tcp数据包封装在另一种网络里面进行路由转发的模式,在二层的基础上再创建一个逻辑上的网络层,可以实现跨节点的容器通信。

(1)模式
模式说明
udp模式 (默认模式)性能最差,基于应用层转发
vxlan模式基于内核转发,最常用的方式
host-gw性能最好,但是配置麻烦
(2)vxlan模式的工作原理  
  • 数据帧从主机A上的pod1出发,二次封装源ip和目的ip。(flannel会通过apiserver保存一张路由表到etcd)。
  • 从pod1出发的数据包,经过docker0/cni0网络接口转到flannel.1接口(vxlan模式的默认接口)。
  • flannel.1接口收到数据后添加vxlan头部,封装在udp报文中。
  • 主机A的网路收到flannel.1接口的数据包,封装主机A的ip,和主机B的ip。
  • 数据包到达主机B,vxlan默认接口是8472,主机B收到数据包,解包,传送到8472端口。就是flannel.1的接口,然后再解包,把数据转发到指定的pod。

3.2 calico插件

        把主机作为路由器,使用BGP同步路由的方式转发数据包。BGP动态路由,自动实现路由选择。

(1)calico的组成部分
组件作用
felix维护宿主机上的路由规则,以及FIB库(转发信息库)
BIRD分发路由规则
confd配置管理组件
(2)转发原理

        为每一个容器设置一个veth pair的设备。相当于桥接的功能,一端介入宿主机的网络空间,veth pair的另一端配置一个路由规则,接入容器docker0/cni0。

(3)路由传播
  • felix在节点上添加pod的ip地址,添加pod的子网路由
  • BIRD在集群内节点内建立BGP的会话,广播本机的路由节点
  • 集群内的节点学习整个路由表,如何能够到达其他节点的pod的下一跳地址
  • 宿主机直接把数据包发送到目标主机,通过veth pair设备直接转发到目标pod

 4.实验

flannel插件

#三台服务器
#192.168.206.10 master;192.168.206.20 node01;192.168.206.30 node02
#三台一起解压缩cni-plugins
cd /opt
mv cni cni_bak
mkdir -p ./cni/bin
tar -xf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin/

#只在主服务器上操作
kubectl apply -f kube-flannel.yml

calico插件

#三台机器一起
cd /opt
mv cni cni_bak
mkdir -p ./cni/bin
tar -xf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin/
mkdir calico
cd calico
docker load -i calico-cni.tar
docker load -i calico-kube-controllers.tar
docker load -i calico-node.tar
docker load -i calico-pod2daemon-flexvol.tar


#只在主服务器上操作
vim calico.yaml
#修改里面定义Pod的网络(CALICO_IPV4POOL_CIDR),需与前面 kube-controller-manager 配置文件指定的 cluster-cidr 网段一样
    - name: CALICO_IPV4POOL_CIDR
      value: "10.244.0.0/16"     #Calico 默认使用的网段为 192.168.0.0/16

kubectl apply -f calico.yaml
kubectl get pod -n kube-system

#自动补齐
vim /etc/profile
source <(kubectl completion bash)
source /etc/profile

kubectl create deployment nginx --image=nginx:1.22 --replicas=3
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc

curl 192.168.206.10:32663

#修改三个容器内的web页面,重新访问,会自动轮询

 

 二、k8s的基础命令

1.基础命令 

基础命令说明
kubectl get pod查看默认命名空间里面的pod状态
kubectl get ns查看命名空间
kubectl get pod -n kube-system查看指定的命名空间,不指定是default
kubectl create namespace abc创建命名空间,指定名字为abc
kubectl create deployment nginx1 --image=nginx:1.22 --replicas=3使用nginx:1.22 镜像,创建了一个名为nginx1 的部署,有 3 个容器副本在运行
kubectl get pod -n abc列出命名空间为abc中的所有 容器组
kubectl expose deployment nginx1 --port=80 --type=NodePort -n abc将现有的nginx1暴露为一个NodePort类型的服务
kubectl get pod -o wide显示详细信息
kubectl delete nginx-6c4c7f844f-47xv5基于控制器创建的pod,删除pod相当于重启,不能把pod完全销毁。
kubectl version查看版本
kubectl api-resources列出当前k8s集群中所有可用的API资源
kubectl describe pod nginx-6c4c7f844f-47xv5查看具体资源的详细信息
kubectl logs nginx-6c4c7f844f-47xv5查看pod的日志
kubectl logs -f nginx-6c4c7f844f-47xv5动态查看
kubectl exec it nginx-6c4c7f844f-hn576 bash进入pod内的容器

2.pod的扩缩容

法一:手动改

kubectl scale deployment nginx1 --replicas=1  #命令行修改副本数

kubectl edit deployments.apps nginx1  #编辑配置文件

法二:自动扩缩容

HPA  根据cpu的负载自动扩缩容

 


http://www.kler.cn/a/536984.html

相关文章:

  • git SourceTree 使用
  • 1.31-子序列问题
  • 甘肃省医保刷脸设备激活步骤
  • WebAssembly:前后端开发的未来利器
  • 红包雨项目前端部分
  • 【容器技术01】使用 busybox 构建 Mini Linux FS
  • LINUX——内核驱动程序
  • Python+requests实现接口自动化测试
  • 阿里云不同账号vpc对等连接
  • 文件上传全详解
  • 当春晚遇上AI,传统与科技的奇妙碰撞
  • 使用 Axios 进行高效的数据交互
  • 各种协议设计
  • (2025|Meta,LLM,token 压缩/挑选,离散潜在标记,VQ-VAE)混合潜在标记和文本标记以改进语言模型推理
  • 详解正则表达式与案例
  • DOMParser解析TikTok页面中的图片元素
  • C# 中 Guid类 使用详解
  • Python3+Request+Pytest+Allure+Jenkins 接口自动化测试[手动写的和AI写的对比]
  • 3. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--什么是微服务--微服务的核心特性与设计理念
  • UE求职Demo开发日志#23 线性任务系统数据层实现
  • zephyr devicetree
  • Android 多环境(生产、测试、开发)多域名网络配置
  • 一次报警了解:direct path read、enq: KO - fast object checkpoint
  • 【C语言】文件操作详解 - 从打开到关闭
  • STM32的HAL库开发---高级定时器---输出比较模式实验
  • Java 多线程、线程同步、线程池