1.概念
1.什么是k8s?k8s是一组服务器集群k8s所管理的集群节点上的容器----2.k8s的功能自我修复弹性伸缩:实时根据服务器的并发情况,增加或缩减容器数量自动部署:回滚:服务发现和负载均衡机密和配置共享管理3.k8s集群分为两类节点master node:主worker node:工作4.pod:pod是k8s最小部署单元,一个pod中可以有一个或者多个容器一组容器,pod又称为容器组5.Controllers:控制器,控制pod,启动、停止、删除ReplicaSetDeploymentStatefulSetDaemonSetJobCronjob6.service:将一组pod关联起来,提供一个统一的入口,即使pod地址发生改变,这个统一入口也不会变化,可以保证用户访问不受影响。7.label:标签。一组pod是一个统一的标签,service是通过标签和一组pod进行关联的8.namespace:名称空间。环境隔离用。
2.架构
master节点组件:
- kube-apiserver :Kubernetes API,集群的统一入口,各组件协调者,以 RESTful API提供接口服务,所有对象资源的增删改查和监听 操作都交给APIServer处理后再提交给Etcd存储。即接受客户端操作k8s的指令
- kube-controller-manager :处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。 即控制器,控制pod,启动、停止、删除
- kube-scheduler :根据调度算法为新创建的Pod选择一个Node节点,可以任意 部署,可以部署在同一个节点上,也可以部署在不同的节点上。
etcd :分布式键值存储系统。用于保存集群状态数据,比如Pod、 Service等对象信息 。即k8s的数据库,用来注册节点、服务、记录账户….
node节点组件 :
Kubelet:kubelet是Master在Node节点上的Agent,管理本机运行容器 的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获 取容器和节点状态等工作。kubelet将每个Pod转换成一组容器。
- kube-proxy: 在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作 。
- docker或rocket: 容器引擎,运行容器 。
架构流程解释:
#以启动一个nginx容器为例,说明k8s各个组件的关系 1.通过kubectl向Api Server发送启动nginx的pod命令。 2.API Server会先到etcd数据库校验该节点是否有权限操作该命。 3.API Server将请求发送给scheduler。 4.scheduler需要找一个合适的节点,但是再此之前,需要先取etcd数据库查询各个节点的ip地址。 5.获取到各个节点信息以后,scheduler会通过选举算法选出来一个合适的节点返回给API Server 6.API Server再告诉controller去哪个节点创建容器,controller操作该节点的kubelet组件。 7.kubectl再去启动docker容器。 8.kubectl-proxy提供网络服务。3.常用命令
```shell1.get命令,分别查询pod、deployment、cm、svc。
kubectl get po|grep pod名 kubectl get deployment kubectl get cm kubectl get svc
2.edit
kubectl edit cm cm名 kubectl edit deployment deployment名 kubectl edit service/svc service名
3.进入pod
kubectl exec -it pod名 bash
4.创建deployment/cm
kubectl create/apply -f cm文件.yaml kubectl create/apply -f deployment文件.yaml
5.describe查看pod状态
kubectl describe po pod名
6.查看日志
kubectl logs -f pod名|grep
7.备份yaml
kubectl get svc【NAME】 -o yaml kubectl get pod【NAME】 -o yaml … ```
附:kubectl命令行管理工具:
| 类型 | 命令 | 描述 |
|---|---|---|
| 基础命令 | create | 通过文件名或标准输入创建资源 |
| expose | 将一个资源公开为一个新的Service | |
| run | 在集群中运行一个特定的镜像 | |
| set | 在对象上设置特定的功能 | |
| get | 显示一个或多个资源 | |
| explain | 文档参考资料 | |
| edit | 使用默认的编辑器编辑一个资源。 | |
| delete | 通过文件名、标准输入、资源名称或标签选择器来删除资源。 | |
| 部署命令 | rollout | 管理资源的发布 |
| rolling-update | 对给定的复制控制器滚动更新 | |
| scale | 扩容或缩容Pod数量,Deployment、ReplicaSet、RC或Job | |
| autoscale | 创建一个自动选择扩容或缩容并设置Pod数量 | |
| 集群管理命令 | certificate | 修改证书资源 |
| cluster-info | 显示集群信息 | |
| top | 显示资源(CPU/Memory/Storage)使用。需要Heapster运行 | |
| cordon | 标记节点不可调度 | |
| uncordon | 标记节点可调度 | |
| drain | 驱逐节点上的应用,准备下线维护 | |
| taint | 修改节点taint标记 |
| 类型 | 命令 | 描述 |
|---|---|---|
| 故障诊断和调试 命令 | describe | 显示特定资源或资源组的详细信息 |
| logs | 在一个Pod中打印一个容器日志。如果Pod只有一个容器,容器名称是 可选的 | |
| attach | 附加到一个运行的容器 | |
| exec | 执行命令到容器 | |
| port-forward | 转发一个或多个本地端口到一个pod | |
| proxy | 运行一个proxy到Kubernetes API server | |
| cp | 拷贝文件或目录到容器中 | |
| auth | 检查授权 | |
| 高级命令 | apply | 通过文件名或标准输入对资源应用配置 |
| patch | 使用补丁修改、更新资源的字段 | |
| replace | 通过文件名或标准输入替换一个资源 | |
| convert | 不同的API版本之间转换配置文件 | |
| 设置命令 | label | 更新资源上的标签 |
| annotate | 更新资源上的注释 | |
| completion | 用于实现kubectl工具自动补全 | |
| 其他命令 | api-versions | 打印受支持的API版本 |
| config | 修改kubeconfig文件(用于访问API,比如配置认证信息) | |
| help | 所有命令帮助 | |
| plugin | 运行一个命令行插件 | |
| version | 打印客户端和服务版本信息 |
