master:生产不要跑其他业务,最好管理和调度。生成证书的时候先规划好
etcd:键值数据库,生产建议3个以上。节点500-1000能支持
node:集群资源不够,添加node节点,比较简单
kubelet:负责监听节点上pod的状态,同时负责上报节点和节点上面pod的状态,负责与master通信,管理pod
kube-Proxy:负责pod之间的通信和负载,将指定的流量分发到后端正确的机器上
route -n
ipvsadm -ln:
ipvs:监听master节点增加和删除service以及endpoint的消息,调用netlink接口创建相应的ipvs规则,通过ipvs规则,将流量转发到相应的pod上。
iptables:监听master节点和增加以及endpoint的消息,对于每一个service,他都会场景一个iptables规则,将service的clusterIP代理到后端对于的pod。但是规模大了性能低,不建议使用。
calico:符合cni标准的网络插件,主要功能是每个pod生成一个唯一的ip地址,并且把每个节点的当做一个路由器,跨节点通信就可以实现。新生cilium
coredns:用于k8s集群内部service的解析,可以让pod把service名称解析成ip地址,然后通过service的ip地址进行连接到对应的应用上。
docker:容器引擎,负责对容器的管理。
metrics-server:采集数据
- [root@master ~]# k top po -n kube-system
- NAME CPU(cores) MEMORY(bytes)
- calico-kube-controllers-bd5fc6b6-8csgh 3m 16Mi
- calico-node-5fzq4 36m 141Mi
- calico-node-wktvv 25m 137Mi
- calico-node-z9p4b 33m 133Mi
- coredns-5c5b9c5cb-j575k 3m 19Mi
- dns-autoscaler-7874cf6bcf-d6wkm 1m 11Mi
- kube-apiserver-master 57m 429Mi
- kube-controller-manager-master 15m 56Mi
- kube-proxy-4nxdl 6m 22Mi
- kube-proxy-fvnf8 6m 18Mi
-
-
- [root@master ~]# k top node
- NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
- master 267m 7% 3658Mi 49%
- node1 196m 5% 3113Mi 40%
- node2 96m 2% 3489Mi 45%
大部分都是有ns隔离的,没有ns隔离的资源:
kubectl get clusterrole
pv,rbac,ns,ingressclass,storageclass
pod: pos是k8s最小的隔离单元,它由一组,一个或多个容器组成,每个pod还包含了一个pause容器,pause容器是pod的父容器,主要负责僵尸进程的回收管理,通过pause容器可以使同一个pod里面的多个容器共享存储,网络,pid,ipc等。
大佬博客: lady_killer9的博客_CSDN博客-网络安全,python,常见算法与数据结构实现领域博主
pod探针:
StartpProbe: k8s1.16版本后新增,判断容器内应用程序是否已经启动。如果配置了startpprobe,会禁止其他探测,直到他成功为止。
LivenessProbe:没有配置该探针,默认就是success
readinessprobe:判断容器内程序是否健康
pod探针检测方式:
execaction:容器内执行命令,返回为0即可
tcpsocketaction:tcp连接检测容器内端口是否是通的。 类似netstat
httpgetaction:应用程序api地址来检测。200-400则被认为健康
livenessProbe:
failureThreshold: 5
httpGet:
path: /health
port: 8080
scheme: HTTP
探针检测参数配置:
initialDelaySeconds: 60
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
rc:pod副本期望值,基本很少使用,使用deployment替代
deployment·:部署无状态服务器,最常用的控制器。一般用于管理 企业内部无状态的微服务。
自动扩容缩容,自动灾难恢复,一键回滚等功能。 云原生:应用无状态
deployment:
kubectl create deployment -h
kubectl create deployment nginx --image=nginx:1.15.2
kubectl get deployment nginx -o yaml >nginx.yaml
kubectl replace -f nginx.yaml
kubectl edit deployment nginx
换镜像版本:kubectl set image deploy nginx nginx=nginx:1.15.3 --record
查看更新过程: kubectl rollout status deploy nginx
kubectl get rs
deployment操作:
k8s学习-Deployment(模板、更新、扩缩容、回滚等)_lady_killer9的博客-CSDN博客_deployment k8s 模板
多次更新,每次变动消耗资源,deployment暂停功能: kubectl rollout pause deploy nginx
恢复resumed
deployment导出的yaml文件参数解释:
StatefulSet 有状态服务:有启动顺序,所以命名是0-1-2-3……
kg po -o yaml -n xx|grep image
灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B 上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
级联删除:删除StatefulSet也会删除pod
非级联删除: cascade
daemonset控制器能够确保所有的k8s的node节点都运行一个相同的pod副本,当向k8s集群中增加node节点时,这个node节点也会自动创建一个pod副本,当node节点从集群移除,这些pod也会自动删除;删除daemonset也会删除它们创建的pod
使用场景:
(1)在每一个node节点运行一个存储服务,例如gluster,ceph
(2)在每一个node节点运行一个日志收集服务,例如fluentd,logstash
(3)在每一个node节点运行一个监控服务,例如Prometheus Node Exporter,zabbix agent等
相较于Deployment,DaemonSet没有副本数,因为他是一个节点启动一个,容器。
hpa:
HPA全称是Horizontal Pod Autoscaler,中文意思是POD水平自动伸缩.
可以基于 CPU 利用率自动扩缩 ReplicationController、Deployment、ReplicaSet 和 StatefulSet 中的 Pod 数量。
除了 CPU 利用率,内存占用外,也可以基于其他应程序提供的自定义度量指标来执行自动扩缩。