Kubernetes(K8s)_01_初识Kubernetes

@

Kubernetes

Kubernetes(K8s):部署和管理多个主机上的容器化应用(开源)

1)抽象了数据中心的硬件基础设施,使得对外暴露的仅是一个资源池;

2)由多个组件组成,组件之间可相互察觉(实现相互通信)


Kubernetes整个系统由一个Master节点和若干个Node节点组成

1)管理员将应用列表提交至Master节点;

2)Kubernetes会自动将应用部署到对于的Node节点


如:Kubernetes系统工作简化流程
在这里插入图片描述

1)应用描述:应用程序的容器基于的镜像和如何相互关联等信息


Master节点相关端口:

端口范围 协议 方向 作用 使用者
6443 TCP 入站 Kubernetes API服务器 所有组件
2379~2380 TCP 入站 Etcd服务器客户端API kube-apiserver、 Etcd
10250 TCP 入站 KubeletAPI kubelet、 Master节点组件
10251 TCP 入站 kube-scheduler kube-scheduler
10252 TCP 入站 kube-controller-manager kube-controller-manager

Node节点相关端口:

端口范围 协议 方向 作用 使用者
10250 TCP 入站 Kubelet Api kubelet、 Master节点组件
30000~32767 TCP 入站 Node节点的服务 Node节点组件

概念

应用区分

单体应用:把一个系统所涉及的各个组件都打包成一个一体化结构

1)改动其中一个组件,其他所有组件均需做出变动


单体应用的服务器扩展的两种方式:

1)垂直扩展:增加硬件资源或提高硬件性能(CPU、内存和磁盘等);

缺点:成本越来越高,且硬件具有性能瓶颈


2)水平扩展:添加应用运行的数量(负载均衡)

缺点:需对代码做较大的改动


微服务:将单体应用分解成小的、可独立运行的组件

1)微服务彼此之间解耦,可被独立开发、部署、升级和伸缩

2)每个微服务以独立的进程运行,通过API与其他服务器进行通信

3)扩展方式:针对运行单个微服务的服务器进行资源升级或服务扩容


如:单个微服务可在多个主机上进行扩容
在这里插入图片描述


如:单体应用和微服务化应用的比较
在这里插入图片描述
//金丝雀发布:先只让一小部分用户体验新版本,以观察新版本的表现,随后再向所有用户发布新版本,防止有问题的版本暴露给太多用户

容器技术

容器技术:将单个操作系统的资源划分到各个孤立组中,隔离孤立组之间的资源

1)实现同一台机器上运行多个服务,且服务的资源相互隔离;

2)容器内运行的进程实际上运行在宿主机的系统上(与其他进程隔离);


如:虚拟机和容器隔离应用程序的比较
在这里插入图片描述
1)虚拟机中的应用程序通过内核调用虚拟CPU,虚拟CPU通过管理程序再调用宿主机的CPU执行对应的指令;

2)容器中的应用程序直接通过宿主机的内容调用CPU执行指令;


容器技术实现隔离所依赖的2个机制:

(1)Linux命名空间(namespace):每个进程仅能看到自己的系统视图;

1)系统视图如:文件、进程、网络接口和主机名等;

2)Linux系统默认仅有一个命名空间,且所有系统资源均属于该命名空间;

3)可自定义命名空间,并指定该命名空间的系统资源;

4)单个进程可属于多个命名空间(属于每个类型的命令空间)

//有以下6种类型的命名空间:Mount(mnt)、Process IP(pid)、Network(net)、

Inter-process communication(ipc)、UTS、User ID(user)


(2)Linux控制组(cgroups):限制进程能使用的资源量

1)资源量如:CPU、内存和网络带宽等

2)cgroups属于Linux内核功能


镜像:包含了应用程序和其所依赖的环境的文件;

镜像仓库:存储镜像的服务器

容器:根据镜像格式进行标准操作后的一个运行环境


如:从构建镜像到服务器根据镜像运行容器的流程
在这里插入图片描述

Kubernetes集群

Kubernetes集群都多个节点组成,分为以下两种:

1)Master节点(主节点):承载Kubernetes控制和管理集群系统的控制面板;

2)Node节点(工作节点):运行管理员实际部署的应用;

//Master节点不会运行部署的应用


如:Kubernetes集群的组成
在这里插入图片描述


(1)Master节点可理解为集群的控制面板,由多个组件组成

//组件可运行在单个Master节点上或通过副本部署多个Master节点(高可用性);

1)API Server:通过该组件和其他组件通信;

2)Etcd:可靠的分布式数据存储(持久化存储集群配置)

3)Scheduler:调度应用(分配到指定的Node节点);

4)Controller Manager:执行集群级别的功能(复制组件和跟踪Node节点等)


(2)Node节点可理解为运行容器化应用的机器;

1)运行的容器:可为Docker、rtk或其他容器类型;

2)Kubelet:通过该组件和API服务器通信,管理所在节点的容器;

3)kube-proxy:负责组件之间的负载均衡网络流量


Kubernetes集群中部署应用的流程:

1)将应用打包成1个或多个容器镜像;

2)将镜像推送至镜像仓库;

3)将应用的描述发至Kubernetes API服务器;

4)API服务器根据应用的描述和Scheduler配置分配应用到适应的Node节点;

5)再由Node节点的Kubelet控制每个应用的副本数量


如:应用程序部署流程
在这里插入图片描述


Kubernetes集群的优点:

1)简化应用程序的部署流程:指定应用程序需在的特定的节点才可部署;

2)更好地利用硬件:不同应用程序组件可被混合,且紧密的打包到集群节点;

3)健康检查和自修复;Kubernetes会监控应用程序组件和运行其的节点,在出现故障时,自动将其重新调度到其他正常节点;

4)自动扩缩容;不断调整每个应用程序的运行数,以达到期望数;

5)简化应用部署;应用程序可通过API服务器以获取环境变量和其他信息;

Kubernetes集群的应用

每个节点均运行Docker、Kubelet和kube-proxy,所以管理员可通过kubectl命令和Master节点上的Kubernetes API服务器通信


如:管理员通过kubectl命令和API服务器通信
在这里插入图片描述

查看资源

cluster-info命令:列出Kubernetes集群的信息

指令格式:kubectl cluster-info


如:列出集群信息
在这里插入图片描述


get命令:列出集群中所含有的资源

指令格式:kubectl get 资源类型 选项

资源类型 说明
node 列出所有节点
po 列出所有Pod资源
ns 列出所有NameSpace资源
rc 列出所有ReplicationController资源
rs 列出所有ReplicaSet资源
ds 列出所有DaemonSet资源
job 列出所有Job资源
cronjob 列出所有CronJob资源
svc 列出所有Service资源
endpoints 列出所有endpoint资源
ingress 列出所有Ingress资源
pv 列出所有PersistentVolume资源
pvc 列出所有PersistenVolumeClaim资源
sc 列出所有StoreageClass资源
cm 列出所有ConfigMap资源
secret 列出所有Secret资源
deployment 列出所有Deployment资源
statefulset 列出所有StatefulSet资源
sa 列出所有ServiceAccount资源
role 列出所有Role资源
rolebinding 列出所有RoleBinding资源
clusterrole 列出所有ClusterRole资源
clusterrolebinding 列出所有ClusterRoleBinding资源

//若不指定命名空间,默认列出当前命名空间下的指定资源


选项 含义
-o wide 列出资源的更多信息列,如: IP、NODE、NOMINATED NODE、READINESS GATES
-o yaml 以YAML形式列出资源的定义文件
--show-labels 列出资源的标签 若没有任何标签,则显示“<none>”
--show-all 列出指定资源类型的所有资源(不论什么状态)
--sort-by 字段 根据指定字段对显示结果进行排序
-L 标签名 仅列出包含指定标签的资源,并列出标签
-l 条件方式 指定被列出资源的标签条件
-n 命名空间 列出指定命名空间下的资源
--all-namespaces 列出指定资源类型在所有命名空间下的资源
--watch 占用终端以显示最新的资源变更

如:列出Kubernetes集群中的所有节点
在这里插入图片描述


describe命令:列出指定资源的详细信息

指令格式:kubectl describe 资源类型 资源名

1)若不指定类型名,则默认显示该资源类型下的所有资源信息


如:列出master节点的详细信息
在这里插入图片描述


如:查询指定Pod的详细信息
在这里插入图片描述


top命令:列出指定资源类型的CPU和内存使用信息

指令格式:kubectl top 资源类型 选项

资源类型 说明
nodes 列出节点的相关信息
pods 列出Pod的相关信息

选项 含义
-n 命名空间 列出指定命名空间的
--all-namespaces 列出所有命名空间的

//该命令需Kubernetes集群中配置Metrics Server组件

控制容器

run命令:指定一个容器进行创建

指令格式:kubectl run 容器名 选项

选项 含义
--image=镜像名 指定创建容器的基础镜像
--port=暴露端口 指定容器暴露端口
--generator=控制器 指定Pod的控制器类型
--restart=策略 重启策略
--rm 容器在退出后自动删除
-l 标签名=值 指定Pod的标签

1)同时会创建一个Pod(Kubernetes不会单独创建和管理容器)

2)直接在容器中执行命令格式:-- sh -c “命令”


如:run命令流程
在这里插入图片描述


如:创建一个容器

1)创建kubia容器,并指定Pod控制器为ReplicationController和相关配置;
在这里插入图片描述
//成功创建前的提示:ReplicationController未来将会被删除,可使用其他代替

2)列出承载该容器的Pod的状态;
在这里插入图片描述
//在Node节点正在创建容器时,为未就绪状态

3)通过describe命令查看Pod内创建容器的详细信息
在这里插入图片描述
//指明了该Pod被分配到node2主机上(Node节点)


expose命令:创建服务,实现外部可访问集群Pod

指令格式:kubectl expose 资源类型 资源名 选项

选项 含义
--type=服务类型 指定服务类型
--name 服务名 指定服务名
--prot=端口 指定节点端口
--target-port=端口 指定容器端口

1)默认情况下,仅集群内部可访问Pod的IP地址;


如:续上,创建服务实现外部可访问

1)创建LoadBalancer类型的服务,服务名为kubia-http
在这里插入图片描述
2)验证
在这里插入图片描述


scale命令:指定控制器的Pod进行扩缩容

指令格式:kubectl scale 控制器类型 控制器名 --replicas=期望值


如:续上,kubia所管理的Pod扩容至3个,并验证

1)指定期望值进行扩容
在这里插入图片描述
2)查询各个Pod的IP,进行验证
在这里插入图片描述


logs命令:列出Pod内的容器日志数据

指令格式:kubectl logs Pod名称 选项

选项 含义
-c 容器名 列出指定容器的日志
--previous 列出上一个同名容器的日志 默认列出当前同名容器的日志

1)若无选项,则默认列出Pod中所有容器的日志数据;

2)每天或每次日志文件达到10MB时,容器日志会自动轮替;

3)当Pod被删除时,其日志自动也被删除;


exec命令:调用指定Pod内的容器执行命令(重启一个进程)

指令格式:kubectl exec 选项 Pod名 -- 命令

选项 含义
-i 以Stdin打开
-t 分配一个为输入端

//-i和-t一起使用才具有意义(分配进入容器的一个终端)


attach命令:调用指定Pod内的容器执行命令(附属在主进程)

指令格式:kubectl attach 选项 Pod名 -- 命令

选项 含义
-i 以Stdin打开
-t 分配一个为输入端

//-i和-t一起使用才具有意义(分配进入容器的一个终端)

控制资源

create命令:创建Kubernetes集群的资源

指令格式:kubectl create 选项

选项 含义
-f 文件路径 指定YAML或JSON文件路径
-n 命名空间名称 指定该资源所属的命名空间
namespace 名称 创建指定名称的命名空间
--record 记录历史版本号
--user 用户名 指定执行该命令的用户

Kubernetes资源创建流程:

1)向Kuberntes REST API服务器提供JSON或YAML描述文件;

2)通过create命令创建yaml定义的资源


delete命令:删除Kubernetes集群的指定资源

指令格式:kubectl delete 资源类型 选项

选项 含义
资源名 删除指定资源类型的单个资源
-l 条件方式 删除指定资源类型满足条件方式的资源
--all 删除该资源类型的所有资源
--force 强制删除
--grace-period 数值 删除时的等待时间

1)资源类型若为“all”,则代表所有资源类型


explain命令:列出创建指定资源类型的YAML文件的帮助文档

指令格式:kubectl explain 资源类型

1)“资源类型.字段名”可查看指定资源类型的字段帮助文档


如:列出创建Pod的YAML帮助文档

1)列出创建Pod的YAML文件中所需的字段;
在这里插入图片描述
2)列出指定字段的详细信息
在这里插入图片描述


edit命令:编辑已生成资源的配置文件(操作方式等同Vim)

指令格式:kubectl edit 资源类型 资源名

1)不可修改Role、RoleBinding、ClusterRole和ClusterRoleBinding

//防止权限扩散


apply命令:通过YAML或JSON文件,更新指定文件

指令格式:kubectl apply -f 文件路径

1)若指定的文件不存在,则建立该文件


replace命令:通过YAML或JSON文件,替换指定文件

指令格式:kubectl replace -f 文件路径


set image命令:修改Pod模板中的镜像

指令格式:kubectl set image 资源类型 资源名 容器名=镜像


cordon命令:将节点标记为不可调度(保留该节点的Pod)

指令格式:kubectl cordon 节点名


drain命令:将节点标记为不可调度(并驱逐该节点的Pod)

指令格式:kubectl drain 节点名


uncordon命令:将节点标记为可调度

指令格式:kubectl uncordon 节点名

posted @ 2022-02-13 22:14  爱和可乐的w  阅读(206)  评论(0编辑  收藏  举报