kubernets基础入门
首先通过Kubernets架构图来认识Kubernets各个功能组件之间是怎么相互关联配合工作的。
一、Kubernets架构图:
通过上图来介绍集群功能组件通信详细过程:
kubernetes api server 作为集群的核心,负责集群各功能模块之间的通信。集群内的各个功能模块通过API SERVER 将信息存入到etcd数据库中,同样想要获取和操作这些数据时,也是通过API SERVER的REST接口(GET、LIST、WATCH)来实现,从而实现各模块之间的交互。
-
kubelet --> api server 如上图每个node节点每隔一个时间周期,就会调用一次API SERVER的REST接口来报告自身的状态,API SERVER 接收到这些信息之后,将节点信息更新到etcd数据库中。并且kubelet 还通过API SERVER 的WATCH接口监听Pod信息,如果监听到新的Pod副本被调用绑定到本节点,则执行pod对应的容器的创建与启动;如果监听到Pod的删除操作,则删除本节点相应的Pod容器;如果检测到修改操作,则kubelet会相应的修改本节点的Pod的容器。
-
kube controller manager -- > api server 如上图 kube controller manager 中的node controller模块通过API SERVER模块提供的WATCH接口,实时监控node信息,并做相应的处理。
- schdeuler --> api server 当scheduler 通过api server 的WATCH接口监听到新建Pod副本的信息后,它会检索所有符合该Pod要求的node列表,开始执行Pod调度逻辑,调度成功后将Pod绑定到目标节点上。
主节点主要包含以下组件:
kubectl 是一个客户端的管理工具,直接管理API server,提供一个请求到一个api server,中间有一个auth认证(判断是否有权限访问),api 将信息存储到etcd数据库中,然后scheduler和controller-manager做各自的事情。
- API Server(k8s 提供的整个集群统一入口,提供了http RESTFUl api 的方式)
- scheduler :做集群节点的调度(调度器,根据调度算法绑定到指定的node上)
- contorller-manager: 负责任务(控制器)(另外一种解释:维持副本期望数目)
- etcd:键值对数据库,存储k8s集群的所有重要信息(存储的是持久化的数据)
Node节点包含以下组件:
- kubelet:直接跟docker(容器引擎)进行交互实现容器的生命周期管理。
- kube-proxy:负责写入规则至iptables,IPVS实现服务映射访问。
还有其他可添加组件说明:
- CoreDNS:可以为集群中的SVC创建一个域名ip的对应关系解析。(实现负载均衡的其中一项功能)
- Dashboard:给k8s集群提供一个B/S结构访问体系。
- ingress controller:官方只能提供四层代理,ingress提供七层代理。
- Federation:可以提供一个跨集群多k8s的统一管理功能。
- Prometheus:提供一个k8s集群监控平台。
- ELK:提供k8s一个日志分析平台。
二、资源管理方式
2.1概述
1.命令式对象管理:直接通过命令的方式去操作kuberntes的资源
kubectl run nginx-pod --image=nginx:1.17.1 --port=80
2.命令式对象配置:通过命令配置和配置文件去操作 Kubernetes 的资源。
kubectl create/patch/delete -f nginx-pod.yaml
3.声明式对象配置:通过 apply 命令和配置文件去操作 Kubernetes 的资源。
kubectl apply -f nginx-pod.yaml
2.2命令式对象管理
2.2.1 kubectl 命令
- kubectl 是 Kubernetes 集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装和部署。
- kubectl 命令的语法如下:
kubectl [command] [type] [name] [flags]
参数:
command:指定要对资源执行的操作,如:create、get 、delete 等。
type:指定资源的类型,如:deployment 、pod 、service 等。
name:指定资源的名称,名称大小写敏感。
flags:指定额外的可选参数。
2.2.2 常用命令
1.基本命令
命令 | 翻译 | 命令作用 |
create | 创建 | 创建一个资源 |
edit | 编译 | 编辑一个资源 |
get | 获取 | 获取一个资源 |
patch | 更新 | 更新一个资源 |
delete | 删除 | 删除一个资源 |
explain | 解释 | 展示资源信息 |
2.运行与调试
命令 | 翻译 | 命令作用 |
run | 运行 | 在集群中运行一个指定镜像 |
expose | 暴露 | 暴露资源为Service |
describe | 描述 | 显示内部资源详细信息 |
logs | 日志 | 输入容器在Pod的日志 |
attach | 缠绕 | 进入运行中的容器 |
exec | 执行 | 执行容器中的一个命令 |
cp | 复制 | 在Pod内外复制文件 |
rollout | 首次展示 | 管理资源的发布 |
scale | 规模 | 扩缩容Pod的数量 |
autoscale | 自动调整 | 自动调整Pod的数量 |
3.高级命令
命令 | 翻译 | 命令作用 |
apply | 应用 | 通过对文件对资源进行配置 |
label | 标签 | 更新资源上的标签 |
4.其他命令
命令 | 翻译 | 命令作用 |
cluster-info | 集群信息 | 显示集群信息 |
version | 版本 | 显示当前Client与Server的版本 |
2.2.3资源类型
Kubernetes 中所有的内容都抽象为资源,可以通过下面的命令进行查看:
kubectl api-resources
经常使用资源类型:
资源名称 | 缩写 | 资源作用 |
nodes | no | 集群组成部分 |
namespaces | ns | 隔离Pod |
Pods | po | 加载容器 |
replicationcontrollers | rc | 控制Pod资源控制器 |
replicasets | rs | 控制Pod资源控制器 |
deployments | deploy | 控制Pod资源控制器 |
daemonsets | ds | 控制Pod资源控制器 |
jobs | 控制Pod资源控制器 | |
cronjobs | cj | 控制Pod资源控制器 |
horizontalpodautoscalers | hpa | 控制Pod资源控制器 |
statefulsets | sts | 控制Pod资源控制器 |
services | svc | 统一Pod对外接口 |
ingress | ing | 统一Pod对外接口 |
persistentvolumeclaims | pvc | 存储 |
persistentvolumes | pv | 存储 |
volumeattachments | 存储 | |
configmaps | cm | 配置 |
secrets | 配置 |
2.3 命令式对象配置
命令式对象配置就是通过命令配置和配置文件去操作 Kubernetes 的资源。
命令式对象配置的方式操作资源,可以简单的认为:命令 + yaml 配置文件(里面是命令需要的各种参数)。
比如创建一个nginx-pod.yaml文件,如下:
apiVersion: v1
kind: Namespace
metadata:
name: dev
---
apiVersion: v1
kind: Pod
metadata:
name: nginxpod
namespace: dev
spec:
containers:
- name: nginx-containers
image: nginx:1.17.1
- 执行 create 命令,创建资源:
kubectl create -f nginxpod.yaml
- 执行 get 命令,查看资源:
kubectl get -f nginxpod.yaml
- 执行 delete 命令,删除资源:
kubectl delete -f nginxpod.yaml
2.4 声明式对象配置
声明式对象配置:通过 apply 命令和配置文件去操作 Kubernetes 的资源。
声明式对象配置和命令式对象配置类似,只不过它只有一个 apply 命令。
apply 命令相当于 create 命令和 patch 命令。
比如创建一个nginx-pod.yaml文件,如下:
apiVersion: v1
kind: Namespace
metadata:
name: dev
---
apiVersion: v1
kind: Pod
metadata:
name: nginxpod
namespace: dev
spec:
containers:
- name: nginx-containers
image: nginx:1.17.1
- 执行 apply 命令:
kubectl apply -f nginxpod.yaml
2.5 总结
创建和更新资源使用声明式对象配置:kubectl apply -f xxx.yaml。
删除资源使用命令式对象配置:kubectl delete -f xxx.yaml。
查询资源使用命令式对象管理:kubectl get(describe) 资源名称。