k8s入门学习
一些关于容器的补充概念:
docker中容器和镜像的关系是什么?docker的整个生命周期有三部分组成:镜像(image)+容器(container)+仓库(repository)。容器是由镜像实例化而来。
也可以说,镜像是文件,容器是进程。容器是基于镜像创建的,即容器中的进程依赖于镜像中的文件。
docker 的镜像概念类似虚拟机的镜像。是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。
docker容器类似虚拟机,可以执行包含启动,停止,删除等。每个容器间是相互隔离的。容器中会运行特定的运用,包含特定应用的代码及所需的依赖文件。可以把容器看作一个简易版的linux环境(包含root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序。
k8s是什么:
简单介绍:
跟不同的应用部署方案对比:
集群架构:
重要组件:
一个节点下边可以有多个pod,一个pod里边可以有多个镜像。
我们可以将一个pod指定到一个节点去运行,也可以限定CPU和内存的用量。
工作负载分类:
-
Deployment
适合无状态应用,所有Pod等价,可替代。
为了更好地解决服务编排的问题,k8s在V1.2版本开始,引入了deployment控制器,值得一提 的是,这种控制器并不直接管理pod,
而是通过管理replicaset来间接管理pod,即:deployment管理replicaset,replicaset管理 pod。所以deployment比replicaset的功能更强大。
-
StatefulSet
有状态的应用,适合数据库这种类型(像一般我们部署的应用,都是不需要存储数据的。不需要记住状态的,所以可以随意扩充副本,每个副本都是一样的,可替代的,而像数据库、Redis这类有状态的,则不能随意扩充副本)
-
DaemonSet
在每一个节点上跑一个Pod,可以用来做节点监控、节点日志收集等
-
Job & CronJob
Job用来表达的是一次性任务,而CronJob会根据时间规划反复运行,即定时任务
现存问题:
1.每次只能访问一个Pod,没有负载均衡自动转发到不同Pod
2.访问还要端口转发
3.Pod重创后IP变了,名字也变了
以上可以用Service解决
Service:
介绍:
用标签关联起来所有的Pod,访问的时候通过serbice去访问,将请求发到service上面,service经过负载均衡自动转发到不同的Pod上面。
创建Service:
在k8s里边,都可以用yml文件配置信息,然后创建,service也是。
有以下三种类型:
ClusteIP:
默认的,仅在集群内部可用
NodePort:
暴露端口到节点,提供了集群外部访问的入口,端口范围固定:30000~32726
LoadBalancer:
需要负载均衡(通常都需要云服务商提供)
会额外生成一个IP对外服务
k8s支持的负载均衡器:负载均衡器
StatefulSet:
当前先学习如何使用k8s搭建部署普通的应用,对于数据库这种有状态的类型,后边学习到再补充,先把框架放在这里。
数据持久化:
部署完数据库后,数据还没有保存到数据持久盘里边去,重启之后,pod重建数据就会丢失掉。
k8s集群不会为你处理数据的存储,但我们可以为数据库挂载一个磁盘来保证数据的安全。
可以选择云存储、本地磁盘、NFS。
-
本地磁盘:可以挂载某个节点上的目录,但是需要限定pod在这个节点上运行
-
云存储:不限定节点,不受集群影响,安全稳定;需要云服务商提供,裸机集群是没有的。
-
NFS:不限定节点,不受集群影响。