Kindä»ç»
Kind æ¯ä¸ç§ä½¿ç¨ Docker 容å¨ä½ä¸º node èç¹ï¼è¿è¡æ¬å° Kubernetes é群çå·¥å ·ï¼å¨ K8s ä¸æçé常广æ³çåºç¨ãä»ä¹æ¯ Kind
Kindï¼Kubernetes IN Dockerï¼[1]æ¯ä¸ä¸ªç¨æ¥å¿«éå建åæµè¯ kubernetes çå·¥å ·ï¼å®æç¯å¢çä¾èµéä½å°æå°ï¼ä» éè¦æºå¨å®è£ äº Docker å³å¯ä½¿ç¨ã
Kind å¯ä»¥åä»ä¹ï¼
Kind æåªäºä¼å¿ï¼
ä½¿ç¨ Kind
Kind çåç
Kind 使ç¨ä¸ä¸ª container æ¥æ¨¡æä¸ä¸ª nodeï¼å¨ container éé¢è· systemd ï¼å¹¶ç¨ systemd æ管 kubelet 以å containerdï¼ç¶åéè¿å®¹å¨å é¨ç kubelet æå ¶ä» K8s ç»ä»¶ï¼æ¯å¦ kube-apiserverãetcdãCNI çè·èµ·æ¥ã
å®å¯ä»¥éè¿é ç½®æ件çæ¹å¼å建å¤ä¸ª container æ¥æ¨¡æå建å¤ä¸ª nodeï¼å¹¶ä»¥è¿äº node æ建ä¸ä¸ªå¤èç¹ç Kubernetes é群ã
Kind å é¨ä½¿ç¨çé群é¨ç½²å·¥å ·æ¯ kubeadmï¼åå© kubeadm æä¾ç Alpha ç¹æ§ï¼å®å¯ä»¥é¨ç½²å æ¬ HA master çé«å¯ç¨é群ãåæ¶ï¼å¨ HA master ä¸ï¼ å®è¿é¢å¤é¨ç½²äºä¸ä¸ª Nginxï¼ç¨æ¥æä¾è´è½½åè¡¡ vipã
æ建éå
Kind çéåå为两个ï¼ä¸ä¸ª node éåï¼ä¸ä¸ª base éåã
node éå
node éåçæ建æ¯è¾å¤æï¼éè¦éè¿è¿è¡ base éåï¼å¹¶å¨ base éåå æ§è¡æä½ï¼åä¿åæ¤å®¹å¨å 容为éåçæ¹å¼æ¥å®ææ建ãå®å å«çæä½æï¼
å ·ä½çé»è¾ï¼å¯ä»¥åè node.go[2]ã
base éå
base éåç®å使ç¨äº Ubuntu:. ä½ä¸ºåºç¡éåï¼åäºä»¥ä¸è°æ´ï¼
å ·ä½çé»è¾ï¼å¯ä»¥åèæ建ç Dockerfile[3]ã
å建é群
Kind å建é群çåºæ¬è¿ç¨ä¸º:
å ³äºæ¯ä¸ªå®¹å¨æ¯å¦ä½ä½ä¸º node è·èµ·æ¥çï¼è¿éç®å讲解ä¸åçï¼æ ¹æ®ä¸åçè§è²ï¼è°ç¨ä¸åçå½æ°å建èç¹ nodes.go[5]ã
èç¹ï¼å®¹å¨ï¼å建æ¶ï¼éè¿é ç½® --privilegedãæè½½ tmpfsãä¿®æ¹ä¸»æºåçï¼æ¥è¿è¡èç¹ create[6]ã
æ´å¤
Kind æ¯ä¸ä¸ªæ¯è¾ç®åæ趣ç项ç®ï¼å®ç scope [7]å®å¾æ¯è¾æç¡®å ·ä½ï¼ä¹æ¯è¾å°ãå¼åè å¯ä»¥åå© Kind æ Kind çææ³åæ´å¤äºæ ï¼æ¯å¦ï¼
æ¤å¤ï¼æä¸æåå°ç Kind åå© kubeadm æ°ç¹æ§å®ç° HA master é«å¯ç¨é群ãåå© join çæ¹å¼æ©å®¹ master èç¹è¾¾å° HA masterï¼å ¶å é¨å®ç°æ¹å¼ä¹æä¼ç¼ºç¹ï¼æå ´è¶£ç读è å¯ä»¥åè kubeadm æºç [8]ã
åèæç®
1. i-0.8.7-0.x_。
### 查看证书有效期
通过两种方法检查证书有效期:
1. 第一种方法:显示当前证书有效期。
2. 第二种方法:同样显示当前证书有效期。
请注意,如果证书已更新,则显示的如何查看vue源码日期将不同。但与第一种方法的结果一致,通常为一年。
### 修改证书有效期步骤
#### 准备环境
1. 访问Go语言中文网下载最新版本的Go环境。
2. 在Linux系统中配置环境变量。
3. 验证Go环境已正确安装。
#### 下载Kubernetes源码
1. 查看当前系统版本以下载与之匹配的Kubernetes v1..3源码。
2. 确保能访问外网以从GitHub下载源码。
3. 下载源码并解压。
#### 修改源代码文件
1. 修改两个关键文件:`constants.go` 和 `cert.go`。
2. 通过`vim`查找`CertificateValidity`字段。
3. 修改`cert.go`文件中的0.010100的源码相关代码。
4. 编译修改后的源代码文件。
5. 生成新的Kubeadm二进制文件。
6. 备份旧的Kubeadm文件,确保三台master节点均备份。
7. 替换新文件。
#### 更新证书
1. 执行证书更新命令。
2. 观察结果,了解需要重启哪些服务以使更新生效。
3. 重启这台master服务器。
4. 查看新证书,除CA外,所有证书有效期更新为年,未修改`cert.go`文件。
5. 同样步骤更新其他两台master节点,将更新过的Kubeadm文件通过scp传输,并根据上述步骤生成新的freeswitch 源码解析证书文件。记得在更新后重启服务或服务器。
深入理解kubernetes(k8s)网络原理之五-flannel原理
flannel在Kubernetes(k8s)网络架构中扮演着关键角色,其提供多种网络模式,其中最为广泛应用的是VXLAN模式。本文旨在深入探讨VXLAN模式下flannel的运作原理,同时对UDP模式进行简要介绍。
VXLAN模式下的flannel依赖于VXLAN协议,实现跨主机Pod间的通信。这种模式下,flannel的组件工作流程涉及多个关键步骤。首先,flannel-cni文件作为CNI规范下的二进制文件,负责生成配置文件并调用其它CNI插件(如bridge和host-local),从而实现主机到主机的网络互通。flannel-cni文件并非flannel项目源码,而是外设驱动源码位于CNI的plugins中。
在flannel-cni工作流程中,kubelet在创建Pod时,会启动一个pause容器,并获取网络命名空间。随后,它调用配置文件指定的CNI插件(即flannel),以加载相关参数。flannel读取从/subnet.env文件获取的节点子网信息,生成符合CNI标准的配置文件。接着,flannel利用此配置文件调用bridge插件,完成Pod到主机、同主机Pod间的数据通信。
kube-flannel作为Kubernetes的daemonset运行,主要负责跨节点Pod通信的编织工作。它完成的docker源码书籍主要任务包括为每个节点创建VXLAN设备,并更新主机路由。当节点添加或移除时,kube-flannel会相应地调整网络配置。在VXLAN模式下,每个节点上的kube-flannel会与flanneld守护进程进行通信,以同步路由信息。
在UDP模式下,每个节点运行flanneld守护进程,参与数据包转发。flanneld通过Unix域套接字与本地flanneld通信,而非通过fdb表和邻居表同步路由信息。当节点新增时,kube-flannel会在节点间建立路由条目,并调整网络配置以确保通信的连续性。
flannel在0.9.0版本前,使用不同策略处理VXLAN封包过程中可能缺少的ARP记录和fdb记录。从0.9.0版本开始,flannel不再监听netlink消息,优化了内核态与用户态的交互,从而提升性能。
通过理解flannel的运行机制,可以发现它在VXLAN模式下实现了高效的跨节点Pod通信。flannel挂载情况不影响现有Pod的通信,但新节点或新Pod的加入需flannel参与网络配置。本文最后提示读者,了解flannel原理后,可尝试自行开发CNI插件。
二十分钟了解K8S网络模型原理
掌握K8S网络模型无需神秘,只需分钟,本文将带你轻松理解。首先,让我们预习一些基础网络知识:Linux网络命名空间:虚拟化网络栈,如同登录Linux服务器时的默认Host网络栈。
网桥设备:内核中的虚拟端口,用于转发网络数据。
Veth Pair:一对虚拟网卡,常用于连接不同网络命名空间。
VXLAN:扩展局域网,将L2数据包封装到UDP报文中,用于跨主机通信。
BGP:边界网关协议,实现自治系统间的路由可达性。
理解了这些,我们转向单机容器网络模型,这是Docker的基本架构。然后,我们进入K8S网络模型的探索,包括Flannel和Calico两种常见模型:Flannel:两种实现(UDP和VXLAN),分别涉及TUN设备或VXLAN隧道,以及Host-gw的三层解决方案。
Calico:非IPIP模式利用BGP维护路由,无网桥的直接路由规则;IPIP模式通过IP隧道解决跨子网通信问题。
最后,CNI网络插件是K8S的核心组件,负责在Pod创建时设置网络环境,如网络命名空间的配置和路由规则的设定。 通过本文,你将对K8S网络模型有深入理解,进一步实践将使理论更加扎实。详细教程和源代码可以参考相关资源。现在,你已经准备好了深入研究K8S网络的旅程。KubeVirt网络源码分析
在KubeVirt的网络架构中,virt-launcher与虚拟机之间建立了一对一的对应关系,即在每个pod中运行一台虚拟机。本文将聚焦于网络组件的分析。
下图展示了KubeVirt的网络体系,三个实线框表示从外到里依次为:Kubernetes工作节点、工作节点上的POD、以及POD中运行的虚拟机。三个虚线框从下到上分别为:Kubernetes网络(Kubernetes CNI负责配置)、libvirt网络,以及虚拟机网络。本文仅关注libvirt网络与虚拟机网络。
在kubevirt中,LibvirtDomainManager类的preStartHook方法在虚拟机启动前执行,通过调用SetupPodNetwork方法为虚拟机准备网络环境。
SetupPodNetwork方法执行三个关键步骤,分别对应discoverPodNetworkInterface、preparePodNetworkInterfaces和StartDHCP方法。discoverPodNetworkInterface方法收集pod的网络接口信息,包括IP和MAC地址。这些信息将通过DHCP协议传递给虚拟机。为确保虚拟机能接收这些信息,preparePodNetworkInterfaces方法对容器网络进行相应调整。
此方法会启动一个只提供一个DHCP客户端的DHCP服务器(SingleClientDHCPServer)。DHCP服务提供给虚拟机的不仅仅是IP地址,还包括网关信息和路由信息。此过程确保虚拟机在KubeVirt环境中能够正常访问网络。
本文以KubeVirt 0.4.1版本的源码为例分析网络部分,后续将对更最新版本的KubeVirt virt-lancher网络功能进行深入探索。
2024-11-20 07:23
2024-11-20 06:51
2024-11-20 06:43
2024-11-20 05:18
2024-11-20 04:59