以下内容来自: kubernetes权威指南:从docker到kubernetes实践纪念版 第1章 Kubernetes入门 含义:基于容器技术的分布式架构方案 Service:分布式集群架构核心 特点:唯一名字,虚机ip和端口号,远程服务,被映射到了 提供这种服务能力的一组容器应用上 含义:service由多哥相关服务近好层提igong服务 隔离:服务需要隔离,设计pod对象,将每个服务进程包装到相应Pod中,称为Pod中运行的容器 service与pod关系:pod贴上标签,给service定义标签选择器 实际上就是通过标签来建立连接 Pod: 特点:每个Pod运行着Pause的容器哦,其他容器则称为业务容器 业务容器共享Pause容器的网络栈和Volume挂载卷 Kubernetes集群 组成:Master姐和一群工作节点 Matser节点:kube-apiserver,实现整个集群的资源管理和pod调度 最小运行单元:Pod 解决的问题: 1 扩容:资源分配,哪个节点上扩容,部署,启动。 变成修改RC中副本数目即可 2 升级:为扩容Service关联的Pod创建RC副本控制器 RC(Replication Controller) 组成:Pod定义,运行副本数,标签 Kubernetes 作用: 1本身实现了分布式系统 2微服务架构 创建pod kubectl create -f xxx.yaml 查看service kubectl get svc CLUSTER-IP(虚IP)和PORT拼接即可让其他pod访问该Service 根据service唯一名字,容器可以从环境变量中获取Service对应的Cluster UP地址和端口 [root@node-1 qaadmin]# kubectl get svc -n openstack|grep ceilometer ceilometer ExternalName <none> ingress.kube-system.svc.cluster.local 80/TCP 7d ceilometer-api ClusterIP 10.233.10.160 <none> 8777/TCP 7d 例子讲解: spec: type: NodePort ports: - port: 8777 nodePort: 38777 selector: app: myweb type=NodePort和nodePort=38777 表示Service开启了端口转换的外网访问模式 用户访问38777端口即可映射和跳转到真正的服务端口8777上 Kubernetest中Node,Pod等是资源对象 etcd库:可持久化存储资源对象 Master:集群控制节点,所有控制命令发给它 Master运行: Kubernetes API Server:HTTP服务 Kubernetes Controller Manager:资源对象的自动化控制种新 Kubernetes Scheduler:资源调度(Pod调度) etcd:存储资源对象数据 Node: 含义:工作负载节点 运行: kubelet:Pod对应容器创建,停止 kube-proxy: service通信与负载均衡 Docker Engine(docker): 负责本机的容器创建和管理 注册机制:Node可以增加到Kubernetes集群, 某个Node超过指定时间不上报信息,就会认为失去联系,即Not Ready 随后Master会触发工作负载打转移 Pause容器: 引入原因: 解决描述容器组状态的问题 多个业务供其共享Pause容器的IP Pod类型: 普通Pod:被创建后放入etcd中存储,调度到具体Node上运行 静态Pod:不存放在etcd中,存放在某个具体Node的文件中,只在该Node运行 Node,Pod,容器的关系: Node包含多个Pod,一个Pod可以包含1个或多个容器 资源对象: 可以采用yaml或json描述 Pod的名字标签等在元数据metadata中 Pod的定义都在spec中即(specification指定) endpoint: 实际上就是ip加端口组成的访问地址 Event:事件记录,事件时间,次数,导致事件的原因 kubectl describe pod xx来定位问题 资源配额: Requests:资源最小申请量 Limits:资源最大允许使用量 1.4.4 Label(标签) Label: 含义: key=value的键值对 特点:一个资源对象可定义任意数量的Label 表达式:等式和即和 name=openstack-compute:匹配具有标签的资源对象 env != production:匹配不具有标签env=production的资源对象 name in (openstack-compute, openstack-controller) name not in(openstack-compute) 多个表达式用','分隔,是AND关系 关于pod和标签选择的实现 pod中定义 labels: app: myweb ReplicationController中 selector: app: myweb matchLabels:定义一组Label matchExpressions:定义一组基于即和的筛选日奥建 不仅仅可以针对name进行标签选择,也可以对其他部分进行标签选择 1.4.5 Replicatin Controller 含义:定义期望场景,声明pod副本数量维持的值 组成: 1 Pod副本数 2 Pod的标签选择器 3 Pod副本数量<期望,就创建Pod的Pod模板 滚动升级:每次旧版本停止一个,然后创建一个新版本的Pod RC(Replica Set)的作用: 1 副本控制 2 Pod定义模板 3 标签选择器 4 滚动升级 1.4.6 Deployment 作用:解决Pod编排问题,使用Replica Set实现,可认为是RC的 升级 与RC的区别:可以知道Pod部署进度 kubectl get deployments -n openstack [root@node-1 qaadmin]# kubectl get deployments -n openstack NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE aodh-api 3 3 3 3 33d aodh-evaluator 1 1 1 1 33d Desired:Pod副本数的期望值 CURRENT:Pod副本数的实际值 UP-TO-DATE:滚动升级中最新版本Pod副本数量 AVAILABLE:当前可用副本数量 kubectl get rs -n openstack NAME DESIRED CURRENT READY AGE aodh-api-6f89d6f967 3 3 3 33d aodh-evaluator-6d5d4b8674 1 1 1 33d 1.4.7 Horizontal Pod Autoscaler pod横向自动扩容 kubectl scale:实现Pod扩容或缩容 原理:分析RC的pod的负载来调整pod的副本数 pod负载的指标: CPU使用率百分比 应用程序自定义读量指标(例如每秒请求数) CPU使用率:目标Pod所有副本自身CPU利用率的平均值 利用率=pod的CPU使用量/pod的Request的值 CPU使用量:通常是1分钟平均值,通过查询 Heapster得到 如果Pod没有定义Pod的Request值,则无法使用横向自动扩容能力 1.4.8 StatefulSet 含义:面向有状态服务 特点: 1 pod有唯一网络表示 2 例如StatefuleSet名字叫kafka,第一个Pod叫做kafka-0,kafka-1 3 Pod副本启停顺序受控 4 Pod采用持久化存储卷,通过PV/PVC实现 Headless Service与普通Service的区别: 没有Cluster IP 为StatefulSet控制的每个Pod示例创建了DNS域名 $(podname).$(headless service name) 1.4.9 Service(服务) 服务就是之前提到的微服务,Pod,RC都是为了这个服务工作的 例子: 前端pod->service->label selector->pod, pod, pod 通信:服务自建通过TCP/IP通信 Kubernetes的三种IP Node IP: Node节点的IP地址 Pod IP: Pod的IP地址 Cluster IP:service的 ip地址 1.4.10 Volume(存储卷) 含义:被多个容器访问的共享目录 步骤:先声明volume,然后挂载到容器的指定目录下 种类: 1 emptyDir: Pod分配到Node创建的,初始内容为空 特性:Pod从Node上移除时,数据会被删除 使用: 1 临时空间 2 一个容器需要从另一个容器中获取数据 2 hostPath 含义:在Pod上挂载宿主机文件 适用: 1 需要访问宿主机的目录 1.4.11 Persistent Volume PV: 含义:网络存储中的一块存储 特点: 1. PV只能是网络存储,不属于任何Node,可在每个Node上访问 2. PV并不是定义在Pod上的 Pod想申请某种pv,需要定义一个PersistentVolumeClaim(PVC) 1.4.12 Namespace(命名空间) 作用:多租户的资源隔离,将集群的资源对象分配到不同Namespace中 逻辑分组,方便管理 默认:default kubectl get namespaces [root@node-1 qaadmin]# kubectl get namespace NAME STATUS AGE ceph Active 34d chartmuseum Active 24d default Active 34d kube-public Active 34d kube-system Active 34d openstack Active 34d openstackd Active 27d 不特别指定Namespace,则都会进入到default的Namespace中 kubectl get pods将查看default的资源对象 1.4.13 Annotation(注解) 含义:适用key/value键值对形式定义,不同Label具有彦哥命名规则 用于LabelSelector,附加信息,标记资源对象特殊信息。 适用:release信息,联系信息
读书笔记---kubernetes权威指南:从docker到kubernetes实践 第1章: Kubernetes入门
最新推荐文章于 2024-08-06 10:43:51 发布