学习目标:
了解K8S的概念
学习内容:
- 查看K8S版本
备注:输出的信息会显示client和server的版本信息,client代表kubectl版本信息,server代表的是master节点的k8s版本信息
[root@paas-core01 paas]# kubectl version
Client Version: version.Info{Major:"1", Minor:"19+", GitVersion:"v1.19.4-GDEKernel23.1.RC1B030", GitCommit:"4ff0491de737c7992ec6988057c0c6f267d15448", GitTreeState:"clean", BuildDate:"2022-07-27T02:36:20Z", GoVersion:"go1.17.8", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"19+", GitVersion:"v1.19.4-GDEKernel23.1.RC1B030", GitCommit:"4ff0491de737c7992ec6988057c0c6f267d15448", GitTreeState:"clean", BuildDate:"2022-07-27T02:36:20Z", GoVersion:"go1.17.8", Compiler:"gc", Platform:"linux/amd64"}
-
K8S架构
-
基础概念
APISERVER:所有服务访问的统一入口
CrontrollerManager:维持副本期望的数目
Scheduler:负责介绍任务,选择合适的节点进行分配任务
ETCD:将它定位为一个可信赖的分布式键值存储服务,它能够成为整个分布式集群存储一些关键数据,协助分布式集群的正常运转,存储K8S集群的所有重要信息(持久化)
Kubelet:直接跟容器引擎交互实现容器的生命周期管理
Kube proxy:负责写入规则至iptables、ipvs实现服务映射访问的
Coredns:可以为集群中的SVC创建一个域名IP的对应关系解析
Dashboard:给K8S集群提供一个B/S结构的访问体系
Ingress controller:官方只能实现四层代理,ingress可以实现七层代理
Fededation:提供一个可以跨集群中心多K8S统一管理功能
PROMETHUS:提供一个K8S集群的监控能力
ELK:提供k8s集群日志统一分析接入平台 -
RC/RS/Deployment
RC:用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod来代替;而如果异常多出来的容器也会自动回收。
备注:在新版本的kubernetes中建议使用RS来取代RC
RS:RS跟RC没有本质上的不同,只是名字不一样,并且RS支持集合式的selector
虽然RS可以独立使用,但一般还是建议使用Deployment来自动管理RS,这样就无需担心跟其他机制的不兼容问题(比如RS不支持rolling-update,但Deployment支持)如图:
-
HPA(Horizontal Pod Autoscaling)水平Pod弹性伸缩
HPA仅适用于Deployment和RS,在V1版本中仅支持根据pod的CPU利用率进行扩容,在v1alpha版本中,支持根据内存和用户自定义的metric扩容 -
StatefulSet 有状态应用
是为了解决有状态服务的问题(对应Deployment和RS是为无状态服务而设计),其应用场景包括: -
稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,即PVC实现
-
稳定的网络标志,即Pod重新调度后其Podname和Hostname不变,基于Headless Service(即没有Cluster IP的service)来实现
-
有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是running和ready状态),基于init container来实现
-
有序收缩,有序删除(即从N-1到0)
5 -Daemonset
确保全部(或者一些)node上运行一个pod的副本,当有node加入集群时,也会为他们新增一个pod,当有node从集群中移除时,这些pod也会被回收,删除daemonset将会删除它创建的所有pod
使用Daemonset的一些典型用例:
- 运行集群存储daemon,例如在每个node上运行ceph,glusterd
- 在每个node上运行日志收集daemon
- 在每个node上运行监控daemon,例如prometheus
6、job
负责批处理任务,即仅执行一次的任务,他保证批处理任务的一个或多个pod成功结束
cron job 管理基于时间的job,即:
- 在给定的时间内只运行一次
- 周期性的在给定时间内执行