Kubernetes 核心概念与一次部署实战
## 一、Kubernetes 是什么
Kubernetes(K8s)是容器编排平台,解决"把一堆容器稳定地跑在集群上"的问题:自动调度、扩缩容、自愈、服务发现、滚动发布。
## 二、整体架构
- 控制面:API Server(唯一入口)、etcd(存集群状态)、Scheduler(把 Pod 调度到节点)、Controller Manager(维持期望状态)。
- 工作节点:kubelet(管理本节点 Pod)、kube-proxy(Service 网络)、容器运行时(如 containerd)。
## 三、核心对象
- Pod:最小调度单元,一个或多个共享网络/存储的容器。
- Deployment:管理 Pod 副本与滚动更新。
- Service:为一组 Pod 提供稳定访问入口(ClusterIP / NodePort / LoadBalancer)。
- Ingress:七层入口,按域名/路径转发。
- ConfigMap / Secret:配置与敏感信息注入。
- Namespace:逻辑隔离。
## 四、一次部署实战
下面用一个 Nginx 示例,声明 3 副本 Deployment 加一个 Service:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-demo
spec:
replicas: 3
selector:
matchLabels:
app: nginx-demo
template:
metadata:
labels:
app: nginx-demo
spec:
containers:
- name: nginx
image: nginx:1.27
ports:
- containerPort: 80
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "256Mi"
---
apiVersion: v1
kind: Service
metadata:
name: nginx-demo
spec:
selector:
app: nginx-demo
ports:
- port: 80
targetPort: 80
type: ClusterIP
```
常用命令:
```bash
kubectl apply -f deploy.yaml
kubectl get pods -o wide
kubectl rollout status deploy/nginx-demo
kubectl scale deploy/nginx-demo --replicas=5
kubectl describe pod <pod> # 排障
kubectl logs <pod> # 看日志
```
## 五、最佳实践
- 一定设置 resources 的 requests/limits,避免资源争抢与 OOM。
- 配置 readiness/liveness 探针做健康检查。
- 镜像打固定 tag,不要用 latest。
- 无状态服务用 Deployment,配合滚动更新与 kubectl rollout undo 回滚。
- 配置与密钥走 ConfigMap/Secret,不写进镜像。
- 生产环境用 Namespace + RBAC + NetworkPolicy 做隔离与最小权限。
结语:掌握 Pod / Deployment / Service 三件套,加上 YAML 声明式管理,就能覆盖大部分日常场景。
- 点赞
- 收藏
- 关注作者
评论(0)