k8s学习基础知识

csi :容器存储接口

cni:容器网络接口

 cri:容器runtime接口

 

简要说下Kubernetes有哪些核心组件以及这些组件负责什么工作?
etcd:提供数据库服务保存了整个集群的状态
kube-apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
kube-controller-manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
kub-scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
kubelet:负责维护容器的生命周期,同时也负责Volume和网络的管理
kube-proxy:负责为Service提供内部的服务发现和负载均衡,并维护网络规则
container-runtime:是负责管理运行容器的软件,比如docker

 


个人推荐 K8S 集群规模不要超过千台节点

 

存活探针:livenessProbe探针
就绪探针:ReadinessProbe就绪探针

 

服务发现:本质是通过服务名找IP的过程
通过配置docker里的dns,可以使得docker里的/etc/resolv.conf和宿主机一样

 

下次遇到etcd慢:可以看看连接数
netstat -anp | grep 2379
如果某个服务慢,一般可以通过netstat -anp | grep mainId | wc -l,来判断链接数目

进程卡主的情况(待实践和提高):
/proc/{pid}看进程状态,
cat stat看进程状态
stack看进程执行到哪里了

 

 

 

API Server 先经过认证、授权、准入
kubernetes 认证
下面我们就认识几个常见的认证方式
客户端证书认证
静态Token
Service Account Tokens 认证
Service Account

kubernetes 授权
新增角色访问控制机制(Role-Based Access,RBAC)让集群管理员可以针对特定使用者或服务账号的角色,进行更精确的资源访问控制

kubernetes 准入控制
LimitRanger
dockerpull

 

 

无头服务:
第一种:自主选择权,有时候client想自己决定使用哪个Real Server,可以通过查询DNS来获取Real Server的信息
第二种:headless  service关联的每个endpoint(也就是Pod),都会有对应的DNS域名;这样Pod之间就可以互相访问

如上,eureka就是我们场景的StatefulSet,对应的pod就是eureka-0,eureka-1,eureka-2,他们之间能互相访问,这样对于一些集群类型的应用就可以解决互相身份识别的问题了

k8s集群节点需要关机维护,需要怎么操作
kubectl drain k8s-node-01 --force --ignore-daemonsets
可以让node在维护期间排除节点.驱逐pod

 

容器和主机部署应用的区别:
一次封装、到处运行
容器部署可以将各个服务进行隔离,互不影响

 

apiserver 负载均衡:
Nginx + Keepalived、HAProxy + Keepalived和 云厂商LB(比如:阿里云SLB)

 

scheduler和controller-manager的工作:

k8s中也有这种业务场景,在多master场景下,只能有一个master上的进程工作,例如,scheduler和controller-manager。以scheduler来说,它的工作是给Pod分配合适的宿主机,如果有多个scheduler同时运行,就会出现竞争,因此,如果允许这种场景存在的话,就又需要实现一种调度逻辑:某个Pod由哪个scheduler进行调度,这相当于又要实现一层调度。但是,实际上调度工作是相对比较简单的,不需要多个scheduler进行负载,只需要一个scheduler进行调度就行。因此,k8s提供了leader-election的能力。

leader-election的具体工作方式是:各候选者将自身的信息写入某一个资源,如果写成功,某个后选择就称为了主,其他就是备,同时,在之后主会定期更新资源的时间,如果超过一段时间未更新时间,其他候选者发现资源的最后更新时间超过一定值,就会认为主挂掉,然后会向资源写入自身信息,从而成为新的主。

 

posted on 2020-12-25 09:59  星星眨着眼  阅读(243)  评论(0编辑  收藏  举报

导航