目录
1.Kubernetes是什么?
Kubernetes集群结构
核心组件
3.1.kube-apiserver
3.2.etcd
3.3.kube-scheduler
3.4.kube-controller-manager
3.5.kubelet
3.6.Container Runtime
3.7.kube-proxy
Pod、Deployment、Service
4.1.Pod
4.2.Deployment
4.3.Service
5.常见资源
6.kubectl常用命令
一个Deployment大概是怎么运行起来的?
最后总结
官方资料
1.Kubernetes是什么?
Kubernetes,简称K8s,主要用来管理容器化应用。
我目前的理解是:
Docker:负责运行容器
Kubernetes:负责管理一批容器
当容器数量变多以后,会遇到一些问题:
- 容器挂了怎么办?
- 多个容器放在哪台机器?
- 怎么扩容?
- 怎么更新版本?
- 怎么让用户访问这些容器?
Kubernetes就是帮助我们解决这些问题的。
官方文档:
概述 | Kubernetes
Kubernetes集群结构
一个 Kubernetes 集群可以先简单分成:
Kubernetes 集群
│
├── Control Plane
│
└── Node
我的理解:
Control Plane:负责管理集群
Node:负责真正运行应用
图片来源:Kubernetes 官方文档
核心组件
3.1.kube-apiserver
Kubernetes 的 API 入口。
平时执行:
kubectl get pods
kubectl apply -f deployment.yaml
这些请求都会和API Server交互。
可以记成:
kube-apiserver = Kubernetes 的总入口
3.2.etcd
保存Kubernetes集群中的重要数据。
3.3.kube-scheduler
负责决定新的Pod放到哪个 Node上。
kube-scheduler = 调度 Pod
3.4.kube-controller-manager
不断检查实际状态和期望状态是否一致。
比如希望运行3个Pod,如果挂了1个,就会想办法再补回来。
3.5.kubelet
运行在每个Node上,负责管理本机上的Pod。
kubelet = Node 上的管家
3.6.Container Runtime
真正负责运行容器。
常见的有:
- containerd
- CRI-O
3.7.kube-proxy
主要和Service网络访问有关。
官方文档:
Kubernetes 组件 | Kubernetes
Pod、Deployment、Service
4.1.Pod
Pod是Kubernetes中最小的可部署计算单元。
可以先简单理解成:
Pod
└── Container
图片来源:Kubernetes官方文档
官方文档:
Pod | Kubernetes
4.2.Deployment
Deployment用来管理Pod。
比如:
Deployment
│
├── Pod
├── Pod
└── Pod
它可以用来做:
- 管理副本数量
- 扩容、缩容
- 滚动更新
- 回滚
简单记:
Deployment = 管理 Pod
官方文档:
Deployments | Kubernetes
4.3.Service
Pod被重新创建以后,IP可能发生变化。
Service可以给一组Pod提供一个相对稳定的访问入口。
简单记:
Service = 给Pod提供统一访问入口
官方文档:
服务(Service) | Kubernetes
5.常见资源
资源 | 简单理解 |
Pod | 运行应用 |
Deployment | 管理Pod |
ReplicaSet | 保持Pod副本数量 |
Service | 提供稳定访问入口 |
Namespace | 给资源分组 |
ConfigMap | 保存普通配置 |
Secret | 保存敏感配置 |
Volume | 给Pod提供存储 |
Ingress | 管理HTTP/HTTPS外部访问 |
Label | 给资源贴标签 |
Selector | 根据标签选择资源 |
6.kubectl常用命令
查看Node:
kubectl get nodes
查看Pod:
kubectl get pods
查看Deployment:
kubectl get deployments
查看Service:
kubectl get svc
应用YAML:
kubectl apply -f xxx.yaml
删除资源:
kubectl delete -f xxx.yaml
查看详细信息:
kubectl describe pod pod名称
查看日志:
kubectl logs pod名称
官方文档:
命令行工具(kubectl) | Kubernetes
一个Deployment大概是怎么运行起来的?
执行:
kubectl apply -f deployment.yaml
可以先简单理解成:
kubectl
↓
API Server
↓
Controller
↓
Scheduler
↓
Node
↓
kubelet
↓
Pod
↓
Container
真实过程会更复杂,但学习阶段先记住这条主线就够用了。
最后总结
我目前对Kubernetes最简单的理解:
Pod:负责跑程序
Deployment:负责管理Pod
Service:负责让别人访问Pod
再加上:
Control Plane:负责管理集群
Node:负责真正运行应用
Kubernetes最重要的一个思想就是:
我们告诉Kubernetes希望最终是什么状态,它会尽量让实际状态保持成这个样子。
官方资料
Kubernetes概述:
概述 | Kubernetes
Kubernetes组件:
Kubernetes 组件 | Kubernetes
Pod:
Pod | Kubernetes
Deployment:
Deployments | Kubernetes
Service:
服务(Service) | Kubernetes
ConfigMap:
ConfigMap | Kubernetes
Secret:
Secret | Kubernetes
kubectl:
命令行工具(kubectl) | Kubernetes
本文属于个人学习笔记,部分内容为了方便学习入门进行了简化,详细说明还是以官方文档为准。