K8s集群组件、flannel网络插件、Pod详解
K8S详解
文章目录
Kubernetes
1.K8S集群架构
- master(管理节点)
- node (计算节点)
- image (镜像仓库)
2.角色与功能
master功能:
- 提供集群的控制
- 对集群进行全局决策
- 检测和响应集群事件
master节点核心组件:
- APIAServer:整个系统的对外接口,供客户端和其它组件调用,后端元数据存储到etcd中
- Scheduler:负责对内部资源进行分配和调度
- ControllerManager:负责管理控制器,相当于"大总管"
- etcd:分布式键值数据库(key-value),K8S运行过程中产生的元数据全部存储在etcd中在·
node功能:
- 运行容器的实际节点
- 提供运行环境
- 在多个节点运行
- 水平扩展
node核心组件:
- kubelet:负责监视Pod,包括创建、修改、删除等
- kube-proxy:负责对Pod对象提供代理,实现service的通信与负载均衡
- RunTime:容器管理(Docker)
镜像仓库:
- 存储镜像
- 为计算节点提供镜像支持
仓库组件:
- Registry
- Harbor
3.部署环境要求
Master
- 内核版本 >=3.10
- 最低配置 2CPU,4G内存
- 节点中不可有重复的主机名、MAC地址、UUID
- 卸载防火墙
- 禁用 swap
- 禁用 selinux
Node
- 卸载防火墙
- 禁用 swap、selinux
- 配置yum仓库,安装kubeadm、kubelet、docker-ce、ipvsadm、ipset
- 配置docker私有镜像仓库和cgroup驱动
- 配置master主机环境/etc/hosts
- 配置内核参数
4.flannel插件
flannel是什么
flannel实际上是一种"覆盖网络"(overlay network),也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VxLAN、AWS、VPC、GCE等数据转发方式
目的
进行路由转发,使不同主机内的容器实现互联互通
5.Pod
什么是Pod?
Pod可以由一个或多个容器组成(装容器的盒子)
Pod是kubernetes中最小的管理元素
Pod是一个服务多个进程的聚合单位
同一个Pod共享网络IP及权限、共享主机名称、共享存储设备
为什么要使用Pod?
容器服务之间有关联性
启动容器的时候需要初始化或进行相关配置
Pod的生命周期
Pod自创建开始至终止的时间范围称为生命周期
在这段时间内Pod处于多种不同状态,并执行相关操作
创建主容器为必须的操作,其它为可选操作(包括初始化容器、启动后钩子、存活性探测、就绪性探测、终止前钩子)
Pod的创建过程
pod是k8s的基础单元,以下为一个pod资源对象的典型创建过程:
1,用户通过kubectl或其他api客户端提交pod spec给api server;
2,api server尝试着将pod对象的相关信息存入etcd中,待写入操作执行完成,api server即会返回,确认信 息至客户端;
3,api server开始反映etcd中的状态变化;
4,所有的k8s组件均使用watch机制来跟踪检查api server上的相关变动;
5, kube-scheduler通过其watch觉察到api server创建了新的pod对象但尚未绑定至任何工作节点;
6,kube-scheduler为pod对象挑选一个工作节点并将结果信息更新至api server;
7, 调度结果信息由api server更新至etcd,而且api server也开始反映此pod对象的调度结果;
8,pod被调度到目标工作节点上的kubelet尝试在当前节点上调用docker启动容器,并将容器的结果状态回 送至api server;
9,api server将pod状态信息存入etcd中;
10,在etcd确认写入操作成功完成后,api server将确认信息发送至相关的kubelet。
Pod相位状态
Pending:容器创建中,但尚未调度完成
Running:所有容器都已经被kubelet创建完成
Succeeded:所有容器都已经终止了并不会被重启
Failed :Pod中的容器至少有个退出,或者是非0状态
Unknow:无法获取到Pod对象的状态信息
kubctl管理命令
集群信息查询
子命令 | 说明 |
---|---|
help | 用于查看命令及子命令的帮助信息 |
cluster-info | 显示集群的相关配置信息 |
version | 查看服务器及客户端的版本信息 |
api-resources | 查看当前服务器上所有的资源对象 |
api-versions | 查看当前服务器上所有资源对象的版本 |
config | 管理当前节点上kubeconfig 的认证信息 |
Pod管理命令
子命令 | 说明 | 备注 |
---|---|---|
run | 创建Pod资源对象 | 一般用来创建Pod模板 |
get | 查看资源对象的状态信息 | 可选参数: -o 显示格式 |
describe | 查询资源对象的属性信息 | |
logs | 查看容器的报错信息 | 可选参数: -c 容器名称 |
系统命名空间
default:默认的命名空间,不声明命名空间的Pod都在这里
kube-node-lease:为高可用提供心跳监测的命名空间
kube-public:公共数据,所有用户都可以读取它
kube-system:系统服务对象使用的名称空间
系统核心服务都运行在kube-system名称空间中
查看名称空间
kubectl get namespace
查看名称空间中的资源对象
kubectl -n kube-system get pods
Pod资源文件
资源文件管理命令
子命令 | 说明 | 备注 |
---|---|---|
exec | 在某一个容器内执行特定的命令 | 可选参数: -c 容器名称 |
cp | 在容器和宿主机之间拷贝文件或目录 | 可选参数: -c 容器名称 |
apply | (创建/更新)资源对象 | 可选参数: -f 文件名称 |
delete | 删除资源对象 | 可选参数: -f 文件名称 |
create | 创建资源对象 | 可选参数: -f 文件名称 |
[root@master ~]# vim myhttpd.yaml
--- #Yaml文件的起始标志
kind: Pod #当前创建资源的类型
apiVersion: v1 #当前资源对应的版本
metadata: #属性信息,元数据
name: myhttpd #属性信息,资源的名称
spec: #资源的特性描述(公约)
terminationGracePeriodSeconds: 0 #宽限期(删除Pod不会立即删除,会等业务执行完毕)
restartPolicy: Always #服务故障策略(Always、Never、OnFailure)默认Always
containers: #容器资源特征描述
- name: apache #容器的名称
image: myos:httpd #启动容器使用的镜像
stdin: true #启用交互式
tty: true #分配终端
imagePullPolicy: IfNotPresent #镜像下载策略(Always、Never、IfNotPresent($=0不重启))
ports: #容器使用的端口
- protocol: TCP #容器使用的协议
containerPort: 80 #端口号
静态Pod
什么是静态Pod?
静态Pod是由kubelet守护进程直接管理的Pod,不需要apiServer服务器监管,是在节点上直接创建
kubelet监视每个静态Pod,在它奔溃后重新启动
删除静态Pod只能从创建Pod的节点上删除,master上无法删除
静态Pod配置路径:/var/lib/kubelet/config.yaml
资源对象文件路径:/etc/kubernetes/manifests
自定义命令
更多推荐
所有评论(0)