minikube搭建
基本环境
- 我使用
virtualBox
构建的ubuntu
,选择4核4G内存
minikube
是一个K8S集群模拟器,可以快速构建一个单节点的集群,用于在本地测试和开发- 首先使用官方脚本安装
docker
curl -fsSL https://test.docker.com -o test-docker.sh
sudo sh test-docker.sh
然后参考官方文档安装minikube
安装好了以后启动minikube start
报错
- 我没有添加用户到
docker
中,执行sudo usermod -aG docker vboxuser && newgrp docker
之后再启动,注意这里要添加你的用户
- 目前看起来比较正常,安装好了以后安装
kubectl
,这是k8s的一种命令行工具,参考官网 - 然后
kubectl get services
可以获取当前服务 - 这样一个单节点集群就搭建好了
k8s
- k8s全称是kubernetes,因为k和s中间正好8个字符,所以简写为k8s
概念
- Cluster(集群),它是计算、存储和网络资源的集合,kubernetes利用这些资源运行各种基于容器的应用
- Master(主节点),它是Cluster的大脑,主要职责是调度,觉醒将应用放在哪里运行。Master运行linux操作系统,可以是物理机或者虚拟机,为了实现高可用,可以运行多个Master
- Node(节点),它的职责是运行容器应用,由主节点Master管理,Node负责监控并汇报容器的状态,同时根据Master的要求管理容器的生命周期,Node运行在Linux操作系统上,可以是虚拟机或者物理机
- Pod,它是kubernetes的最小工作单元,每个Pod包含一个或多个容器,Pod中的容器会作为一个整体被Master调度到一个Node上运行。Pod提供了比容器更高层次的抽象,将它们封装到一个部署单元中。Kubernetes以Pod为最小单位进行调度、扩展、共享资源、管理生命周期;Pod中的所有容器使用同一个网络namespace,即相同的IP地址和Port空间。它们可以直接用localhost通信,同样的,这些容器可以共享存储,当Kubernetes挂载volume到Pod,本质上是将volume挂载到Pod中的每一个容器。Pod中可能有一个或者多个容器,无论哪种情况,Kubernetes都是对Pod进行管理而非容器,如果想在一个Pod中部署多个容器,那么推荐是这些容器联系必须十分紧密,而且需要直接共享资源
- Controller,Kubernetes通常是通过Controller来管理Pod的。Controller中定义了Pod的部署特性,比如有几个副本、在什么样的Node上运行等,为了满足不同业务场景,Kubernetes提供了多种Controller,下面逐一介绍
(1) Deployment,这是最常用的Controller,它可以来管理Pod的多个副本,并确保Pod按照期望的状态运行
(2) ReplicaSet实现了Pod的多副本管理,使用Deployment时会自动创建ReplicaSet,也就是说Deployment是通过ReplicaSet来管理Pod的多个副本的,我们通常不需要直接使用ReplicaSet
(3) DaemonSet,用于每个Node最多只运行一个Pod副本的场景,通常用于运行daemon,也就是守护进程
(4) StatefuleSet,它能够保证Pod的每个副本在整个生命周期中名称不变,而其他Controller不提供这个功能。当某个Pod发生故障需要删除或者重新启动时,Pod的名称会发生变化,同时StatefuleSet会保证副本按照固定的顺序启动、更新或者删除
(5)Job用于运行结束就删除的应用,而其他Controller中的Pod通常是长期持续运行 - Service,外界通过Service访问Pod,因为Pod频繁的销毁或者重启会导致ip改变,而k8s的Service定义了外界访问一组特定Pod的方式。Service有自己的IP和端口,Service为这些Pod提供了负载均衡,k8s运行与访问Pod分别由Controller和Service执行
- Namespace,对于多个用户或者项目组使用同一个k8s Cluster,使用Namespace将他们创建的Controller、Pod等资源分开,Namespace可以将一个物理的Cluster逻辑上划分成多个虚拟Cluster,每个Cluster就是一个Namespace,不通的Namespace里的资源是完全隔离的,可以使用
kubectl get namespace
查看一下有哪些Namespace