首页
网站导航
关于
Search
1
解决Typecho Joe主题访问fastly.jsdelivr.net速度慢的方案 | 快速优化技巧
2,191 阅读
2
解决WSL2内存不释放问题的最佳指南
1,401 阅读
3
如何在 Typecho Joe 主题的文章中增加目录
1,171 阅读
4
GO语言环境的搭建教程 - 完全指南
1,005 阅读
5
如何解决Win11电脑桌面上方显示横线问题 | 窗口11教程
1,005 阅读
默认分类
编程语言
GO语言
PHP
Node
javascript
html
rust
java
Css
Python
资源分享
chrome插件
阅读思考
运维架构
redis
Nginx
linux
memcached
mongodb
mysql
windows
docker
k8s
Mq
apache
CI
Git
swoole
elk
系统设计
thinkPhp
beego
登录
Search
标签搜索
重要
go基础
git 命令
go包
phpstorm
sublime
thinkphp6
mysql问题
软件分享
redis命令
php基础
thinkphp3.2
php第三扩展包
小蚯蚓博客
累计撰写
333
篇文章
累计收到
48
条评论
首页
栏目
默认分类
编程语言
GO语言
PHP
Node
javascript
html
rust
java
Css
Python
资源分享
chrome插件
阅读思考
运维架构
redis
Nginx
linux
memcached
mongodb
mysql
windows
docker
k8s
Mq
apache
CI
Git
swoole
elk
系统设计
thinkPhp
beego
页面
网站导航
关于
搜索到
1
篇与
的结果
2024-03-08
K8s 快速入门
概述 k8s 是kubernets的简称,k和s之间有8个单词,因为单词太长,所以简称k8s。kubernets的单词意思是舵手,是用于管理多主机上docker容器的。 说k8s解决的问题之前,先说下早期的部署方案的问题: 传统的部署,一台机器上部署多个应用,会有资源竞争的问题,比如网络、cpu、内存、磁盘文件目录占用等一些列问题 虚拟化部署,在服务器上不同的应用,用不同的虚拟机,这样可以解决方式1的环境不隔离的问题。因为虚拟可以分配好固定的资源,这样就不会争抢资源。但是会有资源占用的问题,因为虚拟机里装了系统,会占用资源。启动一个虚拟机估计要几分钟。 容器化部署,容器可以实现类似虚拟机一样的资源隔离效果,并且他没有自己的操作系统,用的还是宿主机的操作系统。2秒内即可启动容器。 k8s部署,因为docker容器有诸多问题,因为容器经常要销毁,然后重启一个,重启后,会有ip变了等问题,k8s提供了以下这些能力 自我修复:容器内的应用出现问题的话,比如内存溢出问题,会自动销毁容器,然后基于原来的容器,再重新启一个 弹性伸缩:监控负载比较大的时候,自动的增加容器数量,等负载降下来后,自动删除负载 自动部署和回滚:可以实现滚动更新,更新的时候,新起来一个,然后把旧的再下掉,这样用户就无感知了。如果更新有问题,还可以回退到上一个版本 服务发现和负载均衡:以前常规的需要nginx反向代理,实现负载均衡,现在k8s默认就有这个功能 机密和配置管理:很多应用有自己的配置,比如mysql有自己的配置,k8s有一套配置管理,可以实现这些配置管理 存储编排:把所有的机器的存储资源,管理成一个个抽象的虚拟磁盘,容器统一访问到虚拟磁盘,由虚拟磁盘映射到真正的物理磁盘 k8s的基本架构 通过命令行工具kubetl或者可视化界面dashboard来操作k8s。通过这两种方式操作k8s,都是通过http请求api-server,然后对应到controller-mannager控制器上,控制器有多种类型,可以理解为mvc里的c,比如 kube-controller-mannager,这里的各种控制器,用于管理k8s中的各类资源 cloud-controller-mananger,这个主要用于对接到第三方云平台,k8s 访问到第三方的平台 然后各个控制器进行一些操作,例如kube-controller-mannager可以进行创建pod,这个时候就要经过kube-scheduler调度器,它可把这个pod放到合适的节点上去,比如mysql pod需要存储性能好,kube-schedule就会将mysql部署到该pod上 k8s架构里,至少要有两个机器,一个是左侧的master节点,负责一些基础管理,然后要有右边的节点。对pod的操作,首先要访问master的api-server,然后master操作右边的节点node。 基础概念 服务分类 服务可以分为有状态应用和无状态应用: 有状态应用表示可以存数据,例如redis,扩容的时候,有数据迁移等问题,不然新增的redis节点就没有数据了 无状态的应用没有存任何数据,只是简单转发和计算,例如nginx服务,如果新增nginx,没有任何影响 资源和对象 资源相当于yaml配置,对象是基于这个配置创建出来的实例。 对象的规约和状态 spec规约相当于期望,表示我们期望会这样,比如配置pod的spec,希望里面有几个容易。 status状态:表示对象的实际状态,可能实际情况和配置的不一样,k8s会尽量的保证对象和我们配置的一样。 资源分类 k8s 会对资源范围进行划分 集群级别的资源,集群内的所有应用都可以访问到这部分资源。 namespace,命名空间本身也属于一个资源,属于集群底下的 Node,节点相当于一个服务器,k8s主要是用于管理这些节点,而不是创建节点 clusterRole,用于集群权限管理,声明了集群的角色,表示集群里有这些角色,这些角色有什么权限 clusterRoleBinding,表示这个角色绑定到集群级别的资源上,所以这些角色就可以操作这些集群 命名空间级别的资源,k8s把集群内再划分成多块,比如命名空a和命名空间b,只有自己命名空间内的资源才是可以共享的 pod,可以看作是容器组,一个pod里可以有多个容器,当一个pod被创建的时候,会有个默认的容器pause,用于实现pod里容器之间的资源共享。 例如php和mysql部署在同一个pod里,php就可以通过localhost直接访问到mysql了。 pod: 里又有控制器和replicas副本,副本其实就负载量大的时候,自动创建的新的pod。控制器又有很多类型,例如 用于创建无状态的服务,例如goland的服务。eployment这个控制器可实现自动创建pod,滚动升级,以及回滚,扩容、缩容等。 部署有状态服务,用statefulset控制器创建,里面有headless services 的dns解决网络问题,里面的volumeClaimTempale,解决存储的问题 守护进程,在匹配到的无状态服务或者有状态服务里,利用daemonSet嵌入一个守护进程,做日志收集等,这样就不用自己去容器里装这些日志组件了 创建定时任务,Job和CronJob控制器 服务发现:实现k8s集群内部网络调用,可以用service和ingress,访问集群里的pod 存储:volume虚拟磁盘,共享pod中容器的数据 特殊类型的配置:configMap配置修改,会自动更新到pod里面,实现配置暴露出来。 元空间,每个资源都有一些自己的元空间的资源,例如每个pod都有自己元空间资源,该pod内部可以共享这些资源,例如如下三个资源 Horizontal pod autoscaler(HPA),可以监控cpu的使用率,比如30s检测一次,发现cpu大于50%,自动扩容。 podtemplate模板,扩容的时候,基于这个模板进行扩容,这样扩容出来的实例就一样了。 limitrange用于资源限制,比如可以限制内存最多5GB
2024年03月08日
72 阅读
0 评论
0 点赞