公司网站突然访问变慢,运维小李一查发现是某个ref="/tag/414/" style="color:#3D6345;font-weight:bold;">服务挂了。以前得手动重启,现在他只改了一行配置,几分钟后新实例自动上线,用户甚至没察觉异常。这背后靠的就是Kubernetes部署容器。
为啥要用Kubernetes管容器?
以前一台服务器跑一个应用,像家里用一台电视看节目。后来上了Docker,一台机器能跑几十个容器,就像买了多个小电视同时播不同频道。可问题来了——哪个坏了怎么换?流量大了怎么加?这时候就得有个“遥控器”,Kubernetes就是干这个的。
它能把一堆服务器当成资源池统一调度,容器挂了自动拉起,扩容缩容一条命令搞定。比如双十一前电商系统压力大增,K8s可以根据CPU使用率自动多启几个订单处理容器,活动结束再自动回收,省资源又省心。
动手部署一个Nginx容器
假设你已经搭好了Kubernetes集群,现在要部署一个网页服务。第一步写个YAML文件描述需求:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx:latest
ports:
- containerPort: 80
这个Deployment声明要运行3个Nginx副本。保存为deploy.yaml后执行:kubectl apply -f deploy.yaml
Kubernetes就会在集群里找合适节点启动这些容器。
暴露服务给外部访问
光有容器还不够,还得让人能访问到。加个Service把它们暴露出去:
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
type: NodePort
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
执行后就能通过任意节点IP加30080端口访问Nginx页面了。内部Pod出问题会自动替换,外面的访问不受影响。
这种自动化管理方式特别适合微服务架构。每个功能模块独立打包成镜像,由K8s统一编排启动顺序、网络连接和健康检查。开发团队各管各的服务,运维不用天天盯着进程是不是崩了。
刚开始接触可能觉得YAML文件难记,但一旦熟悉之后,部署效率提升明显。早上开会说要上线新功能,下午写好配置推上去,晚上就能看到效果。比起传统方式动辄半天准备环境,这种方式确实快得多。