kubernetes 的入门介绍
云原生OS,分布式操作系统:运行多台主机之上;
Pod:动态性:;编排运行应用的最小逻辑单元;
容器级:一个或多个具有“超亲密”关系的容器的集合;
共享:
名称空间:Network,UTS,IPC;
Volume:;
底层基础设施:Pause容器;
资源池:
1 计算资源:CPU,Memory
2 存储资源:Volume
3 网络资源:
a.Pod ---->Pod :东西向流量
b.集群外的进程(最终用户) --->Pod:南北向流量;
c.Service:
固定入口,
服务发现:label selector
负载均衡:ipvs 或iptables
Service名称:
svc_name.NAMESPACE.svc.domain.ltd
A,AAAA: fqdb ---> ip
PTR:IP ---> fqdn
SVC:port
ClusterDNS:CoreDNS
为Service自动维护的动态DNS
核心工作逻辑:
声明式API:终态声明,期望状态(Spectification,简称为spec)
控制器:Controller ,reconcilation loop,谐调循环;
实际状态:status
diff:status---> Spec(控制器控制转化)
应用编排控制器:
无状态应用:Deployment
PodTemplate:Pod模板
核心:
要运行容器的列表;
便签(label)
replicas:副本数,实例数
label selector:标签选择器
发布:内置的发布策略,pod一个版本到一个版本,以滚动的方式发布,滚动的力度,一个实例,还是多个(只需要拉取的镜像)
系统级应用:DaemonSet
有状态应用:StatefulSet(有特有的属性,不可以轻易所替代)
作业:
一次性作业:Job
周期性作业:CronJob
编排运行一个应用的核心过程:
1、应用编排控制器资源对象
2、提供固定的访问入口、及负载均衡
3、提供应用配置
Nginx Service ---> Nginx Pod(Controller) --> Volume (ConfidMap、Secret) ---> PHP-FPM(业务)Pod(Controller)---> Volume(ConfigMap、Secret) ---> MySQL Servcie ---> Mysql Pod (Controller)
管理应用的逻辑:
基于资源的API编写资源配置文件,定义该资源类型下的对象
提交给API Server(下面由k8s操作)
Kubernetes系统组件:
分布式:运行于多个主机
多个主机分两类:
Master:决策和控制中心
1、kube-apiserver:API 网关,无状态
2、etcd:状态存储(kv)
3、kube-controller-manager:控制器管理器
4、kube-scheduler:调度器,负责调度未完成绑定的Pod
调度:将Pod与某个Node建立了绑定关系
Worker:执行组件
1、kubelet:Pod生命周期管理;
a.CRI:对接外部的容器运行时,(cri-dockerd,docker-ce 、containerd、cri-o)
b.CNI:对接外部的虚拟(容器)网络;(flannel 、calico、cilium(eBPF))
① Underlay
② Overlay
c.CSI:对接外部的共享存储服务,nfs-csi-driver(NFS)、Ceph...
2、kube-proxy:Service功能在节点级的落地(实现),具体来说,就是把Service的定义转换为节点上的iptables或ipvs规则
Master高可用:
每个组件独立实现其自向的高可用机制
1、etcd:分布式高一致性kv存储,raft协议(也有选举)
奇数各节点:3,5,7
2、apiserver:无状态,2+
应该为其提供负载均衡
https协议,而且客户端与apiserver需要之际建立tls会话,LB通常要做tcp级的负负载均衡 四层;
3、controller-manager:选举出一个primary节点,余下的Secondary;
leader election(抢占式-独占)
4、scheduler;选举出一个Primary节点,余下的Secondary
部署方式:
1、etcd独立部署
etcd:3节点集群
master:2+节点集群
2、etcd与master的各组件部署在一起:堆叠式,3节点
每个节点都部分etcd,master组件
部署形式
单Master集群:
Master:
Worker:
CRI:cri-dockerd,docker-ce
CNI:flannel
#认证凭据
kubectl: $HOME/.kube/config
$集群的三个网络:
1、节点网络:管理员
节点来源:
自主服务器:自管理网络
IaaS云:托管
2、Service网络:Kubernetes
10.96.0.0/12
可用Service IP:2^20-2
3、Pod网络:CNi网络插件
不同的网络插件有不同的默认配置
Calico:192.168.0.0/16
再次划分为多子网,每个节点使用一个子网,默认使用26位掩码
子网数量:2^10
每个子网内的IP量:2^6-2
Flannel:10.244.0.0/16
再次划分多子网,每个节点使用一个子网,默认使用24位掩码
Bootstrap:发生集群初始化
首次认证:Bootstrap token
随后认证:都基于由Kubernetes CA签发的证书
鉴权:主体,是基于客户端证书的Subject(CN,O,City,Sate,C)
kubectl:需要提供认证凭据
$HOME/.kube/config $
kubeconfig
API Server为kubelet签发的证书的有效期只有一年;
注意:在证书到期之前进行续签;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App