Kubernetes

1.K8S集群架构

  • master(管理节点)
  • node (计算节点)
  • image (镜像仓库)

2.角色与功能

master功能:

  1. 提供集群的控制
  2. 对集群进行全局决策
  3. 检测和响应集群事件

master节点核心组件:

  • APIAServer:整个系统的对外接口,供客户端和其它组件调用,后端元数据存储到etcd中
  • Scheduler:负责对内部资源进行分配和调度
  • ControllerManager:负责管理控制器,相当于"大总管"
  • etcd:分布式键值数据库(key-value),K8S运行过程中产生的元数据全部存储在etcd中在·

node功能:

  1. 运行容器的实际节点
  2. 提供运行环境
  3. 在多个节点运行
  4. 水平扩展

node核心组件:

  • kubelet:负责监视Pod,包括创建、修改、删除等
  • kube-proxy:负责对Pod对象提供代理,实现service的通信与负载均衡
  • RunTime:容器管理(Docker)

镜像仓库:

  1. 存储镜像
  2. 为计算节点提供镜像支持

仓库组件:

  • 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

自定义命令

在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐