k8s-基本概念
什么是k8s
管理云平台多容器化应用,与docker dockercompose的区别是docker dockercompose只管理单主机应用
中文文档:https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/security-context/
操作k8s客户端原理
kubectl 命令行工具
dashboard 可视化界面(官方和第三方)
拉制器包括:
节点拉制器(Node Controller):负责在节点出现故时
进行通知和响应
任务拉制器(Job Controller):监测代表一次性任务的Job
对象,然后仓建P0D来运行这些任务直至完成
端点分片拉制器(EndpointSlice controller):填充离点分
片(EndpointSlice)对象(以提供Service和Pod之间的链
接)。
服务账号控制器(ServiceAccount controller):为所的命
名空可创建默认的服务账号(ServiceAccount),
master可以管理多个node节点。节点下面有多个pod,pod下面至少有一个容器,容器化允许环境不仅仅是docker还可以是其他,只是docker目前用的多
服务分类无状态、有状态应用
涉及扩充应用是否需要copy环境数据
无状态: 不依赖本地环境储存,比如ngix,只做转发,
优点:扩容不做任何处理,方便快速扩容 缺点:不能做数据持久化相关操作,需要依赖三方存储服务
注:java应用也可以是无状态,比如本身自己不做任何持久化,相关存储操作都调用第三方服务
有状态:
会依赖本地环境存储,比如mysql redis....,扩容需要对本地环境数据进行迁移恢复
优点:可独立对数据进行持久化管理,缺点:进行水平扩容,需要负责的数据迁移、备份的动作
资源和对象
k8s所有的东西都抽象为资源,通过yml或者json描述
对象则为是通过资源实体化的对象,比如pod或node
对对象的增加删除修改都是通过rest full api来操作,一般通过命令行工具来调用
资源的分类
元数据类型
Horizontal Pod Autoscaler (HPA)
Pod自动进行扩容/缩容:可以根据CpU使用率或自定义指标(metrics)白动时Pod进行扩容/缩容 1.拉制管理器每隔30g(可以通过horizontal--pod-autoscaler-sync-period修改)查询metrics的资源使用情况 2.支持三种metrics类型 1)预定义metrics(比如Pod的cPU)以利用率的方式计算 2)自定义的Pod metrics.以原始值(raw value)的方式计算 3)自定义的object metrics 3.支持两种metricsi查间方式:Heapsteri和自定义的REST API(比如每天早上10点抢购活动需要扩容 11点后活动结束缩容) 4.支持多metrics
PodTemplate
描述pod的模版 扩容基于模版扩容
limitRange
比如初始内存 最大内存
可以对集即内Request和Limits的配置做一个全局的统一的限制,相当于批量设了某一个范正内某个命名空间)的Pod的强源使用限制,
集群级
Node
不像其他的资源(如Pod和Namespace),Node本质上不是Kubernetes来创建的,Kubernetes只是管理Node上的资源.虽然可以通过Manifest创建一个Node对象(如下json所示)
但Kubernetes也只是去检查是否真的是有这么一个Node.如果检直失败,也不会在往上调度Pod,
ClusterRole
集群的角色,用于对于集群的权限进行管理
ClusterRoleBinding
上面的角色只是声明,把角色跟哪个资源进行绑定,只能往集群级别的资源进行绑定
pod
什么是
是一个容器组,他基于pause容器对pod中容器的网络、文件系统共享
replicas(副本)
副本数量基于podtemplate创建的副本
控制器
控制pod
适用于无状态
ReplicatingController(RC)
基于replicas参数,基于prdTemplate 动态扩容缩容
ReplicaSet(RS)
ReplicatingController(RC)的替代品 可以通过selector来动态原则需要扩容缩容的pod
Depoyment
实际工作中不会用RC和RS,deployment对RS做了再一层封装,提供了更复杂的应用部署相关功能
如:
将获取dploment、rs、po信息
kubectl get po,rs,deploy --show-labels
1.自动创建RS和pod
2.滚动升级/回滚
RS1是老版本 RS2是新版本,
1.先创建RS2 创建app2 然后标记为可用,RS1的第一个pod标记为不可用,
2.再创建RS2的另外一个app2,然后标记可用,RS1的另外一个pod标记为不可用
3.注意,标记不可用标记后不会删除,可能需要回滚,按照上面相同流程
3.平滑扩容缩容
4.暂停恢复
因为改了deployment就会立刻自动升级,有时候我们需要频繁改yml但是不需要升级可以先暂停,当恢复后比较到文件不一样再自动升级
适用于有状态
statefulset
特点:持久化存储、稳定的网络标志、有序部署,有序扩展、有序缩容,有序删除
由headlise service和volumnClaimTemplate组成
headlise service 稳定网络标识、有序扩容缩容等
volumnClaimTemplate创建持久化卷的模版
守护进程
deamonset构建pod,基于selector,将所有匹配到的pod都部署上一个守护程序,系统监控
DaemonSet保证在每个Node上都运行一个容器本,常用来部署一些集群的日志、监控或者其他系统管程应用。典型的应用
包活:
日志收集,比如fluentd,logstash等
系统监控,比如Prometheus Node Exporter,collectd.
New Relic agent,Ganglia gmond
系统程序,比如kube-proy,kube-dn5,glusterd,ceph等
定时任务/job
job
一次性任务 用完消费
cronjob
key指定表达式
Service/Ingress
Volume
数据卷。共享Pod中容器使用的数据,用来放持久化的数据,比如数据库数据,
CSI
ConfigMap
key-value 可以加载到pod里面,给容器读取,修改后容器会自动更新。
secret
跟configMap功能差不多,多了一个加密的功能,保证我们数据的安全性
Secret有三种类型:
1.Service Account:用来访问Kubernetes API,由Kubemetes自动创建,并且会自动射挂载到Pod的run/secrets/kubernetes.io/serviceaccount目中
2.Opaque:base64编码格式的Secret,用来存储密码
3.kubernetes.io/dockerconfigison:用来存私有docker registry的认证信里.
Downward api
downwardAPi这个模式和其他模式不一样的地方在于它不是为了存放容器的数据也不是用来进行容器和宿主机的致据交换的。而是让Pod里的容器能够直接式取到这个P0d对象本身的一些信息
downwardAP提供了两种方式用于将pod的信息注入到客器内
1.环境变量:用于单个支量。可以将pod信息和容器信息直接注入容器内部
2.volume挂载:将pod信息生成为文件,直接挂载到容器内部中去