这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

操作系统

操作系统

操作系统

1 - Alpine

Alpine

Alpine 操作系统是一个面向安全的轻型Linux发行版。相比其他操作系统,体积非常小。提供自己的包管理工具 apk,可以直接安装各种软件。

Alpine Docker 镜像也继承了 Alpine Linux 发行版的优势,体积只有5M左右。作为基础镜像,有许多好处,如下载快,镜像安全性高,占用更少磁盘等。

apk 包管理

首先替换默认的安装源,采用国内一些源:

  • 中科大:http://mirrors.ustc.edu.cn/alpine/
  • 阿里云:https://mirrors.aliyun.com/alpine/
  • 清华大学:https://mirror.tuna.tsinghua.edu.cn/alpine/

使用方法:

sed -i 's/dl-cdn.alpinelinux.org/mirror.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
apk update # 更新索引生效
apk upgrade --no-cache # 安装可用的升级

Alpine中软件安装包名字可能回合其他发行版不同,可以在 alpine-package 网站搜索。

包管理命令:

查找包:

apk search # 查找所有可用包
apk search -v # 带描述

安装包:

apk add openssh # 安装
apk add openssh vim # 安装多个
apk add --no-cache vim # 不使用本地镜像源缓存,相当于先执行 update ,再执行add

安装信息:

apk info # 已安装的包
apk info -a vim # 显示完整的软件包信息

更新包:

apk upgrade # 升级所有软件
apk upgrade openssh # 指定升级
apk upgrade openssh vim # 指定升级多个

删除包:

apk del vim # 删除

服务管理

alpine 没有使用 systemctl 进行服务管理,使用 rc 系列命令。

精简版的 alpine 没有rc系列命令,可以使用 apk add –no-cache openrc 安装

  • rc-update 增加或者删除服务
  • rc-status 状态管理
  • rc-service 管理服务的状态
  • openrc 管理不同的运行级
rc-status -a # 列出所有服务
rc-udate add docker boot # 增加服务到系统启动时运行
rc-service networking restart # 重启网络服务

docker-alpine 镜像

大部分官方镜像都支持使用 Alpine 作为基础镜像。

制作镜像

FROM alpine:3

RUN sed -i 's/dl-cdn.alpinelinux.org/mirror.tuna.tsinghua.edu.cn/g' /etc/apk/repositories

RUN apk update \
    && apk upgrade --no-cache \
    && apk add --no-cache vim

相关资源

  • Alpine 官网:https://www.alpinelinux.org/
  • Alpine 官方仓库:https://github.com/alpinelinux
  • Alpine 官方镜像:https://hub.docker.com/_/alpine/
  • Alpine 官方镜像仓库:https://github.com/gliderlabs/docker-alpine

2 - Flatcar Container Linux

Flatcar Container Linux

Flatcar 是一种容器优化的操作系统,提供了一个最小的操作系统镜像,其中仅包含运行容器所需要的工具。操作系统通过不可变的文件系统交付,并包括自动院子更新。

安装

支持大多数的云供应商、虚拟化平台和裸机服务器上运行。这里主要介绍几种不同的方式在裸机安装:

  • 从 ISO 镜像安装
  • 使用 PXE 引导
  • 使用 iPXE 启动
  • 使用 flatcar-install 安装

iPXE

iPXE 是一个开源网络启动固件。提供了一个完整的 PXE 实施,增强了其他功能,例如:

  • 通过 HTTP 从 web 服务器启动
  • 从无线网络启动
  • 从广域网启动
  • 从 Infiniband 网络启动
  • 使用脚本控制启动过程

iPXE 同时支持 UEFI 和 BIOS 平台。

PXE

PXEPerboot eXecution Environment 的缩写,意为“预启动执行环境”,这种机制可以使计算机通过网络来引导。现在的绝大多数电脑都可以设置通过 PXE 启动。 PXE 的工作原理是 PXE Client 通过 DHCP 获取 IP,并由 DHCP 服务器告诉客户端启动文件的位置,再通过 TFTP 协议传输引导文件,最终引导电脑启动。

使用 flatcar-install 安装

使用 flatcar-install 脚本安装.

fatcar-install -d /dev/sda -i ignition.json

ignition.json 文件包括从 Butane Config 生成的用户信息,否则无法登陆 Flatcar 实例。 如果是在 VMware 上安装,传递 -o vmware_raw 以安装特定于 VMware 的镜像。

flatcar-install -d /dev/sda -i ignition.json -o vmware_raw

选择 channel

Flatcar Container Linux根据每个频道的不同时间表自动更新,可以禁用此功能。生产环境使用 stable channel,要确保使用稳定版本,使用以下选项:

flatca-install -d /dev/sda -C stable

Butane Configs

默认情况下,没有密码和其他方式登陆到新的 Flatcar Container Linux 系统,配置账户、添加 systemd 单元等最简单的方法是通过 Butane Configs。 使用 Butane 生成 Ignition 配置后,安装脚本将处理 ignition.json 文件。

为用户指定ssh密钥core的yaml文件如下:

variant: flatcar
version: 1.0.0
passwd:
  users:
    - name: core
      ssh_authorized_keys:
        - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGdByTgSVHq.......

将其转译为 json 文件:

cat c1.yaml |docker run --rm -i quay.io/coreos/butane:latest > ignition.json
sudo ifconfig eno1 172.xxx.xxx.xxx netmask 255.255.255.0
sudo route add default gw 172.xxx.xxx.1

#... 添加 config.json 文件
sudo -E flatcar-install -C stable -d /dev/sda -i config.json
passwd:
  users:
    - name: "core"
      ssh_authorized_keys:
        - "ssh-rsa AAAA
    - name: "aaa"
      password_hash: "$6$brlNJCk"
      ssh_authorized_keys:
        - "ssh-rsa AAAAB3NzaC1yc2E"
      groups:
        - "sudo"
        - "docker"
networkd:
  units:
    - name: 00-eno.network
      contents: |
        [Match]
        Name=eno*        
 
        [Network]
        Bond=bond0
    - name: 10-bond0.netdev
      contents: |
        [NetDev]
        Name=bond0
        Kind=bond        
 
        [Bond]
        Mode=active-backup
        MIIMonitorSec=1
    - name: 20-bond0.network
      contents: |
        [Match]
        Name=bond0        
 
        [Network]
        DNS=172.xxx
        DNS=172.xxx
        Address=172.xxx/24
        Gateway=172.16.164.1
systemd:
  units:
    - name: containerd.service
      dropins:
        - name: 10-use-cgroupfs.conf
          contents: |
            [Service]
            Environment=CONTAINERD_CONFIG=/usr/share/containerd/config-cgroupfs.toml               
    - name: settimezone.service
      enabled: true
      contents: |
        [Unit]
        Description=Set the time zone        
 
        [Service]
        ExecStart=/usr/bin/timedatectl set-timezone America/Los_Angeles
        RemainAfterExit=yes
        Type=oneshot
 
        [Install]
        WantedBy=multi-user.target  
    - name: systemd-networkd.service
      enable: true
    - name: update-engine.service
      mask: true
    - name: locksmithd.service
      mask: true
 
storage:
  filesystems:
    - name: "OEM"
      mount:
        device: "/dev/disk/by-label/OEM"
        format: "btrfs"
  files:
    - filesystem: "OEM"
      path: "/grub.cfg"
      mode: 0644
      append: true
      contents:
        inline: |
                    set linux_append="$linux_append systemd.unified_cgroup_hierarchy=0 systemd.legacy_systemd_cgroup_controller"                    
    - path: /etc/flatcar-cgroupv1
      mode: 0444
    - filesystem: "root"
      path:       "/etc/hostname"
      mode:       0644
      contents:
        inline: nodeIp
    - path: /etc/systemd/timesyncd.conf
      filesystem: root
      mode: 0644
      contents:
        inline: |
          [Time]
          NTP=xxx