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

环境准备
首先需要准备至少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