Kubernetes功能及核心概念
可能本篇文章文字居多,但也希望能认真阅读,因为Kubernetes的概念相对来说比较重要,以及在大家学习的过程中也会感觉到略微抽象
一,首先什么是Kubernetes?
Kubernetes是一个开源的容器编排工具,用于自动部署,扩展和管理容器。可轻松的管理大规模的管理容器化的工作负载。以下简称就是k8s了(因为k与s之间有8个字符所以简称k8s)。
二,Kubernetes和Docker有什么不一样?
Docker属于容器化平台,提供了简单易用的容器化工具。可以对程序进行构建,打包,容器化。更侧重于容器的构建和运行。
Kubernetes则属于一种编排工具,更侧重于多个容器组成的应用程序的编排和管理,提供了更多的功能(如下)及概念(如下),帮助用户更轻松地管理复杂的容器化工作负载。
三,K8s的主要功能。
- **自动化部署:**可以自动化部署容器化的应用,并根据使用需求进行自动扩展和调度。
- 自我修复: k8s可以监控应用程序的健康状态,并在出故障时自动重启。就好比某个服务挂了,可以自动修复重启。
- **水平扩展:**k8s可根据当前服务器的负载,创建程序的副本数量。从而满足对资源的需求,也可以根据自定义的策略进行调整。
- 服务发现和负载均衡: k8s提供了内置的服务发现和负载均衡。可平衡流量的负载。用户可通过定义的服务来暴露程序。应用与路由及副本之间。
- 密钥和配置管理: k8s可安全存储敏感信息和应用程序的配置,将敏感信息存储在私密中,并配置在configMaps中,然后在容器中使用他们。这里打个比方比如环境变量或证书。
- **存储编排:**k8s支持持久化存储,根据需求自动挂载储存卷用户可通过定义PV(资源对象,好比数据)和PVC(声名pv的资源是某个节点上的)对象进行请求和持久化存储。
- 批处理执行: 可进行批量作用和定时任务执行,可根据用户的需求自动调度和管理批量处理任务。通过定义Job和CronJob来实现。
四,K8s核心概念。
- **Pod(Pod):**pod是k8s中最小的可部署单元,它可以包含一个或多个容器。这些容器共享网络和命名空间和持久卷,可与本地的主机进行进程间的通信。
- **Deployment(部署):**用于定义Pod的副本数量和更新策略。可确保指定数量的Pod开始终止运行,并控制如何进行滚动更新。功能如起名。
- **Service(服务):**可以定义一组Pod的访问方式,为Pod提供稳定的网络节点,并通过负载均衡分发流量。
- **Namespace(命名空间):**用于划分虚拟集群的机制,允许在同一个k8s集群中创建多个隔离的工作区,通俗说就是用命名空间对资源之间进行隔离,并且创建单独的工作区,跟k,v有的像。
- **Volume(存储卷):**是k8s中用于持久化的机制。可以持久化存储挂载到Pod中,并使得数据可以跨容器共享。持久化数据使用。
- **ConfigMap 和 Secret(配置映射和密钥):**用于存储信息和敏感数据和对象,可以在Pod中注入环境变量或文件,证书。并应用到程序中使用。
- **StatefulSet(有状态副本集):**用于运作有状态的应用程序的控制器。可以确保在集群中创建固定数量的副本,并为每个副本分配稳定的网络和持久化存储。
- Job 和 CronJob(作业和定时任务): Job 和 CronJob 是用于执行一次性或定时任务的对象。Job 用于运行一次性任务,而 CronJob 则用于按照指定的时间表运行任务。
Kubernetes指令与参数
指令与参数:(按核心概念划分)
-
Pod(Pod):
- 创建一个 Pod:
kubectl create pod <pod_name> --image=<image>
--restart
:设置 Pod 的重启策略。--env
:设置环境变量。--limits
和--requests
:设置容器的资源限制和请求。--command
和--args
:指定容器的启动命令和参数。--port
:指定容器监听的端口。--labels
:为 Pod 添加标签。--annotations
:为 Pod 添加注释。--namespace
:指定 Pod 所属的命名空间。--stdin
、--stdout
和--tty
:设置容器的标准输入、输出和伪终端。
- 获取 Pod 列表:
kubectl get pods
- 查看 Pod 的详细信息:
kubectl describe pod <pod_name>
- 删除一个 Pod:
kubectl delete pod <pod_name>
- 创建一个 Pod:
-
Deployment(部署):
- 创建一个 Deployment:
kubectl create deployment <deployment_name> --image=<image>
--replicas
:设置 Deployment 的副本数量。--port
:指定容器监听的端口。--labels
:为 Deployment 添加标签。--namespace
:指定
- 创建一个 Deployment: