什么是云原生?别被术语吓到
你可能在技术群里听过“我们正在上云原生”这种话,听起来挺高大上。其实没那么玄乎。想象一下你家做饭,以前是自己种菜、养鸡、搭灶台,现在直接点外卖,用美团买菜,厨房还能随时扩容——这就是云原生的思路:不自己造轮子,专注做业务,其他交给平台。
核心四件套:容器、微服务、K8s、CI/CD
云原生不是单一技术,而是一套组合拳。最常听到的是这四个词:
- 容器(Docker):把应用和依赖打包成一个“盒子”,在哪都能跑
- 微服务:把大系统拆成小模块,比如用户管理、订单处理各干各的
- Kubernetes(K8s):管理一堆容器的“管家”,自动调度、重启、扩容
- CI/CD:代码一提交,自动测试、打包、上线,不用手动操作
动手试试:用 Docker 跑个网页应用
装好 Docker Desktop 后,打开终端,输入下面命令:
docker run -d -p 8080:80 nginx
等几秒,浏览器打开 http://localhost:8080,看到 Nginx 欢迎页就对了。你已经跑起一个容器化应用了。
再进一步:写个简单的 Dockerfile
新建一个文件叫 Dockerfile,内容如下:
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
这个文件告诉 Docker 怎么构建你的 Node.js 应用。执行 docker build -t myweb . 就能生成镜像,然后用 docker run -p 3000:3000 myweb 运行。
K8s 入门:先看懂 yaml 文件长啥样
K8s 用 yaml 配置一切。比如部署一个 Nginx 服务,写个 deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
保存后运行 kubectl apply -f deployment.yaml,两个 Nginx 实例就起来了。
推荐几个实用工具
刚入门别一上来就搞生产环境。这些工具帮你快速体验:
- Minikube:在本地跑一个单节点 K8s 集群,适合学习
- KinD(Kubernetes in Docker):更轻量,启动快,适合 CI 场景
- Skaffold:改代码自动重新构建、部署,开发时省事
- Argo CD:声明式发布,配置即代码,适合团队协作
真实场景:小电商后台怎么上云原生
假设你有个小电商平台,原来所有功能塞在一个项目里。现在拆成用户服务、商品服务、订单服务,每个用 Docker 打包,通过 K8s 管理。流量大了?自动加实例。某个服务崩了?自动重启。发新版?CI 流水线走完自动上线,不影响其他模块。
别踩坑:这些事早点知道更好
网络配置容易出问题,特别是 Pod 之间通信;日志分散在各个容器,得用 ELK 或 Loki 统一收集;还有权限管理、资源配额,一开始可以简单搞,但上线前必须设好。别以为“容器一跑就万事大吉”,运维复杂度其实是转移了,不是消失了。