如何在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集成),可在现有基础上引入上述工具,实现端到端自动化部署。希望本文对你构建企业级容器平台有所帮助。

浙公网安备 33010602011771号