K8s微服务从0到1入门及命令实战
创始人
2025-05-30 03:21:07
0

Kubernetes介绍

Kubernetes是一种流行的开源容器编排和管理系统,它的目标是简化部署、扩展和管理容器化应用程序。Kubernetes最初由Google开发并于2014年发布为开源软件,现在由Cloud Native Computing Foundation (CNCF) 维护。
Kubernetes可以帮助您在集群中部署、管理和运行容器化应用程序,它提供了许多特性,例如自动化应用部署、自动化扩展、负载均衡、存储编排、自动化回滚、自动化重启、自我修复和自我管理等功能。Kubernetes还提供了一个强大的API,允许开发人员和系统管理员通过命令行工具、Web界面或API访问和操作集群。

Kubernetes和Docker Compose 对比

Kubernetes和Docker Compose都是用于容器编排的工具,但它们的设计目标和使用方式有所不同。

  1. 设计目标:Kubernetes旨在管理容器化应用程序的生命周期,包括自动化部署、扩展、负载均衡、存储编排、自我修复和自我管理等。而Docker Compose则更专注于本地开发和测试环境,提供了一种简单的方式来定义和运行多个Docker容器。
  2. 扩展性:Kubernetes是设计用于大规模集群的,可以轻松扩展以管理数千个容器。而Docker Compose更适合小型项目和单机环境,难以扩展到多台机器。
  3. 功能:Kubernetes提供了更多的特性和API,例如自动化部署、自动化扩展、负载均衡、存储编排、自动化回滚、自我修复和自我管理等。而Docker Compose只提供了基本的容器编排功能,如定义多个容器、指定容器之间的依赖关系等。

综上所述,如果您需要管理复杂的生产环境,并需要自动化部署、扩展、负载均衡等高级功能,那么Kubernetes是更好的选择。而如果您只是需要在本地开发和测试环境中运行多个Docker容器,并且想要一个易于学习和使用的工具,那么Docker Compose是更好的选择。

云计算架构 IAAS PAAS SAAS

云计算架构是指云计算服务提供商提供的服务类型和层次结构,通常分为三个层次:IaaS、PaaS和SaaS。

  1. IaaS(基础设施即服务):IaaS提供商提供了基础设施,例如计算资源、存储、网络和安全性等,让用户可以通过虚拟化技术创建和管理自己的云计算环境。用户需要自行安装和配置操作系统和应用程序,以及管理和维护整个基础架构。例如,阿里云服务器。
  2. PaaS(平台即服务):PaaS提供商提供了一种在其平台上构建和运行应用程序的服务。它们通常提供了一个开发和部署应用程序的环境,包括应用程序框架、数据库、编程语言和开发工具等。用户只需要关注应用程序的开发和部署,而不需要关注基础设施的管理。例如,低代码开发平台。
  3. SaaS(软件即服务):SaaS提供商提供了完整的应用程序服务,包括软件和数据存储,用户只需要使用这些服务而不必关注底层的基础设施和平台。通常,这些应用程序是通过互联网提供的,用户只需要使用一个Web浏览器或移动应用程序就可以访问它们。例如,QQ邮箱。

综上所述,IaaS提供了基础设施、PaaS提供了应用程序平台,SaaS则提供了完整的应用程序服务。以制作饺子为例,laaS相当于自己购买和准备原材料进行制作饺子,PaaS相当于购买半成本,自己煮了可以吃,Saas相当于饭店提供的饺子,直接拿来就可以吃。

kubernetes环境搭建

环境搭建有两种方式

  1. minikube可以在单个计算机上启动一个虚拟机,适合本地学习
  2. 使用kubeadm搭建,kubeadm适合在企业搭建环境时候使用

Minikube是一款基于虚拟机技术的工具,可以帮助用户在本地快速搭建一个轻量级的Kubernetes集群。它可以在单个计算机上启动一个虚拟机,并在该虚拟机中运行一个简化版的Kubernetes集群,用户可以使用这个集群来测试和开发Kubernetes应用程序,而无需配置复杂的环境。
Minikube在本地计算机上安装和运行非常方便,支持多种操作系统,包括Windows、macOS和Linux。它还提供了一系列命令行工具,可以轻松管理Kubernetes集群的生命周期,包括启动、停止、删除、更新和升级等操作。
通过Minikube,用户可以在本地快速构建和测试Kubernetes应用程序,而无需投入大量的时间和资源来配置和管理复杂的生产环境。另外,由于Minikube可以在单个计算机上运行一个简化版的Kubernetes集群,因此可以大大降低开发和测试的成本,提高生产效率。
总之,Minikube是一个非常有用的工具,可以帮助用户快速搭建和测试Kubernetes应用程序。它对于初学者和小型团队来说尤为有用,可以帮助他们更快地上手Kubernetes,提高开发和测试效率。

以下为环境搭建的步骤

  1. 安装 minikube
    curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.23.1/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
  2. 启动minikube
    minikube start --registry-mirror=https://registry.docker-cn.com --vm-driver=none
  3. 安装kubectl命令行工具
    • curl -LO https://dl.k8s.io/v1.19.2/kubernetes-client-linux-amd64.tar.gz
    • tar -xvf kubernetes-client-linux-amd64.tar.gz
    • sudo install kubernetes/client/bin/kubectl /usr/local/bin/kubectl

Kubernetes的架构

Kubernetes是一个高度可扩展的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。其架构主要由Master节点和Worker节点两部分组成。
Master节点负责集群的管理和控制,包括以下组件:

  1. etcd:Kubernetes集群的分布式存储,用于存储Kubernetes集群的配置信息、状态信息等。
  2. kube-api-server:Kubernetes API服务器,提供REST API接口,用于与Kubernetes集群进行交互。
  3. kube-controller-manager:Kubernetes控制器管理器,用于监控和控制Kubernetes集群的状态和控制器,如Replication Controller、Deployment Controller等。
  4. kube-scheduler:Kubernetes调度器,用于为容器选择合适的Worker节点运行。

Worker节点负责运行容器,包括以下组件:

  1. kubelet:Kubernetes节点代理,运行在每个Worker节点上,负责管理节点上的容器。
  2. kube-proxy:Kubernetes网络代理,运行在每个Worker节点上,负责负载均衡、服务发现等网络相关的任务。
  3. Pod:Kubernetes最小的调度单位,包含一个或多个容器,并共享网络和存储资源。

Kubernetes架构中的各组件之间通过API接口进行通信和交互,实现了高度自动化的容器编排和部署,提高了应用程序的可靠性和可伸缩性。

在这里插入图片描述

Kubernetes核心概念

Kubernetes提供了多种资源对象来管理容器化应用程序,以下是其中几个比较常用的资源对象:

  1. 命名空间(Namespace):命名空间提供了Kubernetes集群内的虚拟集群概念,可以将不同的资源对象划分到不同的命名空间中进行隔离。使用命名空间可以将不同的应用程序、不同的环境(如开发、测试、生产等)隔离开来,避免命名冲突和资源争用。
  2. 容器组(Pod):容器组是Kubernetes最小的调度单元,是一个或多个容器的组合,共享网络和存储资源。容器组中的所有容器都运行在同一个Worker节点上,共享同一个网络命名空间和存储卷。通常情况下,容器组中只运行一个主容器和若干个辅助容器。
  3. 部署(Deployment):部署是管理容器组的对象,用于实现容器组的自动化部署、扩容、滚动更新等功能。部署对象中定义了容器组的模板、副本数、滚动更新策略等信息。
  4. 服务(Service):服务是暴露容器组的网络服务的对象,提供了稳定的DNS名称和IP地址,以及负载均衡、服务发现等功能。服务对象通过选择器(Selector)将一组容器组作为服务的后端,并为这些容器组提供一个统一的入口。
  5. 标签(Label):标签是一种用于标识和选择资源对象的机制,可以通过标签将多个资源对象进行分类和组合。例如,可以使用标签来标识不同环境的资源对象(如dev、test、prod等),或者按照不同的业务功能来划分资源对象。
  6. 复制控制器(Replication Controller):复制控制器是管理容器组副本数的对象,用于保证容器组的副本数始终保持在预期值之内。复制控制器会根据副本数的变化自动调整容器组的运行状态。
  7. 存储卷(Volume):存储卷是用于存储容器数据的对象,提供了持久化存储的功能。存储卷可以将宿主机的文件或目录挂载到容器中,也可以使用云存储等外部存储服务进行存储。

在这里插入图片描述

Kubernetes部署DashBoard

K8S Dashboard是官方的一个基于WEB的用户界面,专门用来管理K8S集群,并展示集群的状态。K8S集群安装好后默认没有包含Dashboard,我们需要额外创建它。
部署:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml

其中f后面的文件可以是本地的,也可以是远程的。
官网:https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

YAML和Kubernetes

YAML是一种轻量级的数据序列化格式,通常用于配置文件和数据交换。在Kubernetes中,YAML常用于定义Kubernetes对象的配置。以下是一些常见的YAML语法及其在Kubernetes中的使用。

  1. YAML文件结构
    一个Kubernetes YAML文件包括三个部分:apiVersion,kind和spec。其中,apiVersion指定Kubernetes API的版本,kind指定Kubernetes对象的类型,spec指定Kubernetes对象的配置。下面是一个示例:
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: nginxports:- containerPort: 80
  1. YAML键值对
    YAML使用冒号分隔键和值,每个键值对应该使用缩进表示其所属层级。例如:
metadata:name: my-pod
  1. YAML数组
    YAML表示数组,每个元素使用短横线表示。例如:
containers:
- name: my-container
  1. YAML注释

YAML使用#符号表示注释。例如:

# This is a comment
metadata:name: my-pod
  1. – 作为文件的开始,可以作为一个新的文件来管理。一个yaml文件中可以有多个–,–之间的yaml代码可以分布在不同的文件中,也可以在同一个文件中。

在这里插入图片描述

Kubernetes Kubectl常用命令

  • kubectl cluster-info 查询集群信息

  • kubectl get nodes 查询集群节点

  • kubectl describe node 节点名 查询指定节点详细信息

  • kubectl get pods 获取pod信息

  • kubectl delete pod 名称 删除pod

  • kubectl get pods -0 wide 获取pod信息(包含具体运行节点信息)

  • kubectl delete deployment 名称 删除deployment

  • kubectl get services/svc 列出服务

  • 增删改查:

    • 创建 kubectl create -f xxx.yaml
    • 查询 kubectl get pod PodName
    • 查询 kubectl describe pod PodName
    • 删除 kubectl delete pod PodName
    • 更新 kubectl replace /path/to/NewYaml.yaml

升级、回滚、弹性伸缩

  1. 升级

在k8s中进行升级可以通过以下步骤完成:

  • 准备新版本镜像
  • 更新Deployment或StatefulSet的镜像版本
  • 运行kubectl apply命令进行更新,如:kubectl apply -f nginx.yaml
  • 监控更新过程,确保更新成功
  1. 回滚

如果升级过程中出现问题,可以使用回滚操作进行恢复。在k8s中进行回滚可以通过以下步骤完成:

  • 查看Deployment或StatefulSet的历史版本,如: kubectl rollout history deployment my-go-app
  • 使用kubectl rollout undo命令进行回滚,如:kubectl rollout undo deployment my-go-app --to-revision=1
  • 监控回滚过程,确保回滚成功
  1. 弹性伸缩

在k8s中进行弹性伸缩可以通过以下步骤完成:

  • 修改Deployment或StatefulSet的replica数量
  • 运行kubectl apply命令进行更新
  • 监控更新过程,确保更新成功

相关内容

热门资讯

从ChatGPT到AGI还有多... 1.引子 21年开始在公司负责一个全链路语音的项目,支持公司的Iot设备,...
海口最新学区划分,最新或202... 海口公办小学招生范围按照义务教育免试就近入学原则,市区公办小学实行依街道划片招生。本文为您介绍海口小...
青海最新学区划分,最新或202... 为方便家长和学生们了解自己孩子所就读的小学或是自己孩子的户口究竟在不在想要入读的中学的学区范围内,小...
西宁最新学区划分,最新或202... 西宁公办小学招生范围按照义务教育免试就近入学原则,市区公办小学实行依街道划片招生。本文为您介绍西宁小...
三亚最新学区划分,最新或202... 三亚公办小学招生范围按照义务教育免试就近入学原则,市区公办小学实行依街道划片招生。本文为您介绍三亚小...
贵州最新学区划分,最新或202... 为方便家长和学生们了解自己孩子所就读的小学或是自己孩子的户口究竟在不在想要入读的中学的学区范围内,小...
21- 神经网络模型_超参数搜... 知识要点 fetch_california_housing:加利福尼亚的房价数据&#...
一文了解GPU并行计算CUDA 了解GPU并行计算CUDA一、CUDA和GPU简介二、GPU工作原理与结构2.1、基础GPU架构2....
贵阳最新学区划分,最新或202... 贵阳公办小学招生范围按照义务教育免试就近入学原则,市区公办小学实行依街道划片招生。本文为您介绍贵阳小...
遵义最新学区划分,最新或202... 遵义公办小学招生范围按照义务教育免试就近入学原则,市区公办小学实行依街道划片招生。本文为您介绍遵义小...
安顺最新学区划分,最新或202... 安顺公办小学招生范围按照义务教育免试就近入学原则,市区公办小学实行依街道划片招生。本文为您介绍安顺小...
六盘水最新学区划分,最新或20... 百年教育网小编为您整理了关于六盘水市幼升小学区划分详情的相关信息,希望对您有帮助,想了解更多请继续关...
遍历二叉树线索二叉树 遍历二叉树 遍历定义 顺着某一条搜索路径寻访二叉树中的每一个结点,使得每个节点均被依次...
springboot简介和项目... Java知识点总结:想看的可以从这里进入 目录SpringBoot1、简介和原理1....
最新或2023(历届)嘉祥教育... 信息时报讯 面临中考,初三学生陈黎的父母十分发愁。一是孩子成绩并不拔尖,另外,父母虽然有心让儿子出...
“牛孩儿”“每天一题”助你提升... “小升初”的战鼓越擂越响,你准备好了吗?不要着急,自4月29日起,中原网教育频道官方微信“中原教育”...
这是一封发给西安小升初家长的邀... 秦学·伊顿交大校区4月9日晚上举办的小升初讲座圆满结束了,回顾讲座现场的瞬间,小编有一些小小的感动。...
四大法宝护航“528冲刺班”巨... 又是一个四月,春风扑面,鲜花盛开。又是一届小考,竞争激烈,埋头伏案。又是一轮冲刺,全力以赴,舍我其谁...
小升初数学面谈题型归纳 小升初... 数学在小升初择校中的重要性可以说是毋庸置疑的。很多一线名校例如二中应元、六中珠江、广大附等都对数学情...
vue2+3 pinia v... 1. 为什么要学习vue1.官网https://v3.cn.vuejs.org/guide/migr...