K8S重要技术内容主要涵盖:集群架构、容器化应用部署、ScaleUp/Down、滚动更新、监控检查、集群网络、数据管理、监控与日志
一、基础名词
1.Cluster
Cluster是计算、存储、网络资源的集合,利用资源运行各种基于容器的应用
2.Master
Master是Cluster的核心,负责调度、控制。
高可用版本,一般至少两个Master
3.Node
Node负责运行容器应用
由Master管理,Node负责监控和汇报容器状态
根据Master的要求管理容器的生命周期
4.Pod
Pod是K8S最小的工作单元,一个Pod会包含一个或多个容器Container
Pod中的1个或多个容器会被Master调度到一个Node上面运行
Pod的特点:
1)可管理性
K8S中,Pod以最小的单元进行调度、扩展、共享资源、管理生命周期
2)通信和资源共享
同一个Pod中的容器,网络共享(拥有相同的IP和Port)、网络互通(等同于本地访问)、存储共享(等同于本地访问)
Pod的两种使用方式
1)运行单一容器
one container per pod 模式,是K8S最常见的模式,k8s通过管理Pod来管理容器
2)运行多个容器
联系十分紧密的两个容器,可以编排于同一个Pod中,他们资源和通信共享,两个容器的服务一起启动、一起停止
5.Controller 运行容器
K8S通过Controller管理Pod,Controller中定义Pod的部署特性
1)Deployment
最为常见的Pod的部署方式,可以管理多Pod副本
2)ReplicaSet
实现Pod的多副本管理,通常使用Deployment创建Pod的时候会自动创建ReplicaSet,通过ReplicaSet来管理Pod,通常不直接创建ReplicaSet
3)DaemonSet
用在一个Node只运行一个Pod副本的情况,守护进程
4)StatefulSet
能够保证Pod的每个副本在整个生命周期中的名称是不变的,不因重启而变化,其他Controller不具备这样的特点
5)Job
用于运行结束就删除的应用,其他Controller会长期运行
6.Service 访问容器
Pod间通过IP通信,但是Pod的重启都会导致IP变化,为了能够正常通信,就要依靠Service
Service定义了一组外部访问Pod的方式,Service有自己的Ip和端口,为Pod提供负载均衡
7.Namespace
Namespace可以将一个物理Cluster划分为多个虚拟Cluster,资源完全隔离
K8S默认的Namespace为
- kube-system 存放默认系统所需资源
- default 默认创建资源被分配的空间
二、如何搭建一个K8S集群
1.所有节点安装Docker环境
2.安装 kubelet kubeadm kubectl
在Cluster节点上,安装kubelet,负责启动Pod和容器
在Cluster节点上,安装Kubeadm,负责初始化Cluster
在所有节点上,安装kubectl,负责部署和管理应用,查看各种资源,创建、删除、更新组件
3.kubeadm 初始化Cluster
1) 初始化Master
kubeadm init --apiserver-adverties-address= --pod-network-cidr=
- kubeadm 执行初始化前检查
- 生成token和证书
- 生成kubeConfig配置文件,kubelet使用这个文件和Master通信
- 安装Master组件,下载Docker镜像
- 安装kube-proxy和kube-dns组件
- 安装kubectl
- 安装Pod网络环境,尝试使用Flannel作为基础网络架构
- 向Cluster注册节点,单独Master和Node节点,将Node注册到Master
kubectl join --token ip:port
token可以通过 kubeadm token list 进行查看
kubectl get nodes 确认 Node节点加入成功
2)查看Pod具体状态
kubectl get pod --all-namespaces
Pod状态:
- Pending 未就绪
- ContainerCreating 未就绪
- ImagePullBackOff 未就绪
- Running 就绪
3)查看Pod启动具体日志文章来源:https://www.uudwc.com/A/9d6eO/
kubectl describe pod [podname]文章来源地址https://www.uudwc.com/A/9d6eO/