怎么做免费的产品图片网站,长春h5建站,庆阳在线网,学校网站建设计划k8s基础 文章目录 k8s基础一、k8s组件二、k8s组件作用1.master节点2.worker node节点 三、K8S创建Pod的工作流程#xff1f;四、K8S资源对象1.Pod2.Pod控制器3.service ingress 五、K8S资源配置信息六、K8s部署1.K8S二进制部署2.K8S kubeadm搭建 七、K8s网络八、K8…k8s基础 文章目录 k8s基础一、k8s组件二、k8s组件作用1.master节点2.worker node节点 三、K8S创建Pod的工作流程四、K8S资源对象1.Pod2.Pod控制器3.service ingress 五、K8S资源配置信息六、K8s部署1.K8S二进制部署2.K8S kubeadm搭建 七、K8s网络八、K8s接口1.CNI容器网络接口1.1flannel3种模式UDP模式工作原理VXLAN模式工作原理 1.2Calico3种模式Calico IPIP模式工作原理Calico BGP模式工作原理1.3flannel 和 calico 区别 1.4VLAN和VXLAN的区别2.CoreDNS3.k8s证书更新 一、k8s组件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-97UFtqWX-1691657414960)(D:\云计算学习资料\云计算三阶\k8s\第一章\k8s组件.png)]
K8S 有 master 和 worker node 两类节点
master节点上有 apiserver controller-manager scheduler 以及使用 etcd 做 k8s 集群的数据库
node节点上有 kubelet kube-proxy 容器引擎/容器运行时docker、containerd二、k8s组件作用
1.master节点
apiserver是所有服务请求的统一访问入口controller-manager控制器管理器负责管理为Pod副本集、命名空间、端点、node等资源对象以及部署的控制器通过apiserver监控整个K8S集群的状态并确保集群处于预期的工作状态scheduler资源调度器负责Pod资源的调度通过调度算法预选策略、优选策略为部署的Pod选择最适合的node节点etcdK8S集群的数据库是一种键值对存储结构的分布式数据库负责存储K8S集群所有的重要信息只有apiserver有读写权限2.worker node节点
kubelet接收master发来的请求创建和管理Pod和容器跟容器引擎交互实现容器的生命周期的管理收集node节点的资源信息和Pod的运行状态汇报给master的apiserverkube-proxy作为service资源的载体实现Pod的网络代理维护网络规则和四层负载均衡工作容器引擎/容器运行时运行容器三、K8S创建Pod的工作流程 1用户通过客户端发送创建Pod的请求到master节点上的apiserver
2apiserver会先把请求信息写入到etcd中保存再找controller-manager根据预设的资源配置模板创建Pod资源
3然后controller-manager会通过apiserver去找scheduler为新创建的Pod选择最合适的node节点
4scheduler通过调度算法的预选策略和优选策略筛选出最合适的node节点进行调度
5然后再通过apiserver找到对应的node节点上的kubelet去创建和管理Pod
6kubelet会跟容器引擎交互来管理Pod/容器的生命周期
7用户还可通过apiserver在kube-proxy上写入网络规则创建service资源实现对Pod的服务发现和负载均衡四、K8S资源对象
1.Pod
Pod是K8S能够创建和管理的最小单元。一个Pod里可以包含一个或者多个应用容器Pod里的容器之间共享网络、存储等资源。2.Pod控制器
Pod 控制器是 Pod 启动的一种模版用来保证在K8S里启动的 Pod 应始终按照用户的预期运行副本数、生命周期、健康状态检查等deployment部署无状态应用。同时也负责管理replicaset维持Pod副本数量符合期望数量和Pod一个容器化的应用进程
statefulset部署有状态应用
daemonset在所有的node节点上部署同一种Pod
job一次性的部署短期任务的PodPod执行完任务就会自动退出
cronjob周期性的部署短期任务的PodPod执行完任务就会自动退出3.service ingress
service在K8S集群内部为通过标签选择器相关联的一组Pod提供一个统一的访问入口地址clusterIP只支持四层代理转发ingress作为K8S集群外部接入层可自定义规则根据用户请求的域名或URL访问路径转发给指定的service支持七层代理转发五、K8S资源配置信息
Apiversion每种资源对象在K8S中使用的api接口版本
Kind 资源对象的类型
Metedata 资源对象的元数据比如 name资源名称namespace命名空间labels标签annotations注释
Spec 资源对象的资源配置清单配置属性比如 副本数镜像名数据卷标签选择器 等
Status 资源对象的当前运行状态信息label标签将键值对配置到任何资源对象上用于选择资源
label selector标签选择器用于查询和筛选拥有某些 label 的资源对象
annotation注释使用元数据来装饰资源可用于作资源对象的注释或设置资源对象额外的功能特性配置
name资源名称在同一个命名空间中同类型的资源对象的名称是唯一的
六、K8s部署
1.K8S二进制部署
1etcd集群
使用cfssl签发证书和私钥
解压etcd软件包获取二进制文件 etcd etcdctl
准备etcd配置文件
启动etcd服务进程加入到etcd集群2master
使用cfssl签发证书和私钥
准备bootstrap-token认证文件
解压服务端软件包获取二进制文件 kube-apiserver kube-controller-manager kubectl kube-scheduler
准备apiserver、controller-manager、scheduler的服务配置文件
准备controller-manager、scheduler、kubectl的 kubeconfig 集群配置文件加入K8S集群的引导文件
依次启动apiserver、controller-manager、scheduler服务进程3node
获取二进制文件 kubelet kube-proxy
准备 kube-proxy、kubelet 的 kubeconfig 集群配置文件 kube-proxy.kubeconfig bootstrap.kubeconfigkubelet初次访问apiserver加入集群的引导文件
准备 kubelet、kube-proxy 的服务配置文件
启动 kubelet 服务进程发起 csr 请求证书master 通过 csr 请求颁发证书给 kubelet
加载 ipvs 模块启动 kube-proxy 服务进程4多 master 高可用
复制 master 的 k8s 相关的 证书、配置文件、二进制文件 和 etcd 的证书
修改 配置文件启动参数 启动 master 组件apiserver、controller-manager、scheduler的服务进程
部署 负载均衡器 和 keepalived 高可用
修改 node 组件kubelet、kube-proxy和 kubectl 的 kubeconfig 配置文件中的 server 参数地址为 VIP2.K8S kubeadm搭建
kubeadm init在使用kubeadm方式安装K8S集群时可根据初始化配置文件或者配置参数快速的初始化生成一个K8S的master管理平台kubeadm join根据kubeadm init初始化的提示信息快速的将一个节点作为node节点或者其它的master节点加入到K8S集群当中1所有节点进行初始化安装docker引擎和kubeadm kubelet kubectl
2生成集群初始化配置文件并进行修改
3使用kubeadm init根据初始化配置文件生成K8S的master控制管理节点
4安装CNI网络插件flannel、calico等
5在其他节点使用kubeadm join将节点以node或者master角色加入K8S集群
七、K8s网络
节点网络 Node节点网卡的IP nodeIP
Pod网络 podIP
Service网络 clusterIP八、K8s接口
CRI 容器运行时接口 docker containerd podman cri-0
CNI 容器网络接口 flannel calico cilium
CSI 容器存储接口 ceph nfs gfs s31.CNI容器网络接口
1.1flannel3种模式
UDP 出现最早性能较差基于flanneld应用程序实现数据包的封装/解封装
VXLAN 默认模式推荐使用的模式性能比UDP模式更好基于内核实现数据包的封装/解封装
Host-gw 性能最好但是配置复杂不能跨网段UDP模式工作原理
1应用数据包从源主机的Pod容器发出到cni0网桥接口再由cni0转发到flannel0虚拟接口
2flanneld服务会监听flannel0接口接收到的数据flanneld服务会将内部数据包封装到UDP报文里
3flanneld会根据在etcd中维护的路由表查到目标Pod所在的Node节点IP在UDP报文外再封装Node节点IP报文、MAC报文后通过物理网卡发送到目标Node节点
4UDP报文通过8285号端口送到目标主机的flanneld进程进行解封装再通过flannel0接口转发到cni0网桥然后通过cni0网桥转发到目标Pod容器VXLAN模式工作原理
1原始数据帧从源主机的Pod容器发出到cni0网桥接口再由cni0转发到flannel.1虚拟接口
2flannel.1接口接收到数据帧后添加VXLAN头部在内核封装成UDP报文
3flanneld会根据在etcd维护的路由表通过物理网卡发送到目标Node节点
4UDP报文通过8472号端口送到目标主机的flannel.1接口在内核进行解封装然后将原始报文通过cni0网桥转发到目标Pod容器1.2Calico3种模式
IPIP模式、 BGP模式、 混合模式Calico IPIP模式工作原理
1源Pod容器发出的原始数据IP包通过内核的IPIP驱动直接封装在宿主机网络的IP包中
2根据tunnel接口的路由通过物理网卡发送到目标Node节点
3数据包到达目标节点后再通过IPIP驱动解包得到原始数据IP包
4然后通过路由规则发送给 veth pair 设备到达目标Pod容器Calico BGP模式工作原理
1源Pod容器发出的原始数据IP包会通过 veth pair 设备到达宿主机网络空间
2然后根据原始数据IP包的目标IP和宿主机的路由规则找到目标Node节点的IP再通过物理网卡发送到目标Node节点
3根据目标Node节点的路由规则直接通过目标Pod容器的 veth pair 设备发送到目标Pod容器1.3flannel 和 calico 区别
flannel UDP VXLAN Host-gw
默认网段10.244.0.0/16
通常使用VXLAN模式采用的是叠加网络、IP隧道方式传输数据对性能有一定的影响
功能简单配置方便利于管理但是不具备复杂的网络策略规则配置能力calico IPIP BGP 混合模式CrossSubnet
默认网段192.168.0.0/16
使用IPIP模式可以实现跨子网传输但是传输过程中需要封包和解包对性能有一定的影响
使用BPG模式把Node节点看作成路由器根据Felix、BIRD分发和维护的路由规则可直接实现BGP路由转发传输过程中不需要封包和解包因此性能较好但只能在同一个网段内使用无法跨子网传输
具有更丰富的网络策略配置管理能力、性能更好、功能更全面但是维护起来较为复杂所以对于较小规模且网络要求简单的K8S集群可以采用flannel。对于集群规模较大且要求更多的网络策略配置时可以采用性能更好、功能全全面的calico
1.4VLAN和VXLAN的区别
1.ID数
vlan可以有2的12次方个vlan,即4094个
vxlan可以2的24次方个vxlan
2.网络路径利用效率
vlan使用spanning tree protocol避免环路会将一半的网络路径阻塞
vxlan的数据包封装成UDP通过网络层传输可以使用所有的网络路径
3.Mac表
vlan需要在交换机的Mac表中记录Mac物理地址
vxlan采用隧道机制Mac物理地址不需记录在交换机2.CoreDNS
CoreDNS 是 K8S 的默认 DNS 实现
根据 service 资源名称 解析出 Cluster IP
根据 statefulset 控制器创建的 Pod 资源名称 解析出 Pod IP3.k8s证书更新
kubeadm 部署的K8S集群更新证书
1备份老证书和kubeconfig配置文件
mkdir /etc/kubernetes.bak
cp -r /etc/kubernetes/pki/ /etc/kubernetes.bak
cp /etc/kubernetes/*.conf /etc/kubernetes.bak2重新生成证书
kubeadm alpha certs renew all --configkubeadm.yaml3重新生成kubeconfig配置文件
kubeadm init phase kubeconfig all --config kubeadm.yaml4重启kubelet和其他K8S组件的Pod容器
systemctl restart kubeletmv /etc/kubernetes/manifests /tmp
mv /tmp/*.yaml /etc/kubernetes/manifests