Kubernetes笔记资料

本文详细介绍了Kubernetes(K8S)的关键概念和组件,包括Helm命令、K8S逻辑架构、主控与工作节点、网络插件、Kubectl命令、Pod探针类型及其配置。此外,还讨论了存储卷、QoS、K8S的删除策略、PodPreset、网络模型、CronJob、Taints和Tolerations、初始化容器、Affinity策略以及RBAC。
摘要由CSDN通过智能技术生成

​​​​​​地址​​​​​​​

官网:Kubernetes 

命令地址: Kubernetes(K8S)中文文档_Kubernetes中文社区

学习博客:https://blog.stanley.wang
K8s(githup下载地址): https://dl.k8s.io/v1.20.15/kubernetes-server-linux-amd64.tar.gz                  点击 Server Binaries 的第一个包

etcd下载地址:https://github.com/etcd-io/etcd/releases/download/v3.4.13/etcd-v3.4.13-linux-amd64.tar.gz 

dockerhub(镜像)下载地址: https://hub.docker.com

 Helm官方地址:  Helm  

Ingress官方地址: Installation Guide - NGINX Ingress Controller 

Volume(存储卷)官方文档地址:Volume | Kubernetes 

K8S的插件配置资源清单:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons

容器监控(Prometheus)githup:https://github.com/prometheus-operator/kube-prometheus 

helm命令

##官方文档:https://helm.sh 

################helm的目录结构
cd helm-test 
tree
.
├── charts                                      #存放依赖文件
├── Chart.yaml                                  #Charts的描述(版本)信息
├── templates                                   #存放用到的模板文件
│   ├── deployment.yaml
│   ├── _helpers.tpl                            #自定义模板或函数
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt                               #Chart的信息
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml                                  #全局配置文件(设置的一些参数等)

##################常用命令
helm version           #查看版本信息
helm list              #查看安装的应用程序列表
helm repo add bitnami https://charts.bitnami.com/bitnami   #添加官方数据源
helm repo add aliyun  https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts  #添加阿里云数据源
helm repo list                          #查看数据源列表
helm search repo harbor                 #查看应用的安装信息
helm pull bitnami/harbor                #拉取应用安装包
helm create helm-test                   #创建一个chart(图表)模板
helm install test --dry-run .           #检查模板文件格式,不会创建k8s资源
helm install test --set fullnameOverrid=aaa --dry-run .   #修改values.yaml里面的值 
helm install helm-test --namespace public-service .        #创建操作
helm uninstall helm-test -n public-service    #删除操作
helm upgrade helm-test -n public-service      #更新操作
helm list -n public-service                   #查看helm创建的列表

逻辑架构图

概念介绍

Pod:Pod是K8S里能够运行的最小原子单元,由一组、一个或多个容器组成,每个Pod还包含了一个Pause容器, Pause容器:是Pod的父容器,主要负责僵尸进程的回收管理,通过Pause容器可以使同一个Pod里面的多个容器共享UTS、NET、IPC名称空间,一个Pod运行多个容器,称为边车(SideCar)模式; 状态:Pending:Pod已创建,在Pod内还有容器的镜像没创建,包括正在下载镜像的过程;Runnmg :Pod内的容器都已创建,至少有一个容器处于运行、启动、正在重启状态;Succeeded :Pod 内所有容器均成功执行后退出, 且不会再重启;Failed :Pod 内所有容器均已退出,但至少有 一 个容器为退出失败状态; Unknown :由千某种原因无法获取该 Pod 的状态,可能由于网络通信不畅导致 ;
Pod探针
  • LivenessProbe(存活探针):用于判断容器是否存活 ( Running 状态 ),如果 Liveness Probe 探针探测到容器不健康 ,则 kubelet 将“杀掉"该容器,并根据容器的重启策略做相 应的 处理 。 如果一个容器不包含 LivenessProbe 探针,那么 kubelet 认为该容器的 LivenessProbe 探针返回的值永远是 Success;
  • ReadinessProbe(就绪探针):该探针定期触发执行,存在Pod的整个生命周期中,用于判断容器服务是否可用 ( Ready 状态 ),达到 Ready 状 态的 Pod 才可以接收请求;
  • StartupProbe(启动探针):该探针是V1.16版本新增的,用于判断容器内应用程序是否已启动

Pod探针检查方式

  • ExecAction(执行动作): 在容器内部运行一个命令,如果该命令的返回码为 0, 则表明容器健康;
  • TCPSocketAction: 通过容器的IP地址和端口号执行 TCP 检查,如果能够建立 TCP 连接,则表明容器健康 ;
  • HTTPGetAction: 通过容器的 IP 地址、端口号及路径调用 HTTP Get 方法,如果响应的状态码大于等于 200且小于400, 则认为容器健康;  该方式使用最多

​​​​​​​​​​​​​​Pod探针检查配置

  • initialDelaySeconds: 5  初始化时间(秒),不建议设置太长时间
  • periodSeconds: 60       检测间隔。默认是 10 秒。最小值是 1
  • timeoutSeconds: 3       超时时间,默认1秒
  • successThreshold: 1     检测到有1次成功则认为服务是`就绪`
  • failureThreshold: 5       检测到有5次失败则认为服务是`未就绪`。默认值是 3,最小值是 1
Pod控制器:是Pod启动的一种模板,用来保证在K8S里启动的Pod符合预期运行,常见的控制器有:Deployment(管理部署,无状态建模)、DaemonSet、ReplicaSet(副本集)、StatefulSet(管理状态,有状态的建模)、Job(管理任务,批处理建模)、Cronjob(管理周期计划任务);
Name:是K8S内部中『资源』的一种逻辑概念(功能),name通常定义在元数据里,资源有五种维度:api版本(apiVersoin)、类别(kind)、元数据(metadata)、定义清单(spec)、状态(status);
Namespace(名称空间):用来隔离不同的用户,可以用来将系统内部的对象划分为不同的项目组或用户组。常见的 pod, service, replication controller(副本控制器) 和 deployment 等都是属于某一个 namespace 的(默认是 default),也就是具备隔离性;而 node, persistent volume(PV)/PVC,StoragrageClass,RBAC,IngressClass,namespace 等资源则不属于任何 namespace,也就是不具备隔离性;
Label(标签):一个标签对应多个资源,多个资源也可以对应一个标签,是多对多关系,标签格式:key=value,注解(annotations);
Service(服务):该服务为Pod提供统一入口,Service通过标签选择器选择后端,配合Replication Controller(副本控制器) 或者 Deployment 来保证后端容器的正常运行,匹配标签的 Pod IP 和端口列表组成 endpoints(连接端点),由 kube-proxy 负责将服务 IP 负载均衡到这些 endpoints 上;
Ingress:为进入集群的请求提供**路由规则**的集合,对外暴露的接口,只能以HTTP和HTTPS提供服务,在V1.19版本以后稳定;
K8S在V1.6版本以后默认使用基于角色的访问控制(RBAC);  
  1. 流程图

HPA (Horizontal Pod Autoscaling是自动控制Pod数量的增加和减少):可以根据 CPU 使用率或应用自定义 metrics 自动扩展 Pod 数量;
ConfigMap:是分布式系统中的**『配置中心』**,将启动参数保存到ConfigMap中,文件名作为key,value是整个文件的内容;
CronJob:定时执行计划任务;
 DaemonSet:保证在每个 Node 上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用;比如:日志收集:fluentd,logstash 等;系统监控: Prometheus Node Exporter,collectd,New Relic agent,Ganglia gmond 等;系统程序: kube-proxy, kube-dns, glusterd, ceph 等;
Deployment:该控制器是用于部署无状态的服务,为了解决服务编排的问题,支持replicaset的所有功能; 可以管理多个副本的Pod,实现无缝迁移、自动扩容、自动缩容、自动灾难恢复、一键回滚等功能;
StatefulSet(状态集):是为了解决有状态服务的问题,在V1.9版本以后使用;
Job:负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束;
Local Volume(本地数据卷):是一个本地存储设备,比如磁盘、分区或者目录等。不支持自动创建;
Node:是Pod的运行主机,为了管理Pod,每个Node节点上至少要运行Container runtime(容器运行时),K8S只是通过Node Controller检查Node节点是否存在,通过Taints(污点) 和 tolerations(容忍)决定该Node节点是否调度Pod;
Volume(存储卷):将数据持久化存储,Volume(存储卷)的生命周期与Pod绑定,挂载为容器内的目录和文件,有ConfigMap :主要保存应用程序所需的配置文件;Secret :私密;Downward API :可以将 Pod 或 Container 的某些元数据信息(例如 Pod 名称、 Node IP 、 Label 、 Annotation 、容器资源限制等)以文件的形式 挂载到容器内;
PV(Persistent Volume ):持久卷,存储资源;PV生命周期,资源供应分为静态模式 (Static ) 和动态模式 (Dynamic) ,资源供应的结果就是将适合的PV和PVC成功绑定;资源绑定,系统将根据PVC对存储资源的请求(存储空间和访问模式)在已存在的 PV 中选择一个满足 PVC 要求的 PV ,一旦找到,就将该 PV 与用户定义的 PVC 绑定,用户的应用就可以使用这个 PVC 了;资源使用,需要在 Volume 的定义中引用 PVC 类型的存储卷,将 PVC 挂载到容器内的某个路径下进行使用 ;资源回收(Reclaiming) ,回收策略有Retain (保留数据)、 Delete (删除数据)、Recycle (弃用);​​​​​​​  
  1. PV生命周期流程图         

 PVC(Persistent Volume Claim) :主要是涉及存储空间请求、访问模式、PV选择条件和存储类别等信息的设置 ;
PodDisruptionBudget (PDB):用来保证一组 Pod 同时运行的数量,这些 Pod 需要使用 Deployment、ReplicationController(副本控制器)、ReplicaSet 或者 StatefulSet 管理;
PodPreset:用来给指定标签的 Pod 注入额外的信息,如环境变量、存储卷等;
RS(ReplicaSet 副本集):支持集合式的selector,建议通过Deployment 来自动管理 ReplicaSet,支持版本记录、回滚、暂停升级等高级特性, **很少使用**
RC (Replication Controller 副本控制器):分为两类,Controller Manager 中的和资源对象中的,RC是资源对象中的简称, **很少使用**
Resource Quotas(资源配额):用来限制用户资源用量的一种机制,资源配额应用在Namespace上,只能有一个Resource Quotas(资源配额)对象,用户超额后禁止创建新的资源;
Pod Security Policies(PSP):是集群级的 Pod 安全策略,自动为集群内的 Pod 和 Volume 设置 Security Context(安全上下文);
Security Context :是限制不可信容器的行为,保护系统和其他容器不受其影响;
Secret(私密):解决了密码、token、密钥等敏感数据的配置问题,Secret中的数据要求以BASE6 4 编码格式存放 ;
Service account(服务账号):通过Secret保存用户身份凭证,凭证信息有CA根证书数据(ca.crt)和签名后的Token信息,当客户端通过API Server访问时,API会自动读取这些身份信息,并将其附加到HTTPS请求中传递给API Server以完成身份认证逻辑;
Event(事件):是一个事件的记录,记录事件的最早产生时间、最后重现时间、重复次数、发起者、类型以及导致此事件的众多信息;
Pod Readiness Gates: 给予了 Pod 之外的组件控制某个 Po d 就绪的能力,通过 Pod Readiness Gates 机制, 用户可以设置自定义的 Pod 可用性探测方式来告诉 Kubemetes 某个 Pod 是否可用,具体使 用方式是用户提供一个外部的控制器 (Controller ) 来设置相应 Pod 的可用性状态 ;**在1.14版本之后**
用户自定义API:用于将扩展 API 的访问请求转发到用户提供的 API Server 上,由它完成对 API请求的处理;API的元素主要由5部分组成:apiVersion 、 kind 、metadata 、spec 、status ;Fabric8 工具包:是访问K8S API客户端的一个工具;
CRD控制器:用于定义用户自定义的资源对象 ,基于客户端库 client-go 实现 Informer 、 ResourceEventHandler 、 Workqueue 等组件具体的功能处理逻辑;

QoS(Quality Of Service)服务质量等级:在K8S中,每个POD都有个QoS标记,通过这个Qos标记来对POD进行服务质量管理,它确定Pod的调度和驱逐优先级。服务质量体现在两个指标上,一个指标是CPU,另一个指标是内存 ;

  • 等级类型(从高到低):Guaranteed:需要CPU、内存的Request和Limit的值一样;Burstable:CPU、内存的Request有配置,但值不一样;BestEffort:没有配置Request和Limit;
  • K8S的删除策略:先删除服务质量为BestEffort,然后在删除Burstable,最后删除Guaranteed;

PodPreset: 用来给指定标签的Pod注入额外的信息,如环境变量、存储卷、配置容器时间、字符集等;

​​​​​​​​​​​​​​​​​​​​​​​​​​​​ K8S核心组件

etcd服务(配置存储中心):是键值数据库,主要是存储元数据(集群信息);

主控(master)节点 

        1)apiserver服务(集群的控制中枢):是资源配额控制的入口,提供认证、授权、访问控制、API注册和        发现机制,负责模块之间的的数据交互,承担通信枢纽功能;
        2)controller-manager服务(集群的状态管理器):负责维护集群的状态,通过apiserver实现,比如故障检测、自动扩展、滚蛋更新等,由一些列的控制器组成,控制器有:Deployment Controller(Pod控制器)、Volume Controller(存储卷控制器)、Garbage Controller(垃圾回收控制器)、Job Controller(任务控制器);Node Controller(节点控制器):通过API Server实时获取Node的相关信息,实现管理和监控集群中各个Node的相关控制功能;Resource quta Controller(资源配额控制器):通过Admission Control (准入控制 )来控制的,用LimitRanger 对 :容器级别,CPU和Memory进行限制;和Pod级别,对Pod内所有容器的资源进行限制;用ResourceQuota对Namespace(多租户)级别,包括Pod数量、Replication Contro ller 数量 、 Service 数量、 ResourceQuota 数量、 Secret 数量和可持有的 PV 数量 ;Namespace Controller(名称空间控制器):定时通过 API Server 读取 Names pace的信息经过一系列的判断 并将其保存在 etcd 中;Service Controller(服务控制器)和Endpoint Controller(接入点控制器):Endpoints(接入点集)是Service对应的所有Pod副本的访问地址,Endpoint Controller(接入点控制器)负责监听Servcie和对应的Pod副本的变化;Serv ice Controller 是K8S集群与外部的云平台之间的一个接口控制器;  

        Node Controller(节点控制器)核心工作流程图

                
  1. Resource quta Controller(资源配额控制器)流程架构图

        3)scheduler服务(集群的调度中心):负责接收调度通过预算策略(predict)和优选策略(priorities)将Pod调度到适合的运算节点上,最后存到etcd中,在V1.5版本之后使用Framework调度机制;

工作节点 (node)

        1)keublet服务:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;定时将Pod的状态上报给apiserver;以及镜像和容器的清理;
        2)kube-proxy服务:负责为 Service 提供 cluster 内部的服务发现和负载均衡;是K8S在每个节点上运行网络的代理,建立pod网络和集群网络的关系(clusterip->podip);调度用Ipvs(IP Virtual Server )模式;负责建立和删除包括调度更新;  

        ipvs:监听Master节点增加删除service以及endpoint的消息,调用Netetlink接口创建相应的ipvs规则,通过ipvs规则,将流量转发到相应的pod上;

        iptables:监听Master节点增加删除service以及endpoint的消息,对于每一个service,它都会设置一个iptables规则,将service的cluststerIP代理到后端对应的Pod;​​​​​​​

  1. 网络模型

                        

网络插件 

        1)CNI网络插件:主要是实现pod资源能跨宿主机进行通信,通过Plugin(插件)在创建容器时分配网络资源,在容器销毁时删除资源;插件有: Flannel、Calico、Canal、Contiv、OpenContrail、NSX-T、Kube-router
        2)服务发现插件:就是服务(应用)之间相互定位的过程,其实就是将服务名(Service Name)与集群网络IP(Cluster IP)绑定;​​​​​​​插件有: Calico:是一个符合CNI标准的插件,给每个Pod生成一个唯一的IP地址,并且把每个节点当做一个路由;
        3)服务暴露插件:Ingress资源是用于暴露7层应用到K8S集群外的一种核心资源(http/https),Ingress控制器能够为Ingress资源监听套接字,然后根据Ingress规则配置机制路由调度流量的一个组件;  插件有:Traefik

CoreDNS:用于K8s集群内部Service的解析,可以让pod把Service名称解析成IP地址,然后通过Service的IP地址连接到对应的应用上; 

Metrics-server:用来采集集群数据指标; 

GUI管理插件:Dashboard
CLI客户端:kubectl​​​​​​​

Kubectl命令

Kubernetes指南-倪朋飞.pptx 1-唐继元Kubernetes Master High Availability 高级实践.pdf 2、刘淼-基于 DevOps、微服务及k8s的高可用架构探索与实现.pdf ArchSummit北京2016-《网易蜂巢基于万节点Kubernets支撑大规模云应用实践》-刘超.pdf Azure Service Broker_cn - Rita Zhang.pdf google/ HPE李志霄 Kubernetes企业级容器云:加速数字创新-20170407.pdf IBM马达:Kubernetes 中基于策略的资源分配.pdf k8s资料.rar Kubernetes Cookbook-Packt Publishing(2016).pdf Kubernetes Microservices with Docker-Apress2016.pdf Kubernetes on Azure - Gabe Monroy.pdf Kubernetes1.6集群部署完全指南——二进制文件部署开启TLS基于CentOS7.pdf Kubernetes1-4版本新增加功能介绍.pdf Kubernetes监控与日志.pdf kubernetes容器云平台实践-李志伟v1.0.pdf Kubernetes生态系统现状报告.pdf Kubernetes下API网关的微服务实践 长虹集团-李玮演讲PPT.pdf Kubernetes与EcOS的碰撞结合 成都精灵云-张行才演讲PPT.pdf Kubernetes与OpenStack融合支撑企业级微服务架构.pdf Kubernetes在华为全球IT系统中的实践.pdf Kubernetes在企业中的场景运用及管理实践.pdf Kubernetes指南-倪朋飞.pdf Kubernetes指南-倪朋飞.pptx l.txt Lessons+learned+and+challenges+faced+while+running+Kubernetes+at+scale.pdf rkt与Kubernetes的深度融合.pdf rkt与Kubernetes的深度融合.pptx SACC2017FabricOnKubernetesChinese.pdf ThoughtWorks林帆-白话Kubernetes网络.pdf 百度云PaddlePaddle on kubernetes-周倜.pdf 从Borg到Kubernetes-PaaS产品设计-华为-钟成.pdf 改造Kuberntetes打造SAE容器云.pdf 跟谁学-基于容器的持续集成平台建设.pdf 谷歌深度学习Kubernetes上的实践.pptx 惠普基于Kubernetes的容器私有云平台实践.pdf 基于Kubernetes的模板化应用编排.pdf 基于kubernetes的容器云平台设计与实践-邓德源.pdf 基于Kubernetes的私有容器云建设实践-易宝支付.pdf 基于Kubernetes构建AI业务生态.pdf 李波:小米生态云应用引擎实践.pdf 魅族容器云平台基于 k8s 的自动化运维实践-曾彬.pdf 欧昌华-基于 Nginx 的负载均衡器在 K8S 中的实践.pdf 彭超:瓜子云的落地.pdf 如何落地TensorFlow on Kubernetes.pdf 如何用OpenStack和Kubernetes快速搭建一个容器和虚拟机组合服务的云平台.pptx 孙杰:大型企业云平台架构演进的实践之路.pdf 微服务道与术-敖小剑.pdf 微软Azure云助力微服务-赵文婧.pdf 颜卫-腾讯云容器服务基于kubernetes的应用编排实践-final-v1.0.pptx 有容云邓绍军-Kubernetes落地实践.pptx 折800如何用Docker&Kubernetes;构建自动化测环境.pdf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值