k8s相关理论
1 k8s简介1.1 Kubernets架构k8s的物理架构是master/node模式:K8S集群至少需要一个主节点(Master)和多个工作节点(Worker),Master节点是集群的控制节点,负责整个集群的管理和控制,主要用于暴露API、调度部署和对节点进行管理。工作节点主要是运行容器的。kubelet 负责启动容器或podkube-proxy负载均衡pod是最小调度单元pod封装一个或多
目录
1 k8s简介
1.1 Kubernets架构
k8s的物理架构是master/node模式:
K8S集群至少需要一个主节点(Master)和多个工作节点(Worker),Master节点是集群的控制节点,负责整个集群的管理和控制,主要用于暴露API、调度部署和对节点进行管理。工作节点主要是运行容器的。
kubelet 负责启动容器或pod
kube-proxy负载均衡
pod是最小调度单元
pod封装一个或多个容器
1.2 Kubernetes组件
Master node:主节点
kubectl :管理资源,对资源进行增删改查,一般安装在master node ,非常重要的命令,操作资源
apiserver:提供了k8s资源操作的唯一入口,所有操作都要和apiserver交互,将操作资源的结果成功或失败信息放入到etcd数据库中
scheduler:调度器,通过与apiserver交互,将pod调度到最优的节点
controller-manager:集群内部管理中心
Etcd:存储了key:value数据信息,网络资源的信息
calico:网络插件,跨主机跨节点通信。
work node:工作节点
kubelet:报告自身信息到apiserver,apiserver会把信息更新到etcd,启动pod,删除pod等
kube-proxy:提供网络代理,负载均衡
coredns:提供dns服务
2 kudernetes核心资源解读
2.1 pod
Pod是Kubernetes中的最小调度单元,k8s是通过定义一个Pod的资源,然后在Pod里面运行容器,容器需要指定镜像,用来运行具体的服务。Pod代表集群上正在运行的一个进程,一个Pod封装一个容器(也可以封装多个容器),Pod里的容器共享存储、网络等。也就是说,应该把整个pod看作虚拟机,然后每个容器相当于运行在虚拟机的进程。
2.2 Deployment
Replicaset是Kubernetes中的副本控制器,管理Pod,使pod副本的数量始终维持在预设的个数。Deployment是管理Replicaset和Pod的副本控制器,Deployment可以管理多个Replicaset,是比Replicaset更高级的控制器,也即是说在创建Deployment的时候,会自动创建Replicaset,由Replicaset再创建Pod,Deployment能对Pod扩容、缩容、滚动更新和回滚、维持Pod数量。
2.3 label
label是标签的意思,k8s中的资源对象大都可以打上标签,如Node、Pod、Service 等,一个资源可以绑定任意多个label,k8s 通过 Label 可实现多维度的资源分组管理,后续可通过 Label Selector 查询和筛选拥有某些 Label 的资源对象,例如创建一个 Pod,给定一个 Label是app=tomcat,那么service可以通过label selector选择拥有app=tomcat的pod,和其相关联,也可通过 app=tomcat 删除拥有该标签的 Pod 资源。
2.4 service
在kubernetes中,Pod是有生命周期的,如果Pod重启IP很有可能会发生变化。如果我们的服务都是将Pod的IP地址写死,Pod的挂掉或者重启,和刚才重启的pod相关联的其他服务将会找不到它所关联的Pod,为了解决这个问题,在kubernetes中定义了service资源对象,Service 定义了一个服务访问的入口,客户端通过这个入口即可访问服务背后的应用集群实例,service是一组Pod的逻辑集合,这一组 Pod 能够被 Service 访问到,通常是通过 Label Selector实现的。
3 如何创建一个pod资源
3.1 创建pod流程:
master节点:kubectl ->kube-api->kubelet->CRI容器环境初始化:
第一步:客户端提交创建pod的请求,可以通过调用API Server的Rest API接口,也可以通过kubectl命令工具,如kubectl apply -f filename.yaml(资源清单文件)
第二步:apiserver接收到pod创建请求后,会将yaml中的属性信息(metadata)写入etcd
第三步:apiserver触发watch机制准备创建pod,信息转发给调度器scheduler,调度器使用调度算法选择node,调度器将node信息给apiserver,apiserver将绑定的node信息写入etcd
调度器用一组规则过滤掉不符合要求的主机,比如pod指定了所需要的资源量,那么可用的资源比pod需要的资源量少的主机会被过滤掉。
第四步:aposerver又通过watch机制调用kubelet,指定pod信息,调用docker api创建并启动pod内的容器。
第五步:创建完成之后反馈kubelet,kubelet又将pod的状态信息给apiserver,apiserver又将pod的状态信息写入etcd
3.2资源清单yaml文件书写技巧:
vim pod-tomcat.yaml
apiVersion: v1 #api版本号
kind: Pod #创建的资源
metadata:
name: tomcat-test #pod的名字
namespace: default #pod所在的名称空间
labels:
app: tomcat #pod具有的标签
spec:
containers:
- name: tomcat-java #pod容器的名字
ports:
- containerPort:8080 #容器暴露的端口
image:tomcat:8.5-jre8-alpine #容器使用的镜像
imagePullPolicy:ifNotPresent #镜像拉取策略
3.3更新资源清单:
kubectl apply -f pod-tomcat.yaml
更多推荐
所有评论(0)