K8s微服务从0到1入门及命令实战

2023-11-17

写在前面

本文主要介绍k8s的核心概念,基础语法,常用命令和常用操作


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-container
    image: nginx
    ports:
    - 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命令进行更新
  • 监控更新过程,确保更新成功
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

K8s微服务从0到1入门及命令实战 的相关文章

随机推荐

  • leetcode专项刷题_数组(2)_两数之和/访问所有点的最小时间/统计有序矩阵中的负数/种花问题

    文章目录 两数之和 II 输入有序数组 题目解释 代码实现 访问所有点的最小时间 题目解释 代码实现 统计有序矩阵中的负数 题目解释 代码实现 种花问题 题目解释 代码实现 检查整数及其两倍数是否存在 题目解释 实现代码 两数之和 II 输
  • 云计算大会观感及对云计算的思考

    我思故我在 我眼中的第四届中国云计算大会 作者 朱金灿 来源 http blog csdn net clever101 承蒙CSDN的邀请 于2012年5月23日到5月25日参加了第四届中国云计算 在我看来这届大会的最大亮点是在于嘉宾的技术
  • kafka 安装使用及cpp kafka例子

    1 下载kafka 安装包 wget http mirrors tuna tsinghua edu cn apache kafka 2 3 0 kafka 2 12 2 3 0 tgz tar xvzf kafka 2 12 2 3 0 t
  • Codeforces Round 896 (Div. 2) A~D

    A Make It Zero 思路 长度为偶数 从1到n操作两次 长度为奇数 先从1到n操作一次 然后从1到n 1做两次 最后n 1到n做一次 AC代码 include
  • 弱监督目标检测之二 连续优化多实例学习

    上一次的博客提到了我们实验室发表在CVPR2018以及IEEE TPAMI上的工作MELM 1 这一次的博客进一步介绍基于MELM的最新的工作C MIL 也是实验室今年被CVPR2019接收的4篇论文之一 C MIL Continuatio
  • 读书笔记---《如何高效学习》

    学习是需要方法的 特别是在当今信息爆炸的时代 如何高效的处理信息 有机的整合知识 已经成为学习的关键 如果只用一种方式了解某样事物 你就不会真正了解她 了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系 通过联系 你可将想法内化于
  • 用python做爬虫,怎么入门学什么?

    用python做爬虫 怎么入门学什么 前些日子 写了一篇Python能做什么 当然高端的算法ai领域应用非常广泛 但是对于想学习Python实现找工作或者自己网上接单兼职的小伙伴来说 还是做好爬虫更适合 那么爬虫究竟是什么呢 爬虫可以理解为
  • 【图像识别】图像特征、特征检测、特征提取

    目录 1 图像特征 2 特征检测与特征提取 2 1 特征检测算法 2 2 1Moravec 2 1 2 Harris 2 1 3 FAST 2 1 4 SIFT 2 1 5 SURF 2 1 6 BRIRF 2 1 7 ORB 2 2 特征
  • [Qt] [QDir] 创建文件夹和删除文件夹

    1 创建文件夹 mkdir和mkpath都可以创建文件夹 QDir temp bool result 创建名为test的文件夹 mkdir 若csdn文件夹不存在 则test文件夹创建失败 result temp mkdir d csdn
  • 回溯--深度优先搜索(图的M着色问题 poj1129)

    回溯 图的m着色问题 题目描述 给定无向连通图G V E 和m种不同的颜色 用这些颜色为图G的各顶点着色 每个顶点着一种颜色 是否有一种着色法使G中相邻的两个顶点有不同的颜色 这个问题是图的m可着色判定问题 若一个图最少需要m种颜色才能使图
  • 使用QGraphicsItem绘制微信消息文本框

    微信消息框如下 使用QGraphicsItem绘制 怎么绘制呢 先不考虑头像 那文本框就是由一个菱形矩形加一个小箭头组成的 所以很简单就能画出来了 void PopoItem paint QPainter painter const QSt
  • 彻底解决Python(win)导包from import错误问题

    1 一句话 一句话 关键是os sys path这个目录 这个目录有 就from import没问题 没有 就报错 解决办法就是千方百计加进去即可 例如 import os print os sys path import dd from
  • 单链表中求倒数第几个节点

    问题描述 在单链表中求出倒数第K个节点 要求快速 方法一 利用链表的长度 不推荐 此方法必须事先知道链表的长度 在有长度的信息链表中 此方法可行 比如我之前的链表是这样的实现 参考博文 http blog csdn net dawn aft
  • 机器学习之梯度提升决策树(GBDT)

    1 GBDT算法简介 GBDT Gradient Boosting Decision Tree 是一种迭代的决策树算法 由多棵决策树组成 所有树的结论累加起来作为最终答案 我们根据其名字 Gradient Boosting Decision
  • SpringAOP来监控service层中每个方法的执行时间

    使用AOP来说 太方便了 并且特别适合这类场景 代码如下 这里是将要统计的信息写到log文件中 也可以设计成写入表中 package com ecsoft interceptor import org aspectj lang Procee
  • linux版本的发行版和内核版是什么意思

    linux内核版本的分类 Linux内核版本有两种 稳定版和开发版 Linux内核版本号由3组数字组成 第一个组数字 第二组数字 第三组数字 第一个组数字 目前发布的内核主版本 第二个组数字 偶数表示稳定版本 奇数表示开发中版本 第三个组数
  • Linux扫盲篇:CentOS、Ubuntu、Gentoo

    http www williamlong info info archives 197 html Linux最早由Linus Benedict Torvalds在1991年开始编写 在这之前 Richard Stallman创建了Free
  • DirectX在VS2017环境配置

    提示 此方法是解决DirectX9在windows环境下的配置问题 原文 https xygeng cn post 249 html 具体方法 1 问题 无法打开包括文件 stdlib h 解决办法 视图 gt 属性管理器 点击 user属
  • VMware Workstation 16 安装教程

    哈喽 大家好 今天一起学习的是VMware Workstation 16的安装 vm虚拟机是小编非常喜欢的生产力软件 小编之前发布的测试教程钧在vm上进行的实验 VMware Workstation是一款功能强大的桌面虚拟计算机软件 它能够
  • K8s微服务从0到1入门及命令实战

    写在前面 本文主要介绍k8s的核心概念 基础语法 常用命令和常用操作 Kubernetes介绍 Kubernetes是一种流行的开源容器编排和管理系统 它的目标是简化部署 扩展和管理容器化应用程序 Kubernetes最初由Google开发