Kubernetes简介及常用命令

Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化容器化应用程序的部署、扩展和管理。

一、起源与背景

随着微服务架构的兴起,应用程序被拆分为多个小型、独立的服务模块,每个模块可以独立开发、测试和部署。容器技术(如 Docker)使得这些服务的打包和运行变得高效便捷。然而,管理系统中大量的容器、调度它们的运行位置、处理容器故障以及实现容器之间的通信等成为复杂的问题。Kubernetes 应运而生,它最初是由谷歌开发的,谷歌在大规模数据中心管理和容器编排方面有丰富的经验,后来捐赠给云原生计算基金会(CNCF),现在已经成为云计算和容器编排领域的一个重要标准。

二、Kubernetes主要功能

  1. 自动化部署和回滚

    • 可以根据预定义的配置文件自动部署容器化的应用程序。当需要更新应用程序时,Kubernetes 可以逐步替换旧的容器实例,同时监控应用程序的健康状况。如果在更新过程中出现问题,它还可以自动回滚到之前的稳定版本。例如,一个电商网站在更新购物车服务时,Kubernetes 能够逐步将流量从旧版本的服务容器切换到新版本,一旦发现新版本出现问题(如响应时间过长、出现错误代码等),就将流量切回旧版本,保证了购物体验的连续性。
  2. 扩展和负载均衡

    • Kubernetes 能够根据应用程序的实际需求(如 CPU 使用率、内存使用率等指标或者请求流量)自动扩展容器的数量。它内置了负载均衡机制,可以将网络流量均匀地分配到多个容器实例,避免单点过载。以一个视频流媒体服务为例,当大量用户同时观看热门视频时,Kubernetes 会根据服务器的负载情况自动增加视频服务容器的数量,通过负载均衡器将请求分散到这些容器上,确保每个用户都能流畅地观看视频。
  3. 存储编排

    • 它可以挂载本地存储或者云存储系统(如 Amazon EBS、Google Persistent Disk 等)到容器中。这使得容器化的应用程序能够方便地访问持久化存储,就像在传统服务器环境中一样。比如一个数据库容器需要存储数据,Kubernetes 可以将一个持久化的存储卷挂载到该容器,保证数据在容器重新调度或者重启后不会丢失。
  4. 自我修复

    • Kubernetes 能够持续监控容器的运行状态。如果一个容器出现了故障(如进程崩溃、健康检查失败等),系统会自动重新启动该容器。如果是容器所在的节点出现故障,它会将该节点上的容器重新调度到其他健康的节点上。例如,一个分布式计算任务运行在多个容器上,当其中一个容器所在的物理服务器出现硬件故障时,Kubernetes 会迅速将该容器在其他正常服务器上重新启动,保证了计算任务的继续进行。

三、Kubernetes架构

K8s架构

  1. Master 节点(控制节点)

    • API Server :这是 Kubernetes 的前端,用于接收和处理客户端的请求(如用户通过kubectl命令行工具发送的请求),并将其存储到数据存储系统中。它是集群内部组件之间通信的桥梁。
    • Controller Manager :负责管理各种控制器,这些控制器是集群的调节器,它们确保集群的实际状态与用户期望的状态一致。例如,副本控制器(Replication Controller)会根据用户设置的副本数量确保一定数量的容器实例在运行。如果发现实例数量不足,它会创建新的容器;如果实例过多,它会删除多余的容器。
    • Scheduler :它的主要任务是将新创建的容器分配到合适的节点上。它会根据节点的资源情况(如 CPU、内存等)、容器的资源需求以及其他策略(如亲和性和反亲和性规则)来做出调度决策。例如,一个需要大量内存的容器会被调度到内存资源充足的节点上。
  2. Worker 节点(Node工作节点)

    • Kubelet :这是运行在每个工作节点上的代理,它负责管理该节点上的容器,确保容器按照 Master 节点的指令运行。它与 Docker 等容器运行时交互,执行容器的启动、停止等操作。
    • Kube - proxy :用于实现集群内部的网络通信和负载均衡。它管理网络规则,保证容器之间可以互相通信,并且根据定义的规则将网络流量正确地分发到目标容器。例如,在一个容器服务集群中,Kube - proxy 会根据服务的配置将外部请求转发到后端的多个容器实例。
    • Pod: 这是 Kubernetes 中最基本的部署单位,它通常包含一个或者多个紧密相关的容器。这些容器共享网络、存储和操作系统命名空间。Pod 内的容器可以方便地相互通信,就像它们运行在同一个主机上一样。例如,一个 Web 应用程序可能由一个 Web 服务器容器和一个日志分析容器组成,它们可以被封装在一个 Pod 中,共享存储卷用于日志存储和网络接口用于内部通信。

Kubernetes 凭借其强大的功能和灵活的架构,为现代云计算和分布式系统提供了可靠的容器编排解决方案,已经被广泛应用于企业级的微服务架构和云原生应用开发中。

四、Kubernetes常用指令

4.1. 查看类命令

1. 获取节点相应服务的信息

kubectl get nodes

如果需要按selector名来查找相应的pod信息, 可以通过以下命令查看:

kubectl get pod --selector name=tomcat

2. 查看K8S集群信息

kubectl cluster-info

3. 查看各组件信息

kubectl -s http://localhost:8080 get componentstatuses

4. 查看pods所在的运行节点

kubectl get pods -o wide

如果需要通过某个命名空间查找节点信息, 可以通过以下命令查看:

kubectl get pods -o wide -n kube-system

  • -o wide 选项表示展示更多的Pod节点信息
  • -n <命名空间> 表示查询该命名空间下的Pod节点信息

如果需要查找所有命名空间下的所有Pod信息, 可以通过以下命令:

kubectl get pods --all-namespaces

kubectl get pods -o wide --all-namespaces #列出更多的详细信息

5. 查看pods定义的详细信息

kubectl get pods -o yaml

6. 查看运行的pod的环境变量

kubectl exec <pod名称> env

7. 查看指定pod的日志

kubectl logs -f pods/<pod名称> -n kube-system

8. 查看集群节点信息

kubectl get nodes

如果需要查看集群名称为zone下的集群节点信息, 可以使用以下命令:

kubectl get nodes -l zone

9. 查看某个命名空间(如kube-system)下的所有service

kubectl get services kubernetes-dashboard -n kube-system

10. 查看某个命名空间(如kube-system)下的所有发布信息

kubectl get deployment kubernetes-dashboard -n kube-system

11. 查看资源信息

  • 根据service名查看资源信息
  • kubectl describe service/kubernetes-dashboard --namespace=“kube-system”
  • 根据pod名称查看资源信息
  • kubectl describe pods/kubernetes-dashboard-349859023-g6q8c --namespace=“kube-system”
  • kubectl describe pod nginx-772ai

4.2. 操作类命令

1. 创建资源

kubectl create -f <文件名.yaml>

2. 重建资源

kubectl replace -f <文件名 [–force]

3. 删除资源

  • 强制删除某个文件名命名节点 kubectl delete -f <文件名>
  • 删除某个Pod命令节点 kubectl delete pod <pod名>
  • 删除某个Replication Controller命名节点 kubectl delete rc <rc名>
  • 删除某个服务命名节点 kubectl delete service <service名>
  • 删除所有Pod节点 kubectl delete pod --all

4. 动态伸缩操作

  • 为Replcation Controller名称为nginx动态扩展5个服务节点

kubectl scale rc nginx --replicas=5

  • redis-slave部署5 个服务节点

kubectl scale deployment redis-slave --replicas=5

  • redis-slave-deployment.yaml部署脚本下的服务扩展2个节点

kubectl scale --replicas=2 -f redis-slave-deployment.yaml

5. 进入Pod节点容器内进行操作

kubectl exec -it redis-master-1033017107-q47hh /bin/bash

6. Pod节点容器标签操作

  • 增加Node节点label值

kubectl label nodes node1 zone=north

  • 增加Pod的label值 [key]=[value]

kubectl label pod redis-master-1033017107-q47hh role=master

  • 删除Pod的label值

kubectl label pod redis-master-1033017107-q47hh role-

  • 修改Pod的label值

kubectl label pod redis-master-1033017107-q47hh role=backend --overwrite

7. 滚动升级及版本回滚

  • 配置文件滚动升级

kubectl rolling-update redis-master -f redis-master-controller-v2.yaml

  • 命令升级

kubectl rolling-update redis-master --image=redis-master:2.0

  • Pod版本回滚

kubectl rolling-update redis-master --image=redis-master:1.0 --rollback

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值