k8s+containerd(kvm版)

k8s(Kubernetes)是由Gogle开源的容器编排引擎,可以用来管理容器化的应用程序和服务,k

  • 高可用:系统在长时间内持续正常地运行,并不会因为某一个组件或者服务的故障而导致整个系统不可用
  • 可扩展性:系统可以根据负载的变化来动态的扩展或缩减系统的资源,从而来提高系统的性能和资源利用率

k8s提供了自动重启、自动重建、自动修复提高集群的可用性,以下概念稍微了解即可,看一看直接实操,know what->know how->know why

核心概念

Pod组件

Pod是k8s的最小调度单元,一个Pod是一个或者多个应用容器的组合,Pod里的容器共享存储、网络、运行时配置等

Node节点组件

一个节点就是一个物理机或者虚拟机,一个节点上可以运行一个或多个Pod;一个集群至少2个节点,一个Master-Node一个Worker-Node

一个节点上有三个组件:

  • kubelet:管理和维护每个基点上的Pod,监控Worker-Node运行情况
  • kube-proxy:网络代理和负载均衡
  • container runtime:保障Pod运行,相当于Docker Engine

Master-Node:管理整个集群

  • kube-apiserver:提供k8s集群的api接口服务,所有组件通过这个接口通信

  • ControllerManager控制器管理器,负责管理集群中各种资源对象的状态,包括

    • Node Controller:负责在节点出现故障时进行通知和响应
    • Job Controller:检测代表一次性任务的Job对象,然后创建Pods来运行这些任务直至完成
    • EndpointSlice Controller:填充端点分片对象
    • ServiceAccount Controller:为新的命名空间创建默认服务账号
  • Scheduler:调度器,负责监控k8s集群所有节点的资源使用情况,根据调度策略将Pod调度到合适的节点中运行

  • etcd:键值存储系统,负责存储所有资源对象的状态信息

  • Cloud Controller manager:云控制器管理器,负责与云平台的api交互

Worker-Node: 运行应用和服务

  • kubelet:在每个节点上运行,接受收PodSpecs确保PodSpec中描述的容器处于运行状态且健康
  • kube-proxy:在每个节点上运行的网络代理,实现内外部的网络通信
  • Container Runtime:容器运行时,支持多容器运行,如Docker、Containerd等,目前推荐Containerd,因为Docker太重了,对于k8s来说,只需要有一个容器运行时就可以,而Docker自带的还有网络这些用k8s的proxy就行

Cluster 集群组件

Cluster将多个节点组织到一起共同为系统提供服务的过程称为集群

Control Plane 控制平面组件

控制平面为集群做全局决策,比如资源调度、检测和响应集群事件,一般在Master-Node运行

Addons 插件

  • DNS:集群内部的DNS服务
  • dashbord:web界面,便于管理应用和集群
  • Container Resource Monitoring:容器资源监控
  • Cluster-level Logging:集群日志记录
  • Network Plugins:负责为Pod分配ip并使它们能够在集群内部互相通信

Service 服务

可以将一组Pod封装成一个服务,这个服务可以通过统一的入口来访问,可以防止Pod被销毁或创建后ip改变导致失联

内部服务

像mysql、redis等只需要被集群内部访问不需要外部访问的就是内部服务

外部服务

像后端接口等需要被暴露给外部使用的就是外部服务

常用类型
  • ClusterIP:默认方式,分配一个稳定的IP地址,即VIP,只能在集群内部访问
  • NodePort:在每个节点开放一个端口来暴露服务,可以在集群外部访问,通过NodeIP:NodePort访问(端口范围:30000~32767)
  • LoadBalancer:与NodePort类似,在每个节点启用一个端口来暴露服务。除此之外,K8s请求底层云平台的负载均衡器,把每个[Node IP]:[NodePort]作为后端添加进去
  • ExternalName:外部名称类型,将服务映射到一个外部服务域名上
  • Headless:无头类型,主要用于DNS解析和服务发现
  • Ingress:是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP和HTTPS,还可以提供负载均衡、SSL 终结和基于名称的虚拟托管
  • ConfigMap:API 对象,用来将非机密性的数据保存到键值对中
  • Secret:包含少量敏感数据(如密码、令牌或密钥)的对象,Secret 可以独立于使用它们的 Pod 创建,因此在创建、查看和编辑 Pod 的工作流程中,Secret(及其数据)被泄露的风险较小
  • Volumes:数据持久化存储
  • Deployment:部署有状态应用
  • StatefulSet:部署无状态应用

k8s架构

环境搭建

需要Matser Node虚拟机和Worker-Node虚拟机

安装kubectl

kubectl是使用K8s API 与K8s集群的控制面进行通信的命令行工具,kubectl安装到Matser Node节点的虚拟机

#安装kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
#查看安装
kubectl version --client
#卸载
sudo rm /usr/local/bin/kubectl

安装k8s

环境准备

  • 这里使用kvm Linux虚拟机,使用vmware、virtbox、multipss是一样的,只是虚拟机不同罢了,喜欢哪个用哪个
    kvm教程

网上有很多虚拟机安装教程,这里就不赘述了,本人使用debian12,你用啥Linux都可以,操作基本相同

1、配置要求:

  • 你使用的电脑内存配置16G以上
  • 虚拟机内存:2G或更多
  • 虚拟机CPU:2G或更多
  • 虚拟机硬盘:40或更多
  • 虚拟机网络:每个虚拟机都能访问外网
  • ssh连接正常:一般新装的虚拟机远程登陆默认关闭,先开启再克隆方便用远程连接工具操作
  • 关闭防火墙:生产主机别关,我们学习关了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cci497

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值