logo

从零到一: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

典型三节点集群配置示例:

  1. # 示例:集群节点角色分配
  2. nodes:
  3. - master1: 192.168.1.10 (控制平面+ETCD)
  4. - worker1: 192.168.1.11 (计算节点)
  5. - worker2: 192.168.1.12 (计算节点)

1.2 操作系统优化

推荐使用CentOS 7/8或Ubuntu 20.04 LTS,需完成以下配置:

  1. # 禁用SELinux(临时)
  2. sudo setenforce 0
  3. # 永久禁用需修改/etc/selinux/config
  4. # 关闭交换分区
  5. sudo swapoff -a
  6. # 注释/etc/fstab中的swap行防止重启生效
  7. # 配置内核参数
  8. cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
  9. net.bridge.bridge-nf-call-ip6tables = 1
  10. net.bridge.bridge-nf-call-iptables = 1
  11. vm.swappiness=0
  12. EOF
  13. sudo sysctl --system

1.3 容器运行时选择

Kubernetes 1.24+版本移除了Docker支持,推荐使用:

  • containerd:轻量级,CNCF毕业项目
  • CRI-O:专注于Kubernetes的容器运行时

安装containerd示例:

  1. # 添加Docker仓库(containerd包在此仓库)
  2. sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  3. # 安装containerd
  4. sudo yum install -y containerd.io
  5. # 生成默认配置
  6. sudo mkdir -p /etc/containerd
  7. containerd config default | sudo tee /etc/containerd/config.toml
  8. # 启用systemd cgroup驱动(与kubelet兼容)
  9. sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
  10. # 启动服务
  11. sudo systemctl enable --now containerd

二、Kubernetes集群安装

2.1 使用kubeadm初始化集群

安装必备工具:

  1. # 添加Kubernetes仓库
  2. cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
  3. [kubernetes]
  4. name=Kubernetes
  5. baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
  6. enabled=1
  7. gpgcheck=1
  8. repo_gpgcheck=1
  9. gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
  10. EOF
  11. # 安装kubeadm/kubelet/kubectl
  12. sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
  13. sudo systemctl enable --now kubelet

初始化Master节点:

  1. # 使用云提供商的pod网络CIDR(示例使用flannel)
  2. sudo kubeadm init --pod-network-cidr=10.244.0.0/16
  3. # 初始化完成后需执行(非root用户操作)
  4. mkdir -p $HOME/.kube
  5. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  6. sudo chown $(id -u):$(id -g) $HOME/.kube/config

2.2 添加Worker节点

在Worker节点执行Master节点初始化时输出的join命令:

  1. # 示例命令(实际命令以初始化输出为准)
  2. kubeadm join 192.168.1.10:6443 --token abcdef.1234567890abcdef \
  3. --discovery-token-ca-cert-hash sha256:xxxxxx

验证节点状态:

  1. kubectl get nodes
  2. # 预期输出:
  3. # NAME STATUS ROLES AGE VERSION
  4. # master1 Ready control-plane 5m v1.28.0
  5. # worker1 Ready <none> 2m v1.28.0

三、网络插件部署

3.1 Calico网络方案

适用于生产环境的高性能网络插件:

  1. # 应用Calico清单
  2. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
  3. # 验证网络状态
  4. kubectl get pods -n kube-system | grep calico
  5. # 预期所有Pod处于Running状态

3.2 核心组件验证

检查关键系统Pod:

  1. kubectl get pods -n kube-system
  2. # 必须运行的组件:
  3. # - coredns (DNS服务)
  4. # - kube-apiserver/controller-manager/scheduler (控制平面)
  5. # - etcd (键值存储)

四、容器化应用部署实践

4.1 创建Deployment

示例Nginx部署清单:

  1. # nginx-deployment.yaml
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. name: nginx-deployment
  6. spec:
  7. replicas: 3
  8. selector:
  9. matchLabels:
  10. app: nginx
  11. template:
  12. metadata:
  13. labels:
  14. app: nginx
  15. spec:
  16. containers:
  17. - name: nginx
  18. image: nginx:1.25
  19. ports:
  20. - containerPort: 80
  21. resources:
  22. requests:
  23. cpu: "100m"
  24. memory: "128Mi"
  25. limits:
  26. cpu: "500m"
  27. memory: "512Mi"

部署命令:

  1. kubectl apply -f nginx-deployment.yaml
  2. kubectl rollout status deployment/nginx-deployment

4.2 创建Service暴露服务

NodePort方式示例:

  1. # nginx-service.yaml
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: nginx-service
  6. spec:
  7. selector:
  8. app: nginx
  9. ports:
  10. - protocol: TCP
  11. port: 80
  12. targetPort: 80
  13. nodePort: 30080
  14. type: NodePort

验证访问:

  1. # 获取NodePort端口
  2. kubectl get svc nginx-service
  3. # 在任意节点执行(或通过负载均衡器)
  4. curl http://<worker-node-ip>:30080

五、集群维护与升级

5.1 版本升级流程

升级前准备:

  1. # 检查可升级版本
  2. sudo apt-get update
  3. sudo apt-get install -y kubeadm=1.29.0-00 kubelet=1.29.0-00 kubectl=1.29.0-00
  4. # 排水Worker节点
  5. kubectl drain worker1 --ignore-daemonsets --delete-emptydir-data
  6. # 升级Master节点
  7. sudo kubeadm upgrade plan
  8. sudo kubeadm upgrade apply v1.29.0
  9. # 升级Worker节点
  10. sudo systemctl restart kubelet
  11. # 恢复节点
  12. kubectl uncordon worker1

5.2 备份与恢复

ETCD备份方案:

  1. # 创建备份目录
  2. mkdir -p /backup/etcd
  3. # 执行备份(需在Master节点操作)
  4. ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
  5. --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  6. --cert=/etc/kubernetes/pki/etcd/server.crt \
  7. --key=/etc/kubernetes/pki/etcd/server.key \
  8. snapshot save /backup/etcd/snapshot.db
  9. # 验证备份
  10. ETCDCTL_API=3 etcdctl --write-out=table snapshot status /backup/etcd/snapshot.db

六、生产环境最佳实践

  1. 高可用架构:部署3个Master节点,使用负载均衡器暴露API Server
  2. 资源配额管理:通过Namespace和ResourceQuota限制团队资源使用
  3. 监控体系:集成Prometheus+Grafana监控集群指标
  4. 日志方案:使用EFK(Elasticsearch+Fluentd+Kibana)或Loki+Grafana方案
  5. 安全加固
    • 启用RBAC权限控制
    • 定期轮换证书
    • 使用PodSecurityPolicy或OPA Gatekeeper

典型生产集群配置示例:

  1. # 集群自动扩缩容配置
  2. apiVersion: autoscaling/v1
  3. kind: HorizontalPodAutoscaler
  4. metadata:
  5. name: nginx-hpa
  6. spec:
  7. scaleTargetRef:
  8. apiVersion: apps/v1
  9. kind: Deployment
  10. name: nginx-deployment
  11. minReplicas: 3
  12. maxReplicas: 10
  13. targetCPUUtilizationPercentage: 80

通过以上步骤,您已成功完成Kubernetes集群的部署与基础应用运行。实际生产环境中,建议结合CI/CD流水线实现自动化部署,并建立完善的监控告警体系。根据业务负载特点,可进一步优化调度策略(如节点亲和性、污点容忍度等)以提升资源利用率。

相关文章推荐

发表评论

活动