Skip to content

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 9AlmaLinux 10镜像来源特殊配置
AWS官方 AMIcloud-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

下一步

基于 MIT 许可发布