K8S学习笔记

docker -- 容器
k8s -- 编排容器的工具/平台

k8s进行管理应用的时候,基本步骤是:创建集群,部署应用,发布应用,扩展应用,更新应用。

可以通过Minikube 来练手
**
操作 Kubernetes 对象 —— 无论是创建、修改,或者删除 —— 需要使用 Kubernetes API。比如,当使用 kubectl 命令行接口时,CLI 会执行必要的 Kubernetes API 调用,也可以在程序中直接调用 Kubernetes API

k8s集群

image.png
 集群看起来很牛,那么创建起来很复杂么?并不会,在k8s只要使用两条指令就可以创建一个集群,一个是kubectl init进行初始化,创建一个master节点,第二条指令就是kubectl join xxx创建一个node节点,加入这个集群。
   在这边可以看到k8s在物理上进行划分的时候,划分了两种类型的主机,一个master节点,主要用来调度,控制集群的资源等功能;而node节点,主要是用来运行容器的节点,也就是运行服务的节点。
Master负责管理集群。Master协调集群中的所有活动,比如调度应用程序、维护应用程序所需的状态、扩展应用程序和推送新的更新。
在一个Kubernetes集群中,节点是一个虚拟机或物理机,它是作为worker存在的。每个节点都有一个Kubelet,它是一个代理,用于管理该节点和master之间的通信。生产环境中,Kubernetes集群应该至少有三个节点。

pod

image.png
在k8s里面,集群调度的最小单元就是一个pod,一个pod可以是一个容器,也可以是多个容器,例如你运行一个程序,其中使用了nginx,使用mysql了,使用了jetty,那么可以将这三个使用在同一个pod中,对他们提供统一的调配能力,一个pod只能运行在一个主机上,而一个主机上可以有多个pod。
其实实k8s本身不关心pod内部是什么类型容器,可以有多个容器在pod内启动(官方建议单一pod单一容器),pod内容器共享网络,共享存储,pod可以由控制器启动,控制器也就是k8s负责编排的组件之一,常见的有

  • Deployment,通过指定副本数量等属性,根据配置的pod模版,部署无状态的服务,能够提供强力的回滚,滚动更新等能力,这个也是最常用的一种;
  • Statefulset,有状态副本集,一般部署etcdelasticsearch等等这种有状态的服务,一般同时会挂载存储卷(也是k8s中定义的一种对象);
  • DeamonSet,守护进程集,一般指定节点部署一些服务,比如cpu监控等

node

image.png
一个 pod 总是运行在 node上。node是 Kubernetes 中的参与计算的机器,可以是虚拟机或物理计算机,具体取决于集群。每个工作节点由主节点管理。工作节点可以有多个 pod ,Kubernetes 主节点会自动处理在群集中的工作节点上调度 pod 。 主节点的自动调度考量了每个工作节点上的可用资源。
每个 Kubernetes 工作节点至少运行:

  • Kubelet,负责 Kubernetes 主节点和工作节点之间通信的过程; 它管理 Pod 和机器上运行的容器。
  • 容器运行时(如 Docker ,rkt )负责从仓库中提取容器镜像,解压缩容器以及运行应用程序。

如果它们紧耦合并且需要共享磁盘等资源,这些容器应在一个 Pod 中编排。

service

image.png
Kubernetes中的Service是一个抽象,它定义了一组逻辑Pods和访问它们的策略。Services支持有依赖关系的Pods之间的松散耦合。与所有Kubernetes对象一样,Service是使用YAML(首选)或JSON定义的。哪些Pods被选中用来组成一个Service通常是由标签选择器决定的。
尽管每个Pod都有唯一的IP地址,但是如果没有Service,这些IP不会暴露在集群之外。Service允许应用程序接收流量。通过在ServiceSpec中指定类型,可以以不同的方式公开服务:

  • ClusterIP (default) - 在集群中的内网IP上公开服务。这种类型使得服务只能从集群内部访问。
  • NodePort - 使用NAT在集群中每个选定节点的相同端口上公开服务。使用:从集群外部访问服务。
  • LoadBalancer - 在当前云中创建一个外部负载均衡器(如果支持),并为服务分配一个固定的外网IP。
  • ExternalName - 通过返回带有名称的CNAME记录,使用任意名称(在规范中由externalName指定)公开服务。

博客链接(强烈推荐):https://www.cnblogs.com/cjsblog/p/12050618.html
博客链接:https://blog.csdn.net/TM6zNf87MDG7Bo/article/details/79621510
博客链接:https://www.jianshu.com/p/72fed726191b
官方文档:https://kubernetes.io/zh/docs/tutorials/kubernetes-basics/deploy-app/

posted @ 2020-03-06 19:43  whendream  阅读(575)  评论(0编辑  收藏  举报