在生产环境中,如何高效管理成百上千个容器实例?如何实现服务的高可用和自动扩缩容?Kubernetes作为云原生时代的标准编排工具,能帮你解决这些难题。
本文将带你从零开始搭建K8s集群,掌握核心组件配置和服务管理技巧。
目录
1. Kubernetes核心概念
Kubernetes是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。理解其核心组件是集群搭建的基础。
核心组件:
- • Master节点:集群的大脑,负责集群决策和调度
- • Controller Manager:维护集群状态
- • Container Runtime:容器运行环境
关键概念:
- • Pod:K8s最小部署单元,包含一个或多个容器
- • Deployment:声明式部署控制器,管理Pod副本
- • Ingress:集群入口,管理HTTP/HTTPS路由
2. 单节点集群搭建
对于学习和测试,单节点集群是最快速的方式。
快速搭建方法:使用Minikube一键启动:
# 安装Minikubecurl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64sudo install minikube-linux-amd64 /usr/local/bin/minikube# 启动单节点集群minikube start --driver=docker --cpus=2 --memory=4096# 验证集群状态kubectl get nodeskubectl get pods -A
配置说明:
- •
--driver=docker:使用Docker作为运行时 - •
--cpus=2 --memory=4096:分配2核4G资源
3. 多节点集群部署
生产环境需要多节点集群来保证高可用。
kubeadm集群搭建:
# 1. 准备三台服务器(1 Master + 2 Worker)# 2. 安装Dockercurl -fsSL https://get.docker.com | sh# 3. 安装kubeadm、kubelet、kubectlapt-get updateapt-get install -y kubelet kubeadm kubectl# 4. 初始化Master节点kubeadm init --apiserver-advertise-address=192.168.1.100 \ --pod-network-cidr=10.244.0.0/16 \ --ignore-preflight-errors=NumCPU# 5. 配置kubectlmkdir -p $HOME/.kubecp -i /etc/kubernetes/admin.conf $HOME/.kube/configchown $(id -u):$(id -g) $HOME/.kube/config# 6. 加入Worker节点kubeadm join 192.168.1.100:6443 \ --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:abcdef...# 7. 验证集群kubectl get nodes
网络配置:
- • 需要安装网络插件(如Flannel、Calico)
4. 服务暴露与负载均衡
将K8s服务暴露给外部访问有多种方式。
Service类型:
Ingress配置示例:
# ingress.yamlapiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: my-app-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /spec: rules: - host: myapp.example.com http: paths: - path: / pathType: Prefix backend: service: name: my-app port: number: 80
# 应用配置kubectl apply -f ingress.yaml# 验证kubectl get ingress
负载均衡策略:
- • 结合Ingress Controller实现高级路由规则
5. 生产环境最佳实践
生产环境部署需要考虑稳定性、安全性和可维护性。
资源管理:
# 设置资源限制resources: requests: memory: "256Mi" cpu: "250m" limits: memory: "512Mi" cpu: "500m"
健康检查:
# 探针配置livenessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 30 periodSeconds: 10readinessProbe: httpGet: path: /ready port: 8080 initialDelaySeconds: 5 periodSeconds: 5
安全加固:
监控与日志:
总结
Kubernetes集群部署涉及多个组件和配置,掌握核心概念是关键。单节点集群适合学习和测试,多节点集群满足生产需求。