K8s基础和资源介绍
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| k8是对容器的编排工具,之前使用的docker-compose是单机编排
k8s原生的语言:go语言
管理k8s集群工具: 1、vsocde 2、rancher(web图形化界面) 3、k9s
borg swarm(docker写的) mesos 这些都在之前使用的编排工具,但现在k8s火起来了,他们就不怎么用了
|
1、K8s参考网站
1 2 3 4 5 6 7 8
| 官网:https://kubernetes.io 官方文档:https://kubernetes.io/zh-cn/docs/home/ kubeadm官方文档:https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/ docker官方文档:https://docs.docker.com/ prometheus官方文档:https://prometheus.io/docs/introduction/overview/ ansible安装k8s项目:https://github.com/easzlab/kubeasz?tab=readme-ov-file 阿里云ACK:https://www.aliyun.com/product/kubernetes 亚马逊云EKS:https://aws.amazon.com/cn/eks/?nc2=h_ql_prod_ct_eks
|
2、K8s的2大组件
1 2 3 4 5
| c/s结构的
1、master组件(控制平面组件(Control Plane Components))
2、node组件
|
- 1、master组件 (控制平面组件(Control Plane Components))
1 2 3 4 5 6 7 8 9 10 11
| 1、kube-apiserver(apiserver):类似于司令部,所有master上的组件工作都要经过apiserver (当在客户端执行命令或者在UI界面操作起一个容器都需要经过api,他会通知其他组件,所有组件调用什么东西或者计算什么东西都要经过他)
2、etcd:所有组价产生的数据存放位置,储存所有命令、资源清单、证书信任、web操作及其他组件数据 (如果这个宕了,这一套集群就废了,也就是说这套集群需要重新搭建,而不是修复一台etcd)
3、kube-scheduler(scheduler 时该丢了儿):资源计算、资源调度 (比如说在命令行执行创建10台容器,先经过他apiserver,会把期望值存档etcd,然后通知scheduler去etcd把数据取出来)
4、kube-controller-manager(controller 抗抽了儿):控制器,控制node组件启动容器 (schedule做完资源的计算调度,数据存档etcd了,controller通过apiserver拿到数据,会控制node组件启动)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| 1、kubelet:控制docker启动容器(控制容器运时,启动指定容器) (每一个node都要装)
2、容器运行时(Container runtime) (每一个node节点上得装一个容器运行时) - containerd - CRI-O - Docker Engine - Mirantis Container Runtime
3、kube-proxy(可选):POD端口映射,网络相关 可以理解为pod就是容器 起pod需要做端口映射,他就是做端口映射的工具
CRI:runtime,容器操作接口 CNI:network,网络操作接口 CSI:storage,储存操作接口
|
3、K8s架构
单机节点架构
高可用架构
pod创建流程
4、k8s核心资源(操作对象)
①、pod资源
①什么是pod
1、Pod是K8s的最小单位
2、Pod的IP地址是随机的,删除Pod会改变IP
3、Pod都有一个根容器
4、一个Pod内可以由一个容器或多个容器组成
5、一个Pod内的容器共享根容器的网络、名称空间、和文件系统卷 (比如说起一个nginx的pod,他会和根容器共享网络、名称空间、和文件系统。原理是:根容器里面的网络模式用的是docker网络模式中的Container模式)
6、一个Pod内的网络地址由根容器提供
1 2 3
| 请问贵公司k8s架构一个pod里面起几个容器
答精确的数字就是错误的,首先应该pod里面起几个容器取决于项目
|
②pod运行状态,只要记住不是runing状态就是有问题的
状态 |
描述 |
Pending(等待) |
Pod已经被K8S系统接受,但是有一个或多个容器,尚未创建,亦未运行。此阶段包括等待Pod被调度的时间和通过网络下载镜像的时间 |
Running(运行) |
Pod已经绑定到某个节点(node),Pod中所有容器都已被创建,至少有一个容器仍在运行,或者处于启动或重启状态 |
Succeeded(成功) |
Pod中所有容器都已成功终止,并且不会再重启 |
Failed(失败) |
Pod中所有容器都已成功终止,并且有一个容器是因为失败而终止 |
Unknown(未知) |
因为某些原因无法获取Pod状态,这种情况,通常是因为与Pod所在主机通信失败 |
②、service资源
1
| service也是k8s核心资源之一,service定义了服务的入口地址,用来将后端的pod服务暴露给外部的用户访问
|
service提供了2种网络资源
1 2 3 4 5 6 7 8 9 10
| 第一种:NodePort 宿主机端口映射clusterip端口,对外提供服务
第二种:ClusterIP pod的负载均衡(起10个pod,clusterip可以给这些pod负载,但是clusterip是内网ip,宿主机还是不能访问,所以service又提供了nodeport)
解决方案:使用DNS解析POD的IP到一个'字符串上'(每个pod启动都要到标签app:nginx) DNS的服务: - coreDNS(k8s用这个) - bind9(比较麻烦) - dnsmsq(内外的dns用)
|
③、label标签资源
1 2
| Label标签是K8S中非常重要的一个属性,Label标签就像身份证一样,可以用来识别K8S的对象。 传统架构中,不同的服务应用之间通讯,都是通过IP和端口,但是在K8S中很多匹配关系都是通过标签来找。
|
④、Namespace资源
1 2
| Namespace(名称空间)是K8S中非常重要的一个概念,Namespace将集群内部的资源进行隔离划分。 在Namespace中,形成逻辑上的不同项目组或用户组。
|
⑤、Controller控制器资源
1 2 3 4 5 6 7 8 9 10
|
- RC资源:可以做的自动拉起,控制多个副本,但现在不用了 - RS RC控制器的升级版,可以自动拉起宕机的POD - Deployment 生产中常用的控制器,功能强大,包含了RS控制器,对镜像做版本管理(比较常用) - DaemonSet 保证所有node节点上,有且只有一个pod运行 - Staefulset 有状态的应用(如mysql的主从复制),为pod提供唯一标识 后面起pod会写资源清单起10个nginx,挂了一台就直接挂了,pod不会再起一台,而能够拉起的是controller资源,他会检测资源清单是不是10个pod都在,如果少一个,控制器会重新拉起一个再加入集群
|
pod RC Service 的关系
1 2 3
| 自动扩缩容: 比如说现在有10台nginx,双十一流量上来了,10台不够用,怎么办? k8s有一个资源,一开始10个nginx就够了,流量上来了会自动扩容,流量下去了会自动缩容,而且扩出来的pod和之前的pod一模一样
|