写在前面

本文主要介绍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命令进行更新
  • 监控更新过程,确保更新成功
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐