Kubernetes (K8s) 简介
Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动部署、扩展和管理容器化应用程序。K8s 最初由 Google 设计,并捐赠给 CNCF(云原生计算基金会)。
🔍 核心概念
K8s 的设计理念是将容器抽象为更高层的组件,以简化微服务部署。
术语 | 描述 |
---|---|
Pod | 最小部署单位,一个或多个容器的集合 |
Node | 集群中的一台主机(物理机或虚拟机) |
Cluster | 一组 Node 的集合 |
Namespace | 用于资源隔离的逻辑分区 |
Controller | 控制器,如 Deployment、StatefulSet、DaemonSet |
Service | 提供访问 Pod 的统一接口 |
Volume | 数据持久化支持,绑定至 Pod |
⚙️ 核心资源对象
1. Pod
Pod 是 Kubernetes 中最基本的运行单元,通常包含一个容器。
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
2. Deployment
Deployment 用于管理无状态应用的部署和 滚动更新。
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deploy
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx
tip
Deployment 会自动管理 Pod 的创建、扩容与升级。
3. Service
Service 用于定义访问 Pod 的网络策略。
apiVersion: v1
kind: Service
metadata:
name: web-svc
spec:
selector:
app: web
ports:
- port: 80
targetPort: 80
type: ClusterIP
4. ConfigMap 与 Secret
用于管理配置数据和敏感信息。
- ConfigMap
- Secret
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
ENV: production
LOG_LEVEL: debug
apiVersion: v1
kind: Secret
metadata:
name: app-secret
type: Opaque
data:
PASSWORD: cGFzc3dvcmQ= # base64 encoded
5. Volume(数据卷)
用于持久化数据存储。
apiVersion: v1
kind: Pod
metadata:
name: volume-pod
spec:
containers:
- name: app
image: busybox
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
emptyDir: {}
点击展开:其他 Volume 类型
emptyDir
:Pod 生命周期内临时存储hostPath
:挂载宿主机目录persistentVolumeClaim
:持久存储绑定(PVC)
📡 K8s 常用命令
kubectl get pods # 查看所有 Pod
kubectl get svc # 查看所有 Service
kubectl describe pod mypod # 查看 Pod 详情
kubectl logs mypod # 查看日志
kubectl exec -it mypod -- bash # 进入 Pod
caution
使用 kubectl apply
部署资源时,需确保 YAML 文件格式正确!
✨ 应用部署示例
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
点击展开:结合 configmap 和 secret 的部署实践
将 envFrom
引入到 Pod 的环境变量配置中:
envFrom:
- configMapRef:
name: app-config
- secretRef:
name: app-secret
✅ 总结
- Kubernetes 是容器编排平台的行业标准;
- Pod 是最小单位,Deployment 用于部署,Service 提供通信;
- 使用 ConfigMap、Secret 管理配置,Volume 实现数据持久化;
kubectl
是操作 K8s 的主要工具。