长期支持版本

    K8S+iSulad 搭建

    除非特别说明,以下步骤在master节点和node节点均需执行,本教程以master为例

    开始之前

    需准备如下内容:

    • NestOS-22.03-date.x86_64.iso
    • 一台主机用作master,一台主机用作node

    组件下载

    编辑源文件,添加k8s的阿里云源

    vi /etc/yum.repos.d/openEuler.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
    

    下载k8s组件以及同步系统时间所用组件

    rpm-ostree install kubelet kubeadm kubectl ntp ntpdate wget
    

    重启生效

    systemctl reboot
    

    选择最新的版本分支进入系统

    配置环境

    修改主机名,以master为例

    hostnamectl set-hostname k8s-master
    sudo -i
    

    编辑/etc/hosts

    vi /etc/hosts
    

    添加如下内容,ip为主机ip

    192.168.237.133 k8s-master
    192.168.237.135 k8s-node01
    

    同步系统时间

    ntpdate time.windows.com
    systemctl enable ntpd
    
    关闭swap分区,防火墙,selinux
    

    NestOS默认无swap分区,默认关闭防火墙, 关闭selinux如下

    vi /etc/sysconfig/selinux
    修改为SELINUX=disabled
    

    网络配置,开启相应的转发机制

    创建配置文件

    vi /etc/sysctl.d/k8s.conf
    

    添加如下内容

    net.bridge.bridge-nf-call-iptables=1
    net.bridge.bridge-nf-call-ip6tables=1
    net.ipv4.ip_forward=1
    

    使配置生效

    modprobe br_netfilter
    sysctl -p /etc/sysctl.d/k8s.conf
    

    配置iSula

    查看k8s需要的系统镜像,需注意pause的版本号

    kubeadm config images list
    

    修改daemon配置文件

    vi /etc/isulad/daemon.json
    
    ##关于添加项的解释说明##
    registry-mirrors 设置为"docker.io"
    insecure-registries 设置为"rnd-dockerhub.huawei.com"
    pod-sandbox-image 设置为"registry.aliyuncs.com/google_containers/pause:3.5"(使用阿
    里云,pause版本可在上一步查看)
    network-plugin 设置为"cni"。
    cni-bin-dir 设置为"/opt/cni/bin";
    cni-conf-dir 设置为"/etc/cni/net.d"
    

    修改后的完整文件如下

    {"group": "isula",
    "default-runtime": "lcr",
    "graph": "/var/lib/isulad",
    "state": "/var/run/isulad",
    "engine": "lcr",
    "log-level": "ERROR",
    "pidfile": "/var/run/isulad.pid",
    "log-opts": {
    "log-file-mode": "0600",
    "log-path": "/var/lib/isulad",
    "max-file": "1",
    "max-size": "30KB"
    },
    "log-driver": "stdout",
    "container-log": {
    "driver": "json-file"
    },
    "hook-spec": "/etc/default/isulad/hooks/default.json",
    "start-timeout": "2m",
    "storage-driver": "overlay2",
    "storage-opts": [
    "overlay2.override_kernel_check=true"
    ],
    "registry-mirrors": [
    "docker.io"
    ],
    "insecure-registries": [
    "rnd-dockerhub.huawei.com"
    ],
    "pod-sandbox-image": "registry.aliyuncs.com/google_containers/pause:3.5",
    "native.umask": "secure",
    "network-plugin": "cni",
    "cni-bin-dir": "/opt/cni/bin",
    "cni-conf-dir": "/etc/cni/net.d",
    "image-layer-check": false,
    "use-decrypted-key": true,
    "insecure-skip-verify-enforce": false
    }
    

    启动相关服务

    systemctl restart isulad
    systemctl enable isulad
    systemctl enable kubelet
    

    以上为master,node节点均需执行的操作。

    master节点初始化

    该部分仅master节点执行。 在初始化这一步会拉取镜像,需等待一小段时间,也可在该步骤之前手动拉取镜像。

    kubeadm init --kubernetes-version=1.22.2 --apiserver-advertise-
    address=192.168.237.133 --cri-socket=/var/run/isulad.sock --image-repository
    registry.aliyuncs.com/google_containers --service-cidr=10.10.0.0/16 --pod-
    network-cidr=10.122.0.0/16
    
    ##关于初始化参数的解释说明##
    kubernetes-version 为当前安装的版本
    apiserver-advertise-address 为master节点ip
    cri-socket 指定引擎为isulad
    image-repository 指定镜像源为阿里云,可省去修改tag的步骤
    service-cidr 指定service分配的ip段
    pod-network-cidr 指定pod分配的ip段
    

    初始化成功后,复制最后两行内容方便后续node节点加入使用

    kubeadm join 192.168.237.133:6443 --token j7kufw.yl1gte0v9qgxjzjw --discovery-
    token-ca-cert-hash
    sha256:73d337f5edd79dd4db997d98d329bd98020b712f8d7833c33a85d8fe44d0a4f5 --cri-
    socket=/var/run/isulad.sock
    

    注意:添加--cri-socket=/var/run/isulad.sock以使用isulad为容器引擎, 查看下载好的镜像

    isula images
    

    按照初始化成功所提示,配置集群

    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
    export KUBECONFIG=/etc/kubernetes/admin.conf
    source /etc/profile
    

    查看健康状态

    kubectl get cs
    

    可能存在controller-manager,scheduler状态为unhealthy的情况,解决方法如下:
    编辑相关配置文件

    vi /etc/kubernetes/manifests/kube-controller-manager.yaml
    
    注释如下内容:
    --port=0
    修改hostpath:
    将所有/usr/libexec/kubernetes/kubelet-plugins/volume/exec 修改为/opt/libexec/...
    
    vi /etc/kubernetes/manifests/kube-scheduler.yaml
    
    注释如下内容:
    --port=0
    

    修改完成后,再次查看健康状态

    配置网络插件

    仅需要在master节点配置网络插件,但是要在所有节点提前拉取镜像,拉取镜像指令如下。

    isula pull calico/node:v3.19.3
    isula pull calico/cni:v3.19.3
    isula pull calico/kube-controllers:v3.19.3
    isula pull calico/pod2daemon-flexvol:v3.19.3
    

    以下步骤仅在master节点执行 获取配置文件

    wget https://docs.projectcalico.org/v3.19/manifests/calico.yaml
    

    编辑calico.yaml 修改所有/usr/libexec/... 为 /opt/libexec/... 然后执行如下命令完成calico的安装:

    kubectl apply -f calico.yaml
    

    通过kubectl get pod -n kube-system查看calico是否安装成功 通过kubectl get pod -n kube-system查看是否所有pod状态都为running

    node节点加入集群

    在node节点执行如下指令,将node节点加入集群

    kubeadm join 192.168.237.133:6443 --token j7kufw.yl1gte0v9qgxjzjw --discovery-
    token-ca-cert-hash
    sha256:73d337f5edd79dd4db997d98d329bd98020b712f8d7833c33a85d8fe44d0a4f5 --cri-
    socket=/var/run/isulad.sock
    

    通过kubectl get node 查看master和node节点状态是否为ready

    至此,k8s部署成功。

    rpm-ostree使用

    rpm-ostree安装软件包

    安装wget

    rpm-ostree install wget
    

    重启系统,可在启动时通过键盘上下按键选择rpm包安装完成后或安装前的系统状态,其中【ostree:0】为安装之后的版本。

    systemctl reboot
    

    查看wget是否安装成功

    rpm -qa | grep wget
    

    rpm-ostree 手动更新升级 NestOS

    在NestOS中执行命令可查看当前rpm-ostree状态,可看到当前版本号

    rpm-ostree status
    

    执行检查命令查看是否有升级可用,发现存在新版本

    rpm-ostree upgrade --check
    

    预览版本的差异

    rpm-ostree upgrade --preview
    

    在最新版本中,我们将nano包做了引入。 执行如下指令会下载最新的ostree和RPM数据,不需要进行部署

    rpm-ostree upgrade --download-only
    

    重启NestOS,重启后可看到系统的新旧版本两个状态,选择最新版本的分支进入

    rpm-ostree upgrade --reboot
    

    比较NestOS版本差别

    检查状态,确认此时ostree有两个版本,分别为LTS.20210927.dev.0和LTS.20210928.dev.0

    rpm-ostree status
    

    根据commit号比较2个ostree的差别

    rpm-ostree db diff 55eed9bfc5ec fe2408e34148
    

    系统回滚

    当一个系统更新完成,之前的NestOS部署仍然在磁盘上,如果更新导致系统出现了问题,可以使用之前的部署回滚系统。

    临时回滚

    要临时回滚到之前的OS部署,在系统启动过程中按住shift键,当引导加载菜单出现时,在菜单中选择相关的分支。

    永久回滚

    要永久回滚到之前的操作系统部署,登录到目标节点,运行rpm-ostree rollback,此操作将使用之前的系统部署作为默认部署,并重新启动到其中。 执行命令,回滚到前面更新前的系统。

    rpm-ostree rollback
    

    切换版本

    在上一步将NestOS回滚到了旧版本,可以通过命令切换当前 NestOS 使用的rpm-ostree版本,将旧版本切换为新版本。

    rpm-ostree deploy -r 22.03.20220325.dev.0
    

    重启后确认目前NestOS已经使用的是新版本的ostree了。

    zincati自动更新使用

    zincati负责NestOS的自动更新,zincati通过cincinnati提供的后端来检查当前是否有可更新版本,若检测到有新版本,会通过rpm-ostree进行下载。

    目前系统默认关闭zincati自动更新服务,可通过修改配置文件设置为开机自动启动自动更新服务。

    vi /etc/zincati/config.d/95-disable-on-dev.toml
    

    将updates.enabled设置为true 同时增加配置文件,修改cincinnati后端地址

    vi /etc/zincati/config.d/update-cincinnati.toml
    

    添加如下内容

    [cincinnati]
    base_url="http://nestos.org.cn:8080"
    

    设置zincati服务开机自动启动(重启机器生效)

    systemctl enable zincati.service
    

    重新启动zincati服务

    systemctl restart zincati.service
    

    当有新版本时,zincati会自动检测到可更新版本,此时查看rpm-ostree状态,可以看到状态是“busy”,说明系统正在升级中。

    一段时间后NestOS将自动重启,此时再次登录NestOS,可以再次确认rpm-ostree的状态,如果状态转为"idle",而且当前版本已经是“20220325”,这说明rpm-ostree版本已经升级了。

    查看zincati服务的日志,确认升级的过程和重启系统的日志。另外日志显示的"auto-updates logic enabled"也说明更新是自动的。

    定制NestOS

    我们可以使用nestos-installer 工具对原始的NestOS ISO文件进行加工,将Ignition文件打包进去从而生成定制的 NestOS ISO文件。使用定制的NestOS ISO文件可以在系统启动完成后自动执行NestOS的安装,因此NestOS的安装会更加简单。

    在开始定制NestOS之前,需要做如下准备工作:

    • 下载 NestOS ISO
    • 准备 config.ign文件

    生成定制NestOS ISO文件

    设置参数变量

    $ export COREOS_ISO_ORIGIN_FILE=nestos-22.03.20220324.x86_64.iso
    $ export COREOS_ISO_CUSTOMIZED_FILE=my-nestos.iso
    $ export IGN_FILE=config.ign
    

    ISO文件检查

    确认原始的NestOS ISO文件中没有包含Ignition配置。

    $ nestos-installer iso ignition show $COREOS_ISO_ORIGIN_FILE 
    
    Error: No embedded Ignition config.
    

    生成定制NestOS ISO文件

    将Ignition文件和原始NestOS ISO文件打包生成定制的NestOS ISO文件。

    $ nestos-installer iso ignition embed $COREOS_ISO_ORIGIN_FILE --ignition-file $IGN_FILE $COREOS_ISO_ORIGIN_FILE --output $COREOS_ISO_CUSTOMIZED_FILE
    

    ISO文件检查

    确认定制NestOS ISO 文件中已经包含Ignition配置了

    $ nestos-installer iso ignition show $COREOS_ISO_CUSTOMIZED_FILE
    

    执行命令,将会显示Ignition配置内容

    安装定制NestOS ISO文件

    使用定制的 NestOS ISO 文件可以直接引导安装,并根据Ignition自动完成NestOS的安装。在完成安装后,我们可以直接在虚拟机的控制台上用nest/password登录NestOS。

    文档捉虫

    “有虫”文档片段

    问题描述

    提交类型 issue

    有点复杂...

    找人问问吧。

    PR

    小问题,全程线上修改...

    一键搞定!

    问题类型
    规范和低错类

    ● 错别字或拼写错误;标点符号使用错误;

    ● 链接错误、空单元格、格式错误;

    ● 英文中包含中文字符;

    ● 界面和描述不一致,但不影响操作;

    ● 表述不通顺,但不影响理解;

    ● 版本号不匹配:如软件包名称、界面版本号;

    易用性

    ● 关键步骤错误或缺失,无法指导用户完成任务;

    ● 缺少必要的前提条件、注意事项等;

    ● 图形、表格、文字等晦涩难懂;

    ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

    正确性

    ● 技术原理、功能、规格等描述和软件不一致,存在错误;

    ● 原理图、架构图等存在错误;

    ● 命令、命令参数等错误;

    ● 代码片段错误;

    ● 命令无法完成对应功能;

    ● 界面错误,无法指导操作;

    风险提示

    ● 对重要数据或系统存在风险的操作,缺少安全提示;

    内容合规

    ● 违反法律法规,涉及政治、领土主权等敏感词;

    ● 内容侵权;

    您对文档的总体满意度

    非常不满意
    非常满意
    提交
    根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
    文档捉虫
    编组 3备份