Kubernetes容器编排技术基本使用
1.部署模式发展历程
物理单机 -- 虚拟机(VMware)-- IAAS(基础设施即服务 比如够买jsp主机模式)-- OPENSTACK(多个机器分片使用思想)-- docker(容器化) -- K8S(云原生自动化部署自动化编排)
2.K8S概述
kubernetes k和s之间有8个字母所以命名为K8S,用于自动部署、扩展、统一管理容器化应用集群,支持云平台的部署。 负责在大规模服务器环境中管理容器组(pod)的扩展、复制、健康,并解决 pod 的启动、负载均衡等问题。目前K8S新版本已经废弃了docker容器使用的是containerd如果要使用docker容器在安装K8S的时候要修改配置。k8s中操作指令和docker类似把docker换做crictl。如果使用图形化操作工具可以用Rancher、kubesphere。
1.K8S优势
1.云环境迁移
一个K8S可以管理多个跨平台的云服务比如不同的服务在阿里云、腾讯云、谷歌云、华为云都是可以统一管理的,可以云环境无缝迁移。
2.高效资源利用
K8S可以监控系统负载可以自动平衡各个云服务之间的负载,比如有的服务器资源很空闲有的服务器资源紧张K8S可以自动使管理的服务器资源平衡。
3.自动缩放能力
pod 是无状态运行的,pod 宕机立马会有其他 pod 接替它的工作,用户完全感觉不到。如果用户量突然暴增,现有的 pod 规模不足了,那么会自动创建出一批新的 pod,以适应当前的需求。当负载降下来的时候,Kubernetes 也会自动缩减 pod 的数量。
4.可靠性
K8S可靠性非常高,服务几乎不会被服务器宕机中断,系统Pod出现故障,Kubernetes 会创建必要数量的应用镜像,并分配到健康的 pod 或节点中,直到系统恢复。
5.健康检测
强大的自愈能力是Kubernetes这类容器编排引擎的一个重要特性,自愈的默认实现方式是自动重启发生故障的容器,有存活检测和就绪检测可以配置启动多久后开始检测每隔多少秒检测一次。
2.K8S核心组件
1.节点
1.master节点
控制节点负责指令的分发负责整个集群的管理控制
1.api server
主要复制和其它节点通信
2.controller manager
所有资源对象的自动化控制中心
3.scheduler
自动化调度控制中心,接受到controller manager下发的命令后scheduler负责调配。
4.etcd
k8s的注册发现中心
2.node节点
接收master节点的工作负载
1.kubelet
pod对应容器的创建启停
2.kube-proxy
实现k8s集群通信负载均衡
2.pod
pod是k8s管理的一个最小单元也就k8s中最重要的概念一个pod代表集群中运行的一个进程。
k8s不直接管理容器,而是管理pod,由pod管理容器,pod中可以有1个到多个容器,这些容器共享一个ip一个挂载路径,pod是k8s对容器的包装是容器的上层结构,容器只是pod调度的一个资源对象。
pod中有一个自带的pause container和服务器自己的容器
1.特点
1.网络
一个pod有一个唯一的ip地址,在pod中共享网络命名空间,同一个pod的容器可以用localhost互相通信
2.存储
pod能够配置共享存储卷。pod中的所有容器能够访问共享存储卷,共享存储卷防止pod容器重启数据丢失
2.使用方式
1.自主式pod
这种Pod本身是不能自我修复的,当Pod被创建后都会被Kuberentes调度到集群的Node上,直到Pod的进程终止、被删掉、因为缺少资源而被驱逐、或者Node故障之前这个Pod都会一直保持在那个Node上,Pod不会自愈。
如果Pod运行的Node故障,或者是调度器本身故障,这个Pod就会被删除,同样的,如果Pod所在Node缺少资源或者Pod处于维护状态,Pod也会被驱逐。
2.控制器管理pod
K8S使用controller manager来管理Pod实例,Controller可以创建和管理多个Pod,提供副本管理、滚动升级和集群级别的自愈能力。
如果一个Node故障,Controller就能自动将该节点上的Pod调度到其他健康的Node上。K8S使用controller manager来管理Pod。
3.pod容器探测
探测容器是否存活比如是否存在假死、死锁。如果不返回success会杀掉pod重启一个新的pod。
3.资源清单
k8s依赖资源清单配置管理容器信息
vi *-pod.yml 可以创建一个yml资源清单配置pod容器信息
4.创建pod
kubectl apply -f *pod.yml
5.查看pod
kubectl get pods -o wide
6.删除pod
kubectl delete pod + pod名称
3.label
k8s中有很多个pod,k8s是依赖label来管理的pod,label的概念就是一个标签。比如很多个pod都是dev,那dev就是pod的一个标签
4.replica set
期望值,代表期望pod的数量,保证pod数量和期望值一致
5.service
service就是用来做k8s的服务发现的,service创建以后ip不会变化,pod随时有可能变化,pod变化后通知service,类似微服务中的nacos提供了一个服务访问的入口。
6.namespace
命名空间,不同项目组创建不同的namespace,k8s中可以有多个不同的namespace,通过namespace做一个软隔离,不同的namespace不互通资源隔离。