Kubernetes(K8s)_01_初识Kubernetes
Kubernetes(K8s)初识和资源管理
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 节点名
更多推荐
所有评论(0)