从零到一:Kubernetes集群部署与容器化应用实战指南
2025.09.26 16:38浏览量:0简介:本文详解Kubernetes集群部署全流程,涵盖环境准备、组件安装、集群验证及容器化应用部署,适合运维工程师和开发者快速掌握Kubernetes核心技能。
一、Kubernetes部署前环境准备
1.1 硬件资源规划
Kubernetes集群的硬件配置直接影响集群性能和稳定性。生产环境建议:
- Master节点:4核CPU、16GB内存、100GB磁盘(SSD优先)
- Worker节点:8核CPU、32GB内存、200GB磁盘(根据容器密度调整)
- 网络要求:千兆以太网,节点间延迟<1ms
典型三节点集群配置示例:
# 示例:集群节点角色分配nodes:- master1: 192.168.1.10 (控制平面+ETCD)- worker1: 192.168.1.11 (计算节点)- worker2: 192.168.1.12 (计算节点)
1.2 操作系统优化
推荐使用CentOS 7/8或Ubuntu 20.04 LTS,需完成以下配置:
# 禁用SELinux(临时)sudo setenforce 0# 永久禁用需修改/etc/selinux/config# 关闭交换分区sudo swapoff -a# 注释/etc/fstab中的swap行防止重启生效# 配置内核参数cat <<EOF | sudo tee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1vm.swappiness=0EOFsudo sysctl --system
1.3 容器运行时选择
Kubernetes 1.24+版本移除了Docker支持,推荐使用:
- containerd:轻量级,CNCF毕业项目
- CRI-O:专注于Kubernetes的容器运行时
安装containerd示例:
# 添加Docker仓库(containerd包在此仓库)sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# 安装containerdsudo yum install -y containerd.io# 生成默认配置sudo mkdir -p /etc/containerdcontainerd config default | sudo tee /etc/containerd/config.toml# 启用systemd cgroup驱动(与kubelet兼容)sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml# 启动服务sudo systemctl enable --now containerd
二、Kubernetes集群安装
2.1 使用kubeadm初始化集群
安装必备工具:
# 添加Kubernetes仓库cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearchenabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpgEOF# 安装kubeadm/kubelet/kubectlsudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetessudo systemctl enable --now kubelet
初始化Master节点:
# 使用云提供商的pod网络CIDR(示例使用flannel)sudo kubeadm init --pod-network-cidr=10.244.0.0/16# 初始化完成后需执行(非root用户操作)mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
2.2 添加Worker节点
在Worker节点执行Master节点初始化时输出的join命令:
# 示例命令(实际命令以初始化输出为准)kubeadm join 192.168.1.10:6443 --token abcdef.1234567890abcdef \--discovery-token-ca-cert-hash sha256:xxxxxx
验证节点状态:
kubectl get nodes# 预期输出:# NAME STATUS ROLES AGE VERSION# master1 Ready control-plane 5m v1.28.0# worker1 Ready <none> 2m v1.28.0
三、网络插件部署
3.1 Calico网络方案
适用于生产环境的高性能网络插件:
# 应用Calico清单kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml# 验证网络状态kubectl get pods -n kube-system | grep calico# 预期所有Pod处于Running状态
3.2 核心组件验证
检查关键系统Pod:
kubectl get pods -n kube-system# 必须运行的组件:# - coredns (DNS服务)# - kube-apiserver/controller-manager/scheduler (控制平面)# - etcd (键值存储)
四、容器化应用部署实践
4.1 创建Deployment
示例Nginx部署清单:
# nginx-deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: nginx-deploymentspec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.25ports:- containerPort: 80resources:requests:cpu: "100m"memory: "128Mi"limits:cpu: "500m"memory: "512Mi"
部署命令:
kubectl apply -f nginx-deployment.yamlkubectl rollout status deployment/nginx-deployment
4.2 创建Service暴露服务
NodePort方式示例:
# nginx-service.yamlapiVersion: v1kind: Servicemetadata:name: nginx-servicespec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80nodePort: 30080type: NodePort
验证访问:
# 获取NodePort端口kubectl get svc nginx-service# 在任意节点执行(或通过负载均衡器)curl http://<worker-node-ip>:30080
五、集群维护与升级
5.1 版本升级流程
升级前准备:
# 检查可升级版本sudo apt-get updatesudo apt-get install -y kubeadm=1.29.0-00 kubelet=1.29.0-00 kubectl=1.29.0-00# 排水Worker节点kubectl drain worker1 --ignore-daemonsets --delete-emptydir-data# 升级Master节点sudo kubeadm upgrade plansudo kubeadm upgrade apply v1.29.0# 升级Worker节点sudo systemctl restart kubelet# 恢复节点kubectl uncordon worker1
5.2 备份与恢复
ETCD备份方案:
# 创建备份目录mkdir -p /backup/etcd# 执行备份(需在Master节点操作)ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \--cacert=/etc/kubernetes/pki/etcd/ca.crt \--cert=/etc/kubernetes/pki/etcd/server.crt \--key=/etc/kubernetes/pki/etcd/server.key \snapshot save /backup/etcd/snapshot.db# 验证备份ETCDCTL_API=3 etcdctl --write-out=table snapshot status /backup/etcd/snapshot.db
六、生产环境最佳实践
- 高可用架构:部署3个Master节点,使用负载均衡器暴露API Server
- 资源配额管理:通过Namespace和ResourceQuota限制团队资源使用
- 监控体系:集成Prometheus+Grafana监控集群指标
- 日志方案:使用EFK(Elasticsearch+Fluentd+Kibana)或Loki+Grafana方案
- 安全加固:
- 启用RBAC权限控制
- 定期轮换证书
- 使用PodSecurityPolicy或OPA Gatekeeper
典型生产集群配置示例:
# 集群自动扩缩容配置apiVersion: autoscaling/v1kind: HorizontalPodAutoscalermetadata:name: nginx-hpaspec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: nginx-deploymentminReplicas: 3maxReplicas: 10targetCPUUtilizationPercentage: 80
通过以上步骤,您已成功完成Kubernetes集群的部署与基础应用运行。实际生产环境中,建议结合CI/CD流水线实现自动化部署,并建立完善的监控告警体系。根据业务负载特点,可进一步优化调度策略(如节点亲和性、污点容忍度等)以提升资源利用率。

发表评论
登录后可评论,请前往 登录 或 注册