一、学了docker,为什么要学k8s?
1.使用k8s时,对容器操作很少,因为容器是被封装k8s在pod中,在k8s中操作最小单元是pod,而docker的最小操作单元是容器
2.监控分析需要,可以先通过可视化监控看是哪一个节点消耗比较多的资源,可以通过kebctl这个命令去看这个节点上调用了哪些服务,
3.演示:
如通过可视化监控命令kubectl get no
看到是node节点
看到是k8s-node01这个节点消耗的资源比较多,可以去看上面调度了哪些服务kubectl get po |grep k8s-node01
因为此处没用指定名称空间,默认就是defalut名称空间
这里指定一下system
kubectl get po -n kube-system|grep k8s-node01
kubectl get ns
kubectl get po -n kube-system -owide |grep k8s-node01
可以通过命令看调度到某一个节点上有哪些pod,掌握这些命令是有必要的
除了看哪些节点调用了哪些服务,有的时候也需要进入pod,因为在k8s中容器是封装在pod中,即就需要进入pod中,进入pod后就可以进行打栈,可以进行trace,就需要知道这些操作,不然不知道怎么执行
docker是当前的主流热门技术
二、k8s产生背景
通过docker部署应用的话,基本满足需求,刚才部署了gift,也可以请求到,通过docker部署的话是属于裸容器部署。
裸容器部署的不足:
①不能自动恢复,如果容器所在的服务器挂了,哪怕将服务器启动起来,容器是不会自动恢复,没有自动恢复机制,k8s是具有自动恢复机制。
因为k8s保证当前的副本数和期望是一致的。
②端口管理问题:若用裸容器机部署会遇到端口管理问题,通过dockerrun的方式,要指定宿主机上的端口,如果一台服务器部署很多服务,端口管理比较麻烦。
③健康检查比较困难
④应对大流量难(docker不能自动扩充,而k8s可以自动伸缩容量,可以自动扩容也可以自动扩容,若是裸机部署,不可以实现高可用,既需要使用k8s)
三、k8s简介
kubernetes
1.k8s是可移植、可扩展的、开源的容器管理平台,是谷歌borg的开源版本,是管理容器的
2.功能强大
①弹性伸缩
②服务发现和负载均衡
③自动部署和回滚
④故障自我恢复
⑤机密和配置管理
⑥存储编排
批处理都可以实现
3.官网
http://kubernetes.io
现在的版本是1.24
虚拟机安装好的版本是1.22
重点是资源文件,yaml
怎么去定义资源文件
一个pod中有多个容器
4.常见资源概念
k8s中有很多资源
1)namesapce命名空间,租户通过k8s的命令空间实现,实现资源的逻辑隔离
2)pod是k8s中调度最新的逻辑单元,pod学好,高级资源就会比较简单了。
3)label/selector标签,给资源打标签。selector标签选择器。通过标签选择某个标签的某个资源进行管理
4)replicaSet,管理无状态的pod,不支持滚动发布,这个没有单独使用,一般都是在deloyment使用
5)Deployment管理replicaSet,支持滚动发布,无状态应用程序。
6)Statefulset管理有状态的应用。
7)DaemonSet每个节点最多一个,主要应用常见的的是监控,在每一个上部署一个就ok
8)Service应用服务的抽象,可以提供负载均衡和服务实现
ingress可以实现用域名的方式来访问k8s的应用
9)ConfigMapSecerets配置相关
10)Volume可装载的磁盘文件存储
四.安装
1、方式1:
kubeadm是官方提供的开源的工具,可以快速部署k8s集群,目前推荐的,安装也比较快。
不足:
发生故障的话,恢复会比二进制要慢一些,kubatdm是先启动容器进程,再启动容器再去对集群做恢复。
2、方式二:
二进制灵活升级维护比kubeadm,二进制安装比较复杂一点。比较灵活,升级维护比较方便,二进制安装很多细节都会涉及到,kubeadm里面都是比较自动化的,不知道具体过程,二进制升级维护更容易一些。
kubeadm先启动容器进程、再启动容器。容器管理容器的方式。