如何在Linux上部署高可用的容器化应用

来源:AI智能体作者:深圳网站建设头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何在Linux上部署高可用的容器化应用》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在Linux上部署高可用的容器化应用》有用,将其分享出去将是对创作者最好的鼓励。

在Linux系统中部署高可用的容器化应用,核心是通过容器编排工具实现应用的冗余部署、故障自动转移和负载均衡,避免单点故障导致服务不可用。本文以Docker作为容器运行时,Kubernetes作为编排工具,演示完整的高可用部署流程。

如何在Linux上部署高可用的容器化应用

环境准备

首先需要准备至少3台Linux服务器,建议选择CentOS 7及以上版本或者Ubuntu 18.04及以上版本,配置至少2核4G内存,确保服务器之间网络互通,且可以访问外网或者配置好内部镜像源。

安装Docker运行时

所有节点都需要安装Docker,以下是CentOS系统的安装步骤:

# 卸载旧版本Docker
sudo yum remove docker docker-common docker-selinux docker-engine

# 安装依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加Docker源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 启动Docker并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 验证Docker安装成功
sudo docker --version

部署Kubernetes高可用集群

Kubernetes集群的高可用需要部署多个控制平面节点,本文使用kubeadm工具搭建集群,包含3个控制平面节点和2个工作节点。

安装Kubernetes组件

所有节点都需要安装kubelet、kubeadm和kubectl,以下是安装步骤:

# 添加Kubernetes源
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
EOF

# 安装组件
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

# 启动kubelet并设置开机自启
sudo systemctl enable --now kubelet

初始化第一个控制平面节点

选择一台服务器作为第一个控制平面节点,执行初始化命令:

# 初始化集群,指定Pod网段和Service网段
sudo kubeadm init 
  --control-plane-endpoint "192.168.0.100:6443" 
  --upload-certs 
  --pod-network-cidr=10.244.0.0/16 
  --service-cidr=10.96.0.0/12

# 配置kubectl访问权限
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

初始化完成后,按照命令提示将其余控制平面节点加入集群,工作节点也通过对应的kubeadm join命令加入集群。

部署容器网络插件

集群初始化完成后需要部署网络插件,这里选择Flannel作为网络方案:

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.22.0/Documentation/kube-flannel.yml

部署高可用容器化应用

以部署一个Nginx应用为例,通过Deployment实现多副本部署,通过Service实现负载均衡。

创建应用部署配置

编写Nginx的Deployment配置文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  # 设置副本数为3,实现高可用
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25
        ports:
        - containerPort: 80
        # 配置健康检查
        livenessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 5

创建Service暴露应用

编写Service配置文件,使用LoadBalancer或者NodePort类型暴露服务:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  # NodePort类型可以在所有节点固定端口访问
  type: NodePort
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      # 节点暴露端口,范围30000-32767
      nodePort: 30080

应用配置并验证

执行以下命令部署应用:

# 部署Deployment
kubectl apply -f nginx-deployment.yaml

# 部署Service
kubectl apply -f nginx-service.yaml

# 查看Pod运行状态
kubectl get pods -o wide

# 查看Service状态
kubectl get svc

部署完成后,可以通过任意节点的IP加30080端口访问Nginx服务,当某个Pod故障时,Kubernetes会自动重启或者调度新的Pod,保证始终有3个可用副本。

高可用策略补充

为了进一步提升应用的高可用性,还可以配置以下策略:

  • 配置Pod反亲和性,让同一个应用的Pod调度到不同的节点,避免节点故障导致所有副本不可用
  • 配置资源预留,避免某个应用占用过多资源影响其他应用运行
  • 开启Kubernetes的自动扩缩容功能,根据CPU或者内存使用率自动调整Pod副本数
  • 配置持久化存储,避免Pod重启后数据丢失

常见问题排查

部署过程中如果遇到问题,可以通过以下命令排查:

# 查看Pod详细信息
kubectl describe pod [pod名称]

# 查看Pod日志
kubectl logs [pod名称]

# 查看节点状态
kubectl get nodes

# 查看集群组件状态
kubectl get componentstatuses

DockerKubernetes高可用Linux修改时间:2026-06-13 20:00:18

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。