k8s学习总结(持续更新)

基础概念:
一、资源对象:
0、命令:kubectl create -f mysql-rc.yaml,改命令会创建rc,rc会根据配置文件,启pods
1、Replication Controller(RC):复制控制器(命令:kubectl get rc,可用于查看rc)
作用:
(1)确保pod数量:RC用来管理正常运行Pod数量,一个RC可以由一个或多个Pod组成,在RC被创建后,系统会根据定义好的副本数来创建Pod数量。在运行过程中,如果Pod数量小于定义的,就会重启停止的或重新分配Pod,反之则杀死多余的。
(2)确保pod健康:当pod不健康,运行出错或者无法提供服务时,RC也会杀死不健康的pod,重新创建新的。
(3)弹性伸缩 :在业务高峰或者低峰期的时候,可以通过RC动态的调整pod的数量来提高资源的利用率。同时,配置相应的监控功能(Hroizontal Pod Autoscaler),会定时自动从监控平台获取RC关联pod的整体资源使用情况,做到自动伸缩。
$ kubectl scale rc redis-slave --replicas=3
scaled
(4)滚动升级:滚动升级为一种平滑的升级方式,通过逐步替换的策略,保证整体系统的稳定,在初始化升级的时候就可以及时发现和解决问题,避免问题不断扩大。
注意:删除rc,并不影响通过该rc已创建好的pod。为了删除所有pod,可以设置replicas的值为0,然后更新rc,另外kubectl提供了stop和delete命令来一次性删除rc和rc控制的全部pod
另:
replica set:  下一代的rc,区别是:支持基于集合的label selector(kubectl get rs)
rc只支持基于等式的label selector
deployment:相当于rc的最大升级,是我们可以随时知道当前pod部署的进度
HPA(horizontal pod autoscaling):pod横向自动扩容,也是一种资源对象,原理:通过追踪分析rc控制的所有目标pod的负载变化情况,来确定是否需要针对性地调整目标pod的副本数。
2、Pods:(命令:kubectl get pods,可用于查看pods;kubectl describe pod <pod_name>:查看pod详细信息)
定义:
Pod是可以创建和管理Kubernetes计算的最小可部署单元。一个Pod代表着集群中运行的一个进程。
Pod就像是豌豆荚一样,它由一个或者多个容器组成(例如Docker容器),它们共享容器存储、网络和容器运行配置项。Pod中的容器总是被同时调度,有共同的运行环境。你可以把单个Pod想象成是运行独立应用的“逻辑主机”——其中运行着一个或者多个紧密耦合的应用容器——在有容器之前,这些应用都是运行在几个相同的物理机或者虚拟机上。
尽管kubernetes支持多种容器运行时,但是Docker依然是最常用的运行时环境,我们可以使用Docker的术语和规则来定义Pod。
Pod中共享的环境包括Linux的namespace,cgroup和其他可能的隔绝环境,这一点跟Docker容器一致。在Pod的环境中,每个容器中可能还有更小的子隔离环境。
Pod中的容器共享IP地址和端口号,它们之间可以通过localhost互相发现。它们之间可以通过进程间通信,例如SystemV信号或者POSIX共享内存。不同Pod之间的容器具有不同的IP地址,不能直接通过IPC通信。
Pod中的容器也有访问共享volume的权限,这些volume会被定义成pod的一部分并挂载到应用容器的文件系统中。
就像每个应用容器,pod被认为是临时实体。在Pod的生命周期中,pod被创建后,被分配一个唯一的ID(UID),调度到节点上,并一致维持期望的状态直到被终结(根据重启策略)或者被删除。如果node死掉了,分配到了这个node上的pod,在经过一个超时时间后会被重新调度到其他node节点上。一个给定的pod(如UID定义的)不会被“重新调度”到新的节点上,而是被一个同样的pod取代,如果期望的话甚至可以是相同的名字,但是会有一个新的UID(查看replication controller获取详情)。
每个pod都有一个“根容器(Pause容器)”和其他业务容器组成
Pause容器作用:
(1)不易死亡,其状态代表整个容器组的状态
(2)其他业务容器共享Pause容器的ip、共享挂接的volume,简化了容器间通信、和文件共享问题
每个pod,都有唯一id,为pod ip,集群内pod间通信通过tcp/ip直接通信
默认情况下:pod里的某个容器挂了后,kubernetes会自动检查并重启这个pod(重启pod里面的所有容器)
3、service(kubectl get svc:查看当前服务)
定义:
(1)Kubernetes中一个应用服务会有一个或多个实例(Pod),每个实例(Pod)的IP地址由网络插件动态随机分配(Pod重启后IP地址会改变)。为屏蔽这些后端实例的动态变化和对多实例的负载均衡,引入了Service这个资源对象
(2)k8s的Service定义了一个服务的访问入口地址(cluster ip),前端的应用通过这个入口地址访问其背后的一组由Pod副本组成的集群实例,来自外部的访问请求被负载均衡到后端的各个容器应用上。Service与其后端Pod副本集群之间则是通过Label Selector来实现对接的。而RC的作用相当于是保证Service的服务能力和服务质量始终处于预期的标准。Service 定义可以基于 POST 方式,请求 apiserver 创建新的实例。一个 Service 在 Kubernetes 中是一个 REST 对象。
kubectl get endpoints:查看service的endpoint列表
4、Master
定义:集群控制节点,每个k8s集群,需要一个master节点来负责整个集群的管理和控制,基本上k8s的所有控制命令都是发给它,它来负责具体的执行过程,我们后面所有执行的命令都是在master节点上运行。
master节点上运行的关键进程:
kubernetes API Server(kube-apiserver),提供了HTTP Rest接口的关键服务进程,是kubernetes里所有资源的增删改查操作的唯一入口,也是集群控制的入口进程。
kubernetes controller manager(kube-controller-manager),kubernetes里所有资源对象的自动化控制中心。
kubernetes scheduler(kube-scheduler),负责资源调度(Pod调度)的进程。
master节点上,往往还启动了一个etcd server 进程,kubernetes里的所有资源对象的数据全部保存在etcd中。
5、Nodekubectl get nodes:查看nodes;kubectl describe node <node_name>:查看node详细信息)
除了master,kubernetes集群中的其他机器称为node节点。
与master 一样,master节点可以是物理主机,也可以是虚拟机,node节点是kubernetes集群中的工作负载节点。
node节点上运行的关键进程:
kubelet:负责pod对应的容器创建、启停等任务,同时与master节点密切协作,实现集群管理的基本功能
kube-proxy:实现kubernetes service的通信与负载均衡机制的重要组件
docker engine:docker引擎,负责本机的容器创建和管理工作
6、label:一个label是一个key-value的键值对,由用户指定。
可以附加在各种资源对象上,如node、pod、service、rc等
一个资源对象可以定义任意数量的label,同一个label也可以被添加到任何数量的资源对象上去
label通常在资源定义时确定,也可以在对象创建后动态添加和删除
k8s可通过label来查询对象

二、kubectl命令行语法详解:
kubectl [command] [type] [name] [flags]
(1)command:子命令,用于操作k8s资源对象,例如create、delete、describe、get、apply
(2)type:资源对象类型,区分大小写、支持单数、复数或者简写形式
(3)name:资源对象的名称,区分大小写,如果不指定名称,则系统返回属于type的全部对象的列表
(4)flags:可选参数

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值