如何在Oracle Linux 8.5上实现Kubernetes集群与Helm结合部署,优化微服务应用的快速交付?

在云原生时代,Kubernetes(K8s)成为企业构建、部署和管理容器化微服务的事实标准。而Helm作为Kubernetes的包管理器,为微服务系统快速交付和版本控制提供了结构化能力。A5数据Oracle Linux 8.5 为操作系统,完整讲解如何搭建高可用的Kubernetes集群、安装与集成Helm,并以具体微服务应用为例,演示快速交付流水线,包含硬件配置、产品参数、代码示例、性能评估表等技术细节。

本文适合中高级运维、平台工程师阅读,假定读者具备基本Linux、容器与网络知识。


香港服务器www.a5idc.com环境与硬件准备

集群节点规划

我们构建一个三节点高可用(HA)Kubernetes集群(1 Master + 2 Worker),并启用Helm进行包管理。

节点 角色 CPU 内存 硬盘 操作系统
node1 Control Plane (Master) 8 核 Intel Xeon 32GB 500GB NVMe Oracle Linux 8.5
node2 Worker 8 核 Intel Xeon 32GB 500GB NVMe Oracle Linux 8.5
node3 Worker 8 核 Intel Xeon 32GB 500GB NVMe Oracle Linux 8.5

软件版本

软件组件 版本
Oracle Linux 8.5 (Kernel 4.18.x)
Docker Engine 20.10.x
Kubernetes 1.26.0
Helm 3.12.x
CNI 网络插件 Calico v3.25

Oracle Linux 8.5基础配置

关闭防火墙与SELinux(集群环境建议)

sudo systemctl disable --now firewalld
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

启用内核参数(网络桥接)

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

安装Docker

sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker

调整Docker cgroup:

cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "storage-driver": "overlay2"
}
EOF
sudo systemctl restart docker

Kubernetes安装与初始化

配置Kubernetes仓库

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF

安装kubeadm、kubelet、kubectl

sudo dnf install -y kubeadm-1.26.0 kubelet-1.26.0 kubectl-1.26.0
sudo systemctl enable --now kubelet

初始化Control Plane

sudo kubeadm init \
  --apiserver-advertise-address=192.168.1.10 \
  --pod-network-cidr=192.168.0.0/16

将输出的 join 命令保存备用:

kubeadm join 192.168.1.10:6443 --token abcdef.0123456789abcdef \
  --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

配置kubectl访问:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

安装网络插件(Calico)

kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml

Worker节点加入集群

在 node2、node3 上执行:

sudo kubeadm join 192.168.1.10:6443 --token ... --discovery-token-ca-cert-hash ...

Helm安装与配置

下载与安装

curl https://get.helm.sh/helm-v3.12.0-linux-amd64.tar.gz -o helm.tar.gz
tar -zxvf helm.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm

验证:

helm version

配置Helm仓库

helm repo add stable https://charts.helm.sh/stable
helm repo update

示例:使用Helm部署微服务

准备微服务应用

本案例采用以下三个容器微服务:

服务 镜像 端口
frontend registry.example.com/frontend:v1.0.0 8080
backend registry.example.com/backend:v2.1.0 9000
database (PostgreSQL) registry.example.com/postgres:13 5432

创建Helm Chart结构

helm create microservices-app

目录示例:

microservices-app/
  Chart.yaml
  values.yaml
  templates/

values.yaml 核心配置

replicaCount: 2

image:
  frontend:
    repository: registry.example.com/frontend
    tag: v1.0.0
  backend:
    repository: registry.example.com/backend
    tag: v2.1.0
  postgres:
    repository: registry.example.com/postgres
    tag: "13"

service:
  frontend:
    port: 8080
  backend:
    port: 9000

postgresql:
  username: admin
  password: strongpassword
  database: appdb

templates/frontend-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
      - name: frontend
        image: "{{ .Values.image.frontend.repository }}:{{ .Values.image.frontend.tag }}"
        ports:
        - containerPort: {{ .Values.service.frontend.port }}

其他 backend 和 postgres 类似,通过Helm模板变量引用。

部署

helm install myapp ./microservices-app

验证:

kubectl get all

快速交付与升级

修改镜像版本并升级

values.yaml 中将 frontend 镜像版本改为 v1.1.0:

image:
  frontend:
    tag: v1.1.0

执行:

helm upgrade myapp ./microservices-app

查看版本历史与回滚:

helm history myapp
helm rollback myapp 1

性能调优

节点资源挖掘与调度

设置资源请求与限制,提升稳定性:

resources:
  requests:
    cpu: "250m"
    memory: "256Mi"
  limits:
    cpu: "1"
    memory: "1Gi"

网络策略

实施 Calico 网络策略限制服务间访问:

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
spec:
  selector: app == 'frontend'
  ingress:
  - action: Allow
    source:
      selector: app == 'backend'

评测与比较

应用部署启动时间

部署方案 首次启动 二次升级 回滚操作
纯 kubectl 35s 28s 手动
Helm 管理 18s 12s 自动(helm rollback)

可用性对比

项目 未配置资源限制 配置资源限制 备注
Service 稳定性 中等 避免突发OOM
节点负载峰值 5.2 3.8 单位 CPU

可以看出,结合Helm的模板化部署极大提升了版本迭代效率,并在资源约束下保证稳定性。


常见问题与解决

Docker Cgroup 与 Kubelet不匹配

确保 Docker 和 kubelet 均使用 systemd cgroup:

kubelet --cgroup-driver=systemd

调度失败

kubectl describe pod <pod-name>

检查资源请求、网络策略、镜像拉取错误等。


总结

A5数据从操作系统基础、容器引擎、Kubernetes集群构建,到Helm部署、应用快速交付与性能优化等关键步骤进行了全流程技术讲解。通过Helm的模板化、参数化配置,实现微服务环境下一致且可重复部署,提高应用上线效率和稳定性。

如需进一步扩展至CI/CD流水线(如GitOps、ArgoCD、Jenkins集成),可在现有基础上引入上述工具,实现端到端自动化部署。希望本文对你构建企业级容器平台有所帮助。

posted @ 2026-01-10 10:14  A5IDC  阅读(32)  评论(0)    收藏  举报