问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Kubernetes(k8s)基础学习:从容器到集群部署的完整指南

创作时间:
作者:
@小白创作中心

Kubernetes(k8s)基础学习:从容器到集群部署的完整指南

引用
CSDN
1.
https://blog.csdn.net/qq_34207422/article/details/138127977

Kubernetes(简称k8s)是目前最流行的容器编排工具,广泛应用于企业级容器化应用的部署和管理。本文将从容器基础概念开始,逐步介绍Kubernetes的核心概念、架构、部署方法以及常用组件的使用,适合Kubernetes初学者阅读。

一、容器相关

  1. 发展历程:主机–虚拟机–容器
  • 主机类似别墅的概念,一个地基上盖的房子只属于一个人家,很多房子会空出来,资源比较空闲浪费。
  • 虚拟机类似楼房,一个地基上盖的楼房住着很多人家,相对主机模式提升了资源利用率。
  • 容器类似租房的公寓,一个地基上盖的楼房,每一个房间属于一个人,相比虚拟机进一步提升了资源利用率。
  1. 虚拟机和容器的区别
  • 一个主机上可以有多个虚拟机,虚拟机部署需要借助主机上的Hypervisor(比如:VM软件)实现。每一个虚拟机包含(应用app+依赖库+操作系统)。
  • 一个主机上可以部署多个容器服务,容器服务依赖宿主机上安装Docker。每一个容器服务包含(应用app+依赖库)。
  • 相对而言,容器的空间更省,性能更高。

  1. 容器概念
  • 为了降低虚拟机造成的物理主机资源浪费,提高物理主机的资源利用率,并能够提供像虚拟机一样良好的应用程序隔离运行环境,人们把这种轻量级的虚拟机,称为“容器”。
  1. 容器管理工具
  • 容器管理工具类似于虚拟机管理工具,主要用于容器的创建、启动、关闭、删除等。
  • 常见的容器管理工具有:docker公司的docker、国内阿里公司的 Pouch、LXC、LXD、RKT等等。
  1. 容器编排工具
  • 容器管理工具可以完成容器的基础管理,对于完成企业中更加复杂的应用部署,如需要对多应用的系统进行部署时,就需要更加复杂的工具来完成对容器运行应用的编排,这就是我们所说的容器编排部署工具。
  • 概括:Docker是容器管理工具,可以实现简单的项目部署。Kubernetes是容器编排工具,可以实现更加复杂的应用部署。
  1. 常见容器编排工具
  • docker 三剑客
  • docker machine(部署和管理容器主机)
  • docker compose(通过yaml,快速部署多个应用)
  • docker swarm (容器编排工具,管理docker集群)
  • mesos + marathon(分布式管理主机)
  • kubernetes

二、Kubernetes

  1. 官网https://kubernetes.io/

  2. 开源托管平台https://github.com/kubernetes/

  3. 概念

  • Kubernetes是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务。通过Kubernetes能够进行应用的自动化部署和扩缩容。在Kubernetes中,会将组成应用的容器组合成一个逻辑单元以更易管理和发现。
  1. 功能
  • 自动装箱:基于容器对应用运行环境的资源配置要求自动部署应用容器
  • 自我修复(自愈能力)
  • 当容器失败时,会对容器进行重启
  • 当所部署的Node节点有问题时,会对容器进行重新部署和重新调度
  • 当容器未通过监控检查时,会关闭此容器
  • 直到容器正常运行时,才会对外提供服务
  • 水平扩展:通过简单的命令、用户UI界面或基于CPU等资源使用情况,对应用容器进行规模扩大或规模剪裁
  • 服务发现:用户不需要使用额外的服务发现机制,就能够基于Kubernetes自身能力实现服务发现和负载均衡
  • 滚动更新:可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新
  • 版本回退:可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退
  • 密钥和配置管理:在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。
  • 存储编排
  • 自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要
  • 存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph、Cinder等)、公共云存储服务等
  1. 对node和pod的支持
  • Node(节点)数支持:早期版本管理100台,现版本可以管理2000台
  • pod管理支持:早期版本管理1000个,现版本管理150000个

三、k8s架构

  1. 应用部署架构分类
  • 无中心节点架构(该架构中,所有的节点都是平等关系):GlusterFS
  • 有中心节点架构(该架构中,存在核心节点负责管理和调度其他节点):HDFS、K8S
  1. k8s架构
  • Master Node:k8s集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求;
  • Master Node由API Server、Scheduler、Cluster State Store(ETCD数据库)和Controller Manger Server所组成;
  • Worker Node集群工作节点,运行用户业务应用容器
  • Worker Node包含kubelet、kube proxy和Container Runtime;

  1. 运行流程
  • K8s分为两个大部分,master节点和worker节点
  • 用户通过命令或者界面操作调用到matser节点的api service。Api service会根据请求的类型和业务去调度相应的worker进行工作,此外包括定时任务可以和apiservice通信,数据持久保存等也是通过apiserver实现。

四、集群部署

  1. 部署方式
  • 使用二进制源码包部署(困难,复杂,不推荐)
  • 使用kubeadm部署(推荐)
  1. 具体部署过程:相对还是挺麻烦的,这里就略过了,最终结果为1个master节点,2个worker节点
  • 注意:生产环境为了保证高可用,matser节点需要部署集群,1个节点肯定不够用。

五、Kubectl客户端

  1. 概述:在部署完成k8s集群后,我们需要通过一系列的命令来管理k8s集群。kubectl是一个管理k8s集群的客户端。可以通过命令行工具来使用k8s集群。

  2. 查看是否安装rpm -qa | grep kubectl

  • 如果没有安装的话,说明前面部署的集群还是不完善的,自己通过yum intsall的方式网上找一下部署吧
  1. 常用命令

  2. 使用实例

  • 查看k8s集群的节点node(机器)信息和pod信息
  • pods是归属在指定的命名空间中的,可以指定-n 查看指定命名空间的pod信息

六、yaml

  1. 格式:格式和springboot的yaml配置文件格式一致

  2. 作用:通过yaml文件配置部署信息,可以快速部署应用,namespace,service等,可以大大加快部署效率

  3. 使用实例

  • 语法还是挺多的,套路的方式比较深,需要的时候建议直接网上百度找一个比较好,没必要背下来那么多东西。
  • 创建一个namespace
  • 创建一个pod

七、namespace

  1. 概述:通常开发会有很多项目,也会有很多环境(开发,测试,预生产环境)等,当机器足够的话,可以在不同的机器进行部署不同的项目已经环境,但是如果机器不足的话,可以使用k8s集群的命名空间(namespace)来实现开发测试环境的隔离。

  2. 作用:在多租户的情况下,实现资源隔离,可以对每一个命名空间做资源分配,不同命名空间下的资源互相隔离

  3. 常用指令

  • 查看命名空间
  • 创建命名空间
  • 命令行方式
  • yaml方式创建
  • 编写yaml文件,执行yaml文件
  • 删除命名空间
  • 命令行方式
  • 通过yaml方式删除命名空间(yaml文件和创建用同一个文件)

八、pod

  1. 概述:pod是k8s集群的最小运行单元,是容器的封装。
  • 可以理解pod就是一个容器的壳子,docker部署的容器服务是一粒花生米,pod是容器外部的花生壳。pod包裹着docker部署的容器服务。
  1. 使用示例
  • 查看pod
  • 创建pod
  • 编写yaml文件,执行yaml文件创建
  • 删除pod
  • 命令行方式
  • yaml方式删除(指定和创建相同的yaml文件)

九、controller

  1. 概述:controller,控制器,用于对应用资源对象的监控,可以创建应用,删除应用等,类似docker run运行容器服务。当pod出现问题时,会把pod重新拉起,以达到用户期望的状态(实现高可用)

  2. 常见的控制器:通常仅使用Deployment

  3. deployment控制器:据有上线部署、滚动升级、创建副本、回滚到之前某一版本等功能;deployment包含replicaSet,除非需要自定义升级功能或者根本不需要升级pod,否则还是建议使用deployment而不是直接使用ReplicaSet。

  4. 使用实例

  • 通过deployment创建应用
  • image-pull-policy-IfNotPresent 镜像拉取策略,没有时拉取,有直接使用
  • replicas=2 部署两个副本,即运行两个pod示例
  • 查看deployment应用
  • 查看pod,可以看到刚才运行的应用存在两个pod
  • 通过yaml文件创建deployment应用
  • 删除应用
  • 命令行:
  • 通过yaml文件删除应用(指定创建的yaml文件)

十、service

  1. 概述:Service只是一个转发规则,如:餐厅服务员概念。顾客去餐厅吃饭,用户进行点餐和付款操作,实际接收菜单和收款的人是大厨和老板。服务员在中间仅做信息转发,并不是真正工作的节点。

  2. 作用:通过service为pod客户端提供访问pod的方法,service通过pod标签与pod进行关联

  • 如上图:
  • 每一个node(宿主机)上有很多node服务,每一个pod服务有自己的ip(小圈)和service(大圈)。Pod重启后ip会发生变化(如:不一样顾客),但是service的ip基本很固定(如:服务员很少变动)。虽然pod的ip改变了,但是定义的标签不变,只要service关联pod的标签,即使pod的ip改变了,还是可以通过service找到对应的pod,从而对pod进行操作。
  1. service类型:集群是一组相同的服务节点,完成共同的任务。如多个orderService服务一起成为一个集群。

  2. service参数

  3. 使用示例

  • 创建service
  • 分2步,先创建应用,在创建service和应用(应用部署在pod中)进行关联
  • 命令方式:
  • 创建应用(deployment)
  • 创建service
  • expose 指定应用的类型和名称
  • type指定service类型
  • target-port 指定pod服务的端口
  • port指定service的端口
  • 通过配置两个端口,实现service的端口和pod端口的绑定关系
  • 查看service
  • 通过yaml创建service
  • 也是两部,可以放到一个yaml文件中,通过—作为分隔
  • 创建应用
  • 创建service
  • 执行yaml文件,同时创建应用和service
  • 通过service访问pod
  • k8s会自动负载均衡
  • 查看端点,可以看到应用和服务的ip关系
  • 分配的端口为外部端口,即yaml文件配置service的类型不是ClusterIP,而是NodePort,还需要指定一下宿主机IP
  • 创建后的service会包含外部宿主机的端口(此时可以通过访问宿主机的30278端口,访问pod的服务)
  • 删除service
  • 可以使用命令行,也可以使用yaml文件方式

学海无涯苦作舟!!!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号