该文章是我学习B站视频写的学习笔记

原视频在Kubernetes一小时轻松入门_哔哩哔哩_bilibili

目录

1. K8s简介

K8s的主要功能

2. K8s核心组件

(1)Node

(2)Pod

(3)Service

(4)ConfigMap

(5)Volume

(6)Deployment

(7)StatefulSet

(8)Namespace

3. Kubernetes架构

Node组件​编辑

Master组件

4. 使用Minikube搭建K8S环境

5. Kubernetes在线环境

6. kubectl常用命令

(1)集群信息

(2)资源管理

查看资源

创建/删除资源

(3)Pod 操作

(4)Deployment 操作

(5)Service 操作

(6)调试与故障排查

(7)配置管理

(8)其他常用命令

7. YAML配置文件的使用

8. 配置和公开服务

9. 使用Portainer管理集群





k8s官方文档

1. K8s简介

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

特点:

(1)具备容器编排的功能,通过配置文件定义应用程序的部署方式

(2)高可用:自动重建、删除功能

(3)可扩展性:自动根据需要扩展或缩减资源

K8s的主要功能

主要功能

详解

自我修复

在节点产生故障时,会保证预期的副本数量不会减少,会在产生故障的同时,停止健康

检查失败的容器并部署新的容器,保证上线服务不会中断

存储部署

Kubernetes挂载外部存储系统,将这些存储作为集群资源的一部分来使用,增加存储使

用的灵活性

自动部署和回滚更新

Kubernetes采用滚动更新策略更新应用,一次更新一个Pod,当更新过程中出现问题,

Kubernetes会进行回滚更新,保证升级业务不受影响。

弹性伸缩

Kubernetes可以使用命令或基于CPU使用情况,自动快速扩容和缩容应用程序,保证在

高峰期的高可用性和业务低档期回收资源,减少运行成本。

提供认证和授权

可以控制用户是否有权限使用API进行操作,精细化权限分配。

资源监控

工作节点中集成Advisor资源收集工具,可以快速实现对集群资源监控。

密匙和配置管理

Kubernetes允许存储和管理敏感信息,例如密码,OAuth令牌和SSH密钥。您可以部署

和更新机密和应用程序配置,而无需重建容器映像,也不会在堆栈配置中暴露机密。

服务发现和负载均衡

为多个容器提供统一的访问入口(内部IP和一个DNS名称),并且将所有的容器进行负

载均衡,集群内应用可以通过DNS名称完成相互之间的访问。

2. K8s核心组件

(1)Node

集群中的一个节点,可以是物理机也可以是虚拟机

(2)Pod

Pod是Kubernetes 调度的最小可部署单位,一个 Pod 里通常包含一个或多个紧密相关的容器(同一个网络命名空间、共享卷等)。创建时自动分配IP地址(是一个集群内部IP,Pod之间可通过IP进行通信)。

Pod是在容器上加一层抽象,就可以将一个或多个容器组合在一起

一般来说一个Pod运行一个容器

注意:Pod不稳定,容易被销毁,销毁时需要重新创建,分配新IP。

(3)Service

将一组Pod组装成一个服务,Pod销毁时,Service的IP不变,所以不影响访问,Service会自动将请求转发到正常的Pod上,因此Service是对外暴露和稳定访问 Pod 的机制。

分为内部服务和外部服务;内部服务:不需要或不能暴露给外部的,只能集群内部访问,比如:MySQL服务、消息队列等;外部服务:需要暴露给外部的,比如:微服务的后端API接口,给用户提供的前端界面等。

外部服务类型:NodePort(对外指定端口,通过IP:端口形式访问服务);Ingress(入口):在集群外部与内部服务之间提供 HTTP/HTTPS 路由能力,通过完整域名访问。

(4)ConfigMap

ConfigMap是为了解决配置信息与应用程序耦合的问题,它可以将配置信息进行封装,可以在应用程序中读取和使用,以此将配置信息与应用程序的镜像分开,实现容器化应用程序的可移植性

ConfigMap避免配置变更带来的重新编译和部署问题

注意:ConfigMap中的配置信息是明文的,若要存储敏感信息如密码等可以采用Secret组件(使用的是Base64编码,而不是加密技术)

(5)Volume

可以将持久化存储的资源挂载到集群中的本地磁盘上,还可挂载到集群外部的远程存储上

(6)Deployment

可以定义和管理应用程序的副本数量以及更新策略,简化应用程序的部署和更新操作。可以理解为在Pod上加一层抽象,可以将一个或多个Pod组合在一起,这样就具有副本控制(定义和管理应用程序的副本数量,当有一个副本发生故障销毁时会自动创建新副本代替)、滚动更新(定义和管理应用程序的更新策略,逐渐将新版本替换掉旧版本,确保应用程序平滑升级)、自动扩缩容功能

(7)StatefulSet

可以定义和管理有状态的应用(如数据库)的副本数量,类似Deployment

注意:StatefulSet部署复杂,不是万能的

解决方法:有状态的应用可以选择在集群外单独部署

(8)Namespace

命名空间,Namespace 多用于实现多租户的资源隔离。Namespace 通过将集群内部的资源对象“分配”到不同的Namespace中,形成逻辑上分组的不同环境、项目、小组或用户组。

K8S 集群在启动后,会创建一个名为 default 的 Namespace,如果不特别指明 Namespace,创建的 Pod、RC、Service 都将被创建到 default 下。

当我们给每个租户创建一个 Namespace 来实现多租户的资源隔离时,还可以结合 K8S 的资源配额管理,限定不同租户能占用的资源,例如 CPU 使用量、内存使用量等。

3. Kubernetes架构

使用Master-Worker架构

通常一个k8s可能包括多个Node,Node间通过Service通信

Node组件

(1)kubelet kubelet 是 Master 在 Node 节点上的 Agent(代理),与 Master 密切协作,管理本机运行容器的生命周期(监控工作节点的运行情况,将结果汇报给apiserver),负责 Pod 对应的容器的创建、启停(管理和维护)等任务,实现集群管理的基本功能。从apiservice接收新的或修改过的Pod规范,确保容器按 Pod 规范(PodSpec)运行。

(2)kube-proxy 在 Node 节点上实现 Pod 网络代理(每个Node启动一个网络代理),实现 Kubernetes Service 的通信,维护网络规则和负载均衡工作。

(3)容器运行时:如docker engine,负责拉取镜像、创建容器、启动或停止容器等工作。应用程序使用容器运行时来运行

Master组件

Master 是 K8S 的集群控制节点,每个 K8S 集群里需要有一个 Master 节点来负责整个集群的管理和控制,基本上 K8S 所有的控制命令都是发给它,它来负责具体的执行过程。Master 节点通常会占据一个独立的服务器。

解决问题:如何调度不同Pod到不同的Node上;如何监控节点的状态;如何删除和创建一个节点

(1)kube-apiserver 集群的统一入口(所有请求首先经过它,再转发给对应组件进行处理),各组件协调者,以 HTTP Rest 提供接口服务(所有组件通过接口进行通信),所有对象资源的增、删、改、查和监听操作都交给 apiserver 处理后(确保只有经过认证和授权的用户才能访问集群中的资源)再提交给 Etcd 存储。

2)kube-controller-manager 是 K8S 里所有资源对象的自动化控制中心,一个资源对应一个控制器,而 controller-manager 就是负责管理这些控制器的。

(3) kube-scheduler 监视新创建且未分配工作节点的Pod(监控节点的资源使用情况),并根据不同的需求将其分配到工作节点中。同时负责集群的资源调度、组件抽离。

(4)etcd 是一个分布式的,一致的 key-value 存储,主要用途是共享配置和服务发现,存储集群中所有对象的状态信息,比如 Pod、Service 等对象信息。不存储应用程序的数据。

(5)Cloud Controller Manager 云控制管理器,负责与云平台交互,提供一致的管理接口,使得用户可以在不同云平台中运行和管理应用程序

4. 使用Minikube搭建K8S环境

Minikube只能搭建只有一个节点的集群,适合开发、测试环境;一般来说,生产环境的集群需要多个节点,Minikube不适合生产环境

Minikube搭建和运行一个简版的k8s集群环境,kubectl(命令行工具)与集群交互

5. Kubernetes在线环境

killercoda

Play with Kubernetes

在线环境的k8s不稳定,需要稳定的k8s建议使用自己本地部署的

6. kubectl常用命令

可以在Kubernetes kubectl 命令表 _ Kubernetes(K8S)中文文档_Kubernetes中文社区

kubectl 是 Kubernetes 的命令行工具,用于管理 Kubernetes 集群。

(1)集群信息

  • 查看集群信息
  kubectl cluster-info
  • 查看节点状态
  kubectl get nodes
  • 查看 Kubernetes 版本
  kubectl version

(2)资源管理

查看资源

  • 查看所有命名空间的 Pod
  kubectl get pods -A
  • 查看指定命名空间的资源(如 default
  kubectl get pods -n default
  • 查看所有资源(Pods、Deployments、Services 等)
  kubectl get all
  • 查看详细信息(如 Pod)
  kubectl describe pod <pod-name> -n <namespace>

创建/删除资源

  • 通过 YAML 文件创建资源
  kubectl apply -f deployment.yaml
  • 删除资源
  kubectl delete -f deployment.yaml
  kubectl delete pod <pod-name> -n <namespace>

(3)Pod 操作

  • 查看 Pod 日志
  kubectl logs <pod-name> -n <namespace>
  • 进入 Pod 的 Shell
  kubectl exec -it <pod-name> -n <namespace> -- /bin/bash
  • 查看 Pod 的详细信息
  kubectl describe pod <pod-name> -n <namespace>

(4)Deployment 操作

  • 查看 Deployment
  kubectl get deployments -n <namespace>
  • 扩缩容 Deployment
  kubectl scale deployment <deployment-name> --replicas=3 -n <namespace>
  • 更新 Deployment(如镜像版本)
  kubectl set image deployment/<deployment-name> <container-name>=<new-image> -n <namespace>
  • 回滚 Deployment
  kubectl rollout undo deployment/<deployment-name> -n <namespace>

(5)Service 操作

  • 查看 Service
  kubectl get svc -n <namespace>
  • 暴露 Deployment 为 Service
  kubectl expose deployment <deployment-name> --port=80 --target-port=8080 --type=NodePort -n <namespace>

(6)调试与故障排查

  • 查看事件(Events)
  kubectl get events -n <namespace>
  • 查看资源使用情况(需安装 metrics-server)
  kubectl top nodes
  kubectl top pods -n <namespace>
  • 端口转发(访问 Pod 内部端口)
  kubectl port-forward <pod-name> 8080:80 -n <namespace>

(7)配置管理

  • 查看 ConfigMap
  kubectl get configmaps -n <namespace>
  • 查看 Secret
  kubectl get secrets -n <namespace>

(8)其他常用命令

  • 查看 API 资源列表
  kubectl api-resources
  • 查看当前上下文(Context)
  kubectl config current-context
  • 切换上下文(如切换到不同集群)
  kubectl config use-context <context-name>

总结

这些命令覆盖了 kubectl 的常见使用场景,适用于日常 Kubernetes 集群管理。如果需要更详细的帮助,可以使用:

kubectl --help
kubectl <command> --help  # 如 kubectl get --help

一般来说不会单独创建一个Pod,而是通过创建它的上层对象如Deploment来自动创建Pod

一个简单的创建例子

7. YAML配置文件的使用

如果所有配置项都在命令行操作比较麻烦,因此一般将配置项放在配置文件中,使用配置文件创建和管理资源对象

下面是一个配置文件的例子

replicas:3表示有三个副本

使用create命令应用配置文件的内容,k8s会创建资源对象

删除资源对象

可以选择使用apply命令应用配置文件的内容,将内容应用到集群中,k8s会创建或更新资源对象

8. 配置和公开服务

一个服务配置的例子

常用服务类型

9. 使用Portainer管理集群

Portainer提供一个可视化的界面管理集群资源对象

通过官网配置文件获取

-n 指定命名空间即命名空间为portainer

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐