目录

1 k8s简介

2 kudernetes核心资源解读

3 如何创建一个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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐