1 Kubernetes(k8s)
前言
云平台基础概念
IaaS:基础设施服务
PaaS:平台服务
SaaS:软件服务
关于Kubernetes和Docker有无数的争论和讨论。如果你没有深入研究它们,你会认为这两种开源技术在争夺容器(container)霸权。 让我们来一看清楚,Kubernetes和Docker Swarm不是竞争对手!
两者都有各自的优缺点,可以根据你应用程序的需求来选择使用。(择优选用,相互协作)
Docker是一种容器管理服务,它帮助开发人员设计应用程序,使用容器能更容易地创建、部署和运
行应用程序。Docker有一个用于集群容器的内置机制,称为“集群模式”(swarm mode)。使用集群模
式,你可以使用Docker引擎在多台机器上启动应用程序。
Docker Swarm是Docker自己针对Docker容器的原生集群解决方案,它的优点是紧密集成到
Docker的生态系统中,并且使用自己的API。它监视跨服务器集群的容器数量,是创建集群docker应用
程序的最方便的方法,不需要额外的硬件。它为Dockerized应用程序提供了一个小型但有用的编排系
统。
1.1 Kubernetes基础组件
1.1.1 控制平面组件(Control Plane Components)
控制平面的组件对集群做出全局决策(比如调度),以及检测和响应集群事件(例如,当不满足部署的
replicas 字段时,启动新的 pod)。
控制平面组件可以在集群中的任何节点上运行。然而,为了简单起见,设置脚本通常会在同一个计算机
上启动所有控制平面组件,并且不会在此计算机上运行用户容器。
1.1.2 Node组件
节点组件在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行环境
1.1.2.1 kubelet
一个在集群中每个节点上运行的代理。它保证容器都运行在 Pod 中。
一个在集群中每个工作节点上都运行一个kubelet服务进程,默认监听10250端口,接收并执
行master发来的指令,管理Pod及Pod中的容器。每个kubelet进程会在API Server上注册节
点自身信息,定期向master节点汇报节点的资源使用情况,并通过cAdvisor监控节点和容器
的资源。
1.1.2.2 kube-proxy
一个在集群中每台工作节点上都应该运行一个kube-proxy服务,它监听API server中service
和endpoint的变化情况,并通过iptables等来为服务配置负载均衡,是让我们的服务在集群
外可以被访问到的重要方式。
1.1.2.3 容器运行环境(Container Runtime)
容器运行环境是负责运行容器的软件。
Kubernetes 支持多个容器运行环境: Docker、 containerd、cri-o、 rktlet 以及任何实现 Kubernetes
CRI (容器运行环境接口)。
1.1.3插件(Addons)
插件使用 Kubernetes 资源 (DaemonSet, Deployment等) 实现集群功能。因为这些提供集群级别的功
能,所以插件的命名空间资源属于 kube-system 命名空间。
1.2 k8s命令行
1.2.1 namespace
中文名称:命名空间。 你可以认为namespaces是你kubernetes集群中的虚拟化集群。在一个Kubernetes集群中可以拥有多个命名空间,它们在逻辑上彼此隔离。 可以为你提供组织,安全甚至性能方面的帮助!
查看命名空间
创建NameSpce
kubectl create ns lagou
删除NameSpace
kubectl delete ns lagou
1.2.2 pod
Pod是kubernetes集群能够调度的最小单元。Pod是容器的封装 。 在Kubernetes集群中,Pod是所有业务类型的基础,也是K8S管理的最小单位级,它是一个或多个容器的组合。这些容器共享存储、网络和命名空间,以及如何运行的规范。在Pod中,所有容器都被同一安排和调度,并运行在共享的上下文中。对于具体应用而言,Pod是它们的逻辑主机,Pod包含业务
相关的多个应用容器。
特点
网络:每一个Pod都会被指派一个唯一的Ip地址,在Pod中的每一个容器共享网络命名空间,包括Ip地址
和网络端口。在同一个Pod中的容器可以和localhost进行互相通信。当Pod中的容器需要与Pod外的实
体进行通信时,则需要通过端口等共享的网络资源。
存储:Pod能够被指定共享存储卷的集合,在Pod中所有的容器能够访问共享存储卷,允许这些容器共享
数据。存储卷也允许在一个Pod持久化数据,以防止其中的容器需要被重启。
K8s一般不直接创建Pod。 而是通过控制器和模版配置来管理和调度
1.2.2.1 基础命令
查看pod
运行pod
扩容
创建服务
1.2.2.2 kubectl常用命令练习
get命令
describe命令
delete命令
进入容器命令
logs命令
格式化输出
强制删除pod
1.2.2.3 缩写汇总
1.3 k8s模板
1.3.1 NameSpce
1.3.2 pod
1.3.3 deployment
1.3.4 service
运行service
kubectl apply -f tomcatservice.yml
删除service
kubectl delete -f tomcatservice.yml
1.4 k8s volume(存储)
1.4.1 hostPath
hostPath类型的存储卷是指将工作节点上某文件系统的目录或文件挂载于Pod中的一种存储卷。把宿主
机上的目录挂载到容器,但是在每个节点上都要有,因为不确定容器会分配到哪个节点。也是把存储从
宿主机挂载到k8s集群上,但它有许多限制,例如只支持单节点(Node),而且只支持
“ReadWriteOnce”模式
挂载卷