AlmaLinux 云原生概览
AlmaLinux 为云原生应用提供了强大的基础平台支持,包含容器、Kubernetes、微服务等现代应用架构的完整技术栈。
云原生技术栈支持
容器技术
- Podman:无守护进程的容器引擎
- Buildah:容器镜像构建工具
- Skopeo:容器镜像管理工具
- CRI-O:Kubernetes 容器运行时
编排平台
- Kubernetes:容器编排平台
- OpenShift:企业级 Kubernetes 发行版
- Docker Swarm:轻量级容器集群
服务网格
- Istio:完整的服务网格解决方案
- Linkerd:轻量级服务网格
- Consul Connect:服务发现与配置
AlmaLinux 云原生优势
🛡️ 企业级稳定性
bash
# 查看系统稳定性指标
uptime
# 显示系统运行时间和负载
systemctl status
# 检查系统服务状态
journalctl --priority=err --since="1 hour ago"
# 查看最近一小时的错误日志
🔒 安全加固
- SELinux 容器隔离:为容器提供强制访问控制
- 安全扫描支持:集成 Trivy、Clair 等安全扫描工具
- 最小化攻击面:精简的容器镜像减少安全风险
⚡ 性能优化
- cgroup v2 支持:更好的资源管理和隔离
- 优化的内核:针对容器工作负载调优
- 高效的存储:支持 OverlayFS、ZFS 等高性能存储
容器镜像生态
官方容器镜像
镜像类型 | 标签 | 大小 | 用途 |
---|---|---|---|
基础镜像 | almalinux:9 | ~200MB | 通用开发和部署 |
最小化镜像 | almalinux:9-minimal | ~100MB | 微服务和轻量应用 |
微型镜像 | almalinux:9-micro | ~30MB | 极简容器应用 |
开发镜像 | almalinux:9-devel | ~400MB | 编译和开发环境 |
镜像拉取示例
bash
# 从不同镜像仓库拉取 AlmaLinux 镜像
# Docker Hub(国外)
podman pull docker.io/almalinux:9
# 阿里云容器镜像服务(国内推荐)
podman pull registry.cn-hangzhou.aliyuncs.com/almalinux/almalinux:9
# 中科大镜像(国内推荐)
podman pull docker.mirrors.ustc.edu.cn/almalinux:9
# 验证镜像
podman images | grep almalinux
多架构支持
bash
# 查看支持的架构
podman manifest inspect almalinux:9 | jq '.manifests[].platform'
# 输出示例:
# {
# "architecture": "amd64",
# "os": "linux"
# }
# {
# "architecture": "arm64",
# "os": "linux"
# }
# {
# "architecture": "ppc64le",
# "os": "linux"
# }
Kubernetes 集成
节点就绪性
AlmaLinux 作为 Kubernetes 节点具有以下优势:
1. 内核特性支持
bash
# 检查 Kubernetes 所需的内核特性
grep CONFIG_CGROUPS /boot/config-$(uname -r)
grep CONFIG_NAMESPACES /boot/config-$(uname -r)
grep CONFIG_NET_CLS_CGROUP /boot/config-$(uname -r)
# 验证 cgroup 支持
mount | grep cgroup
ls -la /sys/fs/cgroup/
2. 容器运行时兼容性
bash
# 安装 CRI-O(推荐的 K8s 容器运行时)
sudo dnf install -y cri-o cri-tools
# 配置并启动 CRI-O
sudo systemctl enable --now crio
# 验证安装
sudo crictl version
3. 网络插件支持
bash
# 安装网络相关组件
sudo dnf install -y iproute-tc
# 验证网络功能
ip link show
modprobe br_netfilter
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
Kubernetes 安装示例
使用 kubeadm 安装
bash
# 1. 安装 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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 2. 安装 Kubernetes 组件
sudo dnf install -y kubelet kubeadm kubectl
# 3. 启用 kubelet
sudo systemctl enable --now kubelet
# 4. 初始化集群(master 节点)
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 \
--image-repository=registry.aliyuncs.com/google_containers
# 5. 配置 kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
云平台兼容性
主流云服务商支持
云平台 | AlmaLinux 9 | AlmaLinux 10 | 镜像来源 | 特殊配置 |
---|---|---|---|---|
AWS | ✅ | ✅ | 官方 AMI | cloud-init |
Azure | ✅ | ✅ | 官方镜像 | waagent |
Google Cloud | ✅ | ✅ | 官方镜像 | gce-agent |
阿里云 | ✅ | 🔄 | 社区镜像 | cloud-init |
腾讯云 | ✅ | 🔄 | 社区镜像 | cloud-init |
华为云 | ✅ | 🔄 | 社区镜像 | cloud-init |
Cloud-init 配置示例
yaml
#cloud-config
# AlmaLinux 云原生环境初始化
package_update: true
package_upgrade: true
packages:
- podman
- buildah
- skopeo
- git
- wget
- curl
# 配置容器镜像加速
write_files:
- path: /etc/containers/registries.conf
content: |
[[registry]]
prefix = "docker.io"
location = "docker.mirrors.ustc.edu.cn"
[[registry]]
prefix = "k8s.gcr.io"
location = "registry.aliyuncs.com/google_containers"
runcmd:
# 启用 Podman 服务
- systemctl enable --now podman
# 配置防火墙
- firewall-cmd --permanent --add-port=6443/tcp # K8s API Server
- firewall-cmd --permanent --add-port=10250/tcp # kubelet
- firewall-cmd --reload
# 优化内核参数
- echo 'net.bridge.bridge-nf-call-iptables = 1' >> /etc/sysctl.conf
- echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
- sysctl -p
DevOps 工具链
CI/CD 平台支持
GitLab CI/CD
yaml
# .gitlab-ci.yml 示例
variables:
CONTAINER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
stages:
- build
- test
- deploy
build:
stage: build
image: registry.cn-hangzhou.aliyuncs.com/almalinux/almalinux:9
script:
- dnf install -y podman
- podman build -t $CONTAINER_IMAGE .
- podman push $CONTAINER_IMAGE
Jenkins Pipeline
groovy
pipeline {
agent {
node {
label 'almalinux'
}
}
stages {
stage('Build') {
steps {
sh 'podman build -t myapp:${BUILD_NUMBER} .'
}
}
stage('Test') {
steps {
sh 'podman run --rm myapp:${BUILD_NUMBER} npm test'
}
}
stage('Deploy') {
steps {
sh 'kubectl set image deployment/myapp myapp=myapp:${BUILD_NUMBER}'
}
}
}
}
监控和日志
Prometheus + Grafana
bash
# 部署监控栈
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/main/bundle.yaml
# 创建 Prometheus 实例
cat <<EOF | kubectl apply -f -
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: prometheus
spec:
serviceAccountName: prometheus
serviceMonitorSelector:
matchLabels:
team: frontend
resources:
requests:
memory: 400Mi
EOF
日志聚合(ELK Stack)
bash
# 使用 Podman 部署 Elasticsearch
podman run -d --name elasticsearch \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
docker.elastic.co/elasticsearch/elasticsearch:8.11.0
# 部署 Kibana
podman run -d --name kibana \
-p 5601:5601 \
--link elasticsearch:elasticsearch \
docker.elastic.co/kibana/kibana:8.11.0
性能基准测试
容器性能测试
bash
# 安装基准测试工具
dnf install -y sysbench fio
# 容器启动时间测试
time podman run --rm almalinux:9 echo "Hello AlmaLinux"
# 容器内存开销测试
podman stats --no-stream almalinux:9
# 存储性能测试
podman run --rm -v /tmp:/data almalinux:9 \
fio --name=test --filename=/data/testfile --size=1G --rw=randwrite --bs=4k --runtime=30
Kubernetes 性能测试
bash
# 安装 Kubernetes 性能测试工具
wget https://github.com/kubernetes/perf-tests/archive/master.zip
unzip master.zip
# 运行集群负载测试
cd perf-tests-master/clusterloader2
go run cmd/clusterloader.go --testconfig=testing/load/config.yaml
最佳实践
1. 容器镜像优化
dockerfile
# 多阶段构建示例
FROM almalinux:9 AS builder
RUN dnf install -y gcc make
COPY . /src
WORKDIR /src
RUN make build
FROM almalinux:9-minimal
RUN dnf install -y --setopt=install_weak_deps=False \
ca-certificates && \
dnf clean all
COPY --from=builder /src/app /usr/local/bin/
USER 1001
EXPOSE 8080
CMD ["/usr/local/bin/app"]
2. 安全配置
bash
# 非特权容器运行
podman run --user 1001:1001 almalinux:9
# 只读根文件系统
podman run --read-only almalinux:9
# 限制系统调用
podman run --security-opt seccomp=default.json almalinux:9
3. 资源管理
bash
# 设置资源限制
podman run --memory=512m --cpus=1.0 almalinux:9
# 使用 cgroup v2
echo 'cgroup_manager = "systemd"' >> /etc/containers/containers.conf
下一步:
- 容器支持详解 - 深入了解容器技术
- Kubernetes 集成指南 - K8s 集群部署实践