1.概念

  1. 1.什么是k8s?
  2. k8s是一组服务器集群
  3. k8s所管理的集群节点上的容器
  4. ----
  5. 2.k8s的功能
  6. 自我修复
  7. 弹性伸缩:实时根据服务器的并发情况,增加或缩减容器数量
  8. 自动部署:
  9. 回滚:
  10. 服务发现和负载均衡
  11. 机密和配置共享管理
  12. 3.k8s集群分为两类节点
  13. master node:主
  14. worker node:工作
  15. 4.podpodk8s最小部署单元,一个pod中可以有一个或者多个容器一组容器,pod又称为容器组
  16. 5.Controllers:控制器,控制pod,启动、停止、删除
  17. ReplicaSet
  18. Deployment
  19. StatefulSet
  20. DaemonSet
  21. Job
  22. Cronjob
  23. 6.service:将一组pod关联起来,提供一个统一的入口,即使pod地址发生改变,这个统一入口也不会变化,可以保证用户访问不受影响。
  24. 7.label:标签。一组pod是一个统一的标签,service是通过标签和一组pod进行关联的
  25. 8.namespace:名称空间。环境隔离用。

2.架构

001.png

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.常用命令

    ```shell

    1.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 打印客户端和服务版本信息